Es wird in GET-Feld X ein gültiger Wert eingegeben, Feld X wird verlassen.
Dann wird etwas rumgetabbt, andere Felder bearbeitet bis alle Eingaben stimmen, zum Schluss steht der benutzer zufällig wieder auf Feld X.
Dann schließt der Benutzer die Eingabemaske mit ESC...
Ojé, der in Feld X eingegebene und validierte Wert ist weg!
Uns Programmierern ist klar, was hier passiert: ESC in einem GET-Feld setzt der Inhalt zurück.
Aus Benutzersicht ist dieses Verhalten aber schwer zu verstehen, und nicht zu vermitteln.
In der Hilfe zu @...GET steht:
Wenn nicht das Feld sonst verlassen wurde, ist das natürlich sinnvoll, so kann man abbrechen (mit Originalwert) selbst wenn der Inhalt ungültig ist.If the user ends the editing procedure by pressing the Esc key, the original value is assigned to the variable <VarName>.
Kern des Problems ist aber: Der Originalwert ist anscheinend nur einmal gesetzt.
In der Hilfe zu Get:original steht:
Wenn das aber doch jedesmal passieren würde wenn das Get-Objekt den Fokus bekommt, dann gäbe es nicht dieses Problem.When a Get object receives input focus a copy of the value contained in the variable is stored in the instance variable :original.
Ich weiß nicht, ob man das als Bug bezeichnen kann - die Hilfe ist hier nicht 100% eindeutig, und es war vermutlich schon immer so.
Also, was können wir dagegen tun?
Instanzvariable :original ist leider geschützt und lässt sich nicht setzen (z.B. nach erfolgreicher Validierung).
Ich habe auch keine Member-Funktion gefunden, die dies machen würde.
In der Hilfe zu ReadModal wird die Datei GETSYS.PRG erwähnt.
Vielleicht würde dieser Code einen Hinweis liefern, leider konnte ich aber die Datei nicht finden, und nun bin ich mit meinem Latein am Ende.
Ich hoffe, dass ich mich verständlich ausgedruckt habe, und dass vielleicht jemand eine weitere Idee hat.