fliegermichl hat geschrieben: Fr 25. Sep 2020, 07:57
Hi,
das ist insgesamt eine Thematik, die meiner Meinung nach schon immer etwas stört.
Wann macht man beispielsweise sinnvoll die Prüfung eines Eingabewertes in einem TEdit?
mse hat dafür den Event OnDataEntered. Wenn man einen Wert eingegeben hat und Enter drückt, wird dieser Event gefeuert.
Ein weiteres Enter löst dann das vordefinierte Verhalten aus. (z.B. ButtonClick des Default Button)
So etwas fehlt in Lazarus.
Gruß
Michael
Hi!
Um gültige Werte schon beim Tastendruck zu überprüfen: Dafür gibt's KeyPress/KeyDown/KeyUp:
Man baut sich ein Set von erlaubten Werten, und wenn der Key-Wert nicht im Set ist, wird der Wert 0 bzw #0.
Ein Set für KeyDown für die Eingbe von Integer-Werten sieht dann so aus:
Code: Alles auswählen
Const
IntSet =[VK_0..VK9, VK_Left,VK_right, VK_Back,VK_Delete, VK_OEM_MINUS]
Dann entfällt die ganze Arie mit OnDataEntered:
Die Werte im Edit.text sind immer im legalen Bereich.
Lästig ist dabei die Überprüfungen von Minus bzw Dezimal-Punkt bei Floats:
Überprüfen ob sie nur maximal einmal vorhanden sind und an der richtigen Stelle stehen.
Letzteres kann man sich sparen, wenn man nach jedem KeyDown Folgendes macht:
Wenn error <> 0 dann den gespeicherten letzten Wert nehmen und Key auf Null setzen .
Ein weiterer Fallstrick ist die Eingabe von Exponential-Eingaben bei Floats.
Tippt man ein E - weil man 123E45 eingeben will - so ist das in dem Moment kein
valider Wert - muss man gesondert behandeln.
Winni
PS.: OnSelect ist auch schwer zu finden. Da muss man ja im OI runterscrollen ...
Winni