Hallo David,,,
es scheint so als hätte ich einen BUG in tbGUIInput gefunden.
[Erklärung]
Wenn ich mit dem nachfolgenden Code ein Eingabefeld erzeuge und dann im laufenden Programm die Zeichen lösche, geht es so lange gut bis das letzte Zeichen gelöscht wird, dann stürtzt das Programm ohne Fehlermeldung sofort ab.
|
Quellcode
|
1
|
m_pGUI->CreateInput(503, 4, tbVector2(200.0f, 200.0f), tbVector2(500.0f, 50.0f), "Test", FALSE, '*');
|
Versuche ich ein leeres Eingabefeld mit dem nachfolgendem Code
|
Quellcode
|
1
|
m_pGUI->CreateInput(503, 4, tbVector2(200.0f, 200.0f), tbVector2(500.0f, 50.0f), "", FALSE, '*');
|
zu erzeugen, stürtzt das Programm ebenfalls ohne Fehlermeldung ab, nachdem die Page auf der sich das Feld befindet aktiviert wird, z.B. durch klicken auf eine Schaltfläche die den Code :
|
Quellcode
|
1
2
3
4
|
case 150: // TEST Page aktiv setzen und zeigen
pGUI->SetCurrentPage(4);
ipActPage = 4;
break;
|
enthält.
[Fehlerbehebung]
Ich habe das jetzt ersteinmal wie folgt behoben :
Die Datei tbGUIInput.cpp aus der Engine geöffnet und den folgenden Code :
|
Quellcode
|
1
2
3
4
5
6
7
8
9
|
case TB_KEY_BACK:
if(m_iCursor > 0)
{
// Zeichen löschen
for(int i = m_iCursor - 1; i < (int)(strlen(m_acText)); i++) m_acText[i] = m_acText[i + 1];
m_iCursor--;
}
break;
|
durch diesen Code :
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
|
case TB_KEY_BACK:
// 28.08.2003
// BUG werden alle Zeichen gelöscht stürzt das Programm ab
// if(m_iCursor > 0)
if(m_iCursor > 1)
{
// Zeichen löschen
for(int i = m_iCursor - 1; i < (int)(strlen(m_acText)); i++) m_acText[i] = m_acText[i + 1];
m_iCursor--;
}
break;
|
ersetzt. Die Engine neu erstellt, dann den obigen Code wie folgt abgeändert :
|
Quellcode
|
1
|
m_pGUI->CreateInput(503, 4, tbVector2(200.0f, 200.0f), tbVector2(500.0f, 50.0f), " ", FALSE, '*');
|
Jetzt kann das letzte Zeichen welches ein leerzeichen ist nicht mehr gelöscht werden.