Seite 1 von 1

Validierung XbpSLE

Verfasst: Fr, 23. Jun 2006 8:46
von mkersch
Guten Morgen,

für einige Eingabemasken möchte ich meine Eingabevalidierung (XbpSLE) optimieren.

Welche Vorgehensweise würdet ihr empfehlen ?


mfg.

Michael

Verfasst: Fr, 23. Jun 2006 8:55
von Martin Altmann
Hallo Michael,
schau Dir mal den KillInputFocus()-Callback an. Dieser feuert, sobald das Control den Fokus verlier (also z.B. das SLE verlassen wird).
Du mußt nur höllisch aufpassen, was Du in der dann aufrufenden Funktion machst - setzt Du z.B. den Fokus wieder auf das Control zurück (um es optisch sozusagen nicht zu verlassen), kann das in einer Endlosschleife enden, wenn Du in Deiner Maske ein weiteres Control (z.B. SLE) hast, das Du genauso prüfst :!:
Beispiel:
Du hast die Eingabefelder Vorname und Nachname. Beide dürfen nicht leer sein. Wird eines der Felder verlassen und enthält keine Werte, wird mit SetAppFocus() das Control wieder aktiviert.
Wenn nun der Benutzer das leere Feld Vorname verlässt, indem er in das ebenfalls leere Feld Nachname klickt, so wird der Cursor immer zwischen den beiden Feldern hin- und herspringen!
Wichtig also zu wissen: KillInputFocus feuert erst dann, wenn das Control den Fokus wirklich verloren hat! Und das ist erst dann der Fall, wenn ein anderes Control den Fokus erhalten hat!
Wenn Du also so etwas abbilden willst, musst Du ein wenig mehr Gehirnschmalz investieren :D

Viele Grüße,
Martin

Verfasst: Fr, 23. Jun 2006 9:05
von mkersch
Vielen Dank für die schnelle Antwort.

Ich muss meine Frage noch ein wenig prezisieren.

Es soll bereits bei der Eingabe des ersten Zeichens (z.B. in ein Nummernfeld) nur die Nummern zugelassen werden usw.


mfg.

Michael

Verfasst: Fr, 23. Jun 2006 9:11
von Martin Altmann
Ah,
also nicht (nur) mit KillInputFoucs(), sondern auch mit der picture-Methode!
Oder wird es noch komplizierter? Z.B. nur Ziffern von 3 bis 9 und Buchstaben von b bis G?
Wenn ja, dann musst Du den keyboard-Callback Deines Fensters überlagern und Dich dort um die Auswertung der Tasten kümmern.
Dies natürlich abhängig vom Control, in dem die Tasten gedrückt wurden.

Viele Grüße,
Martin

Verfasst: Fr, 23. Jun 2006 9:23
von andreas
Hallo Michael,

du kannst auch den Keyboar-Callback von jedem XBPSLE bestimmen:

Code: Alles auswählen

::xbpsle:keyboard:= {|nkey| ::test(nkey) }
Damit kannst du dann für jeden Objekt eigene Überprüfungsroutine anstossen.

Verfasst: Fr, 23. Jun 2006 9:31
von mkersch
Hallo Martin,

du schreibst man kann dies auch mit der Picture-Methode erledigen.

Dies habe ich noch nicht ganz verstanden.

Was meinst du damit ?


mfg Michael

Verfasst: Fr, 23. Jun 2006 9:33
von Manfred
Hi Michael,

wenn es nur numerische Eingaben in einem bestimmten Bereich sein dürfen, warum nimmst Du dann nicht XbpSpinButton? Es kann von "Hand" eingegeben werden, oder mit Cursor rauf und runter und es wird validiert.

Verfasst: Fr, 23. Jun 2006 9:39
von Martin Altmann
Hallo Michael,
sorry, das ist bei mir in XClass++ enthalten - unter Xbase++ nur bei Get(), TBColumn() und XbpColumn().

Viele Grüße,
Martin

Verfasst: Fr, 23. Jun 2006 10:14
von Jan
Picture geht sehr gut mit der SLEPic-Klasse von Jim. Arbeite ich auch mit, ganz toll.

http://www.gogalthorp.com/splash/

Jan

Verfasst: Fr, 23. Jun 2006 10:28
von brandelh
Hallo,

ich habe mal in die Wissensbasis meine SpezialSLE eingestellt, vielleicht nützen sie dem einen oder anderen

http://www.xbaseforum.de/viewtopic.php?p=4734#4734

Verfasst: Fr, 23. Jun 2006 10:33
von Gerd König
Hallo Michael,

eine Möglichkeit ist auch beim create() des Fensters einen Thread zu erzeugen der sämtliche SLEs und MLEs auf gültige Zeichen überwacht und bei Eingabefehlern den Fokus auf das entsprechende Xbp setzt. Parallel dazu kann man noch in einer Statuszeile (wenn vorhanden) einen Hinweistext anzeigen.

Viele Grüße Gerd

Verfasst: Fr, 23. Jun 2006 12:10
von andreas
s. Beispiel von Alaska unter G:\ALASKA\XPPW32\Source\samples\solution\calcsle