Hallo,
ich habe ein Fenster mit Eingabefelder. Diese will ich auf bestimmte Zeichen abfragen. Wenn eines dieser Fenster ein Zeichen enthält, springt ein Fenster auf ("Ungültige Eingabe").
Mein Problem: Die Felder werden ja erst überprüft, wenn ich im Optionsfenster mit "OK" bestätige. Wie schaffe ich es, wenn ein solches Zeichen vorhanden ist, das Event zum schließen des Optionsfenster zu unterbrechen damit der Nutzer die Eingabe korrigieren kann?
XbpSLE Zeichenabfrage
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: XbpSLE Zeichenabfrage
Moin,
spontan, ungetestet, würde ich sagen, eine passende Funktion in :keyboard zu bauen. Wenn eines der betreffenden verbotenen Zeichen in :editBuffer auftaucht, die Meldung rausschmeißen, und per :setData die Zeichenkette ohne das unerwünschte Zeichen reinschreiben.
Jan
spontan, ungetestet, würde ich sagen, eine passende Funktion in :keyboard zu bauen. Wenn eines der betreffenden verbotenen Zeichen in :editBuffer auftaucht, die Meldung rausschmeißen, und per :setData die Zeichenkette ohne das unerwünschte Zeichen reinschreiben.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Re: XbpSLE Zeichenabfrage
Ich möchte die Zeichen nicht "auto löschen lassen", der Benutzer soll das selbst tun.
Mein Gedanke war folgender. Die Fehlermeldung wird ja per Funktion aufgerufen, kann ich diese irgendwie unterbrechen wenn ich unter die Bedingung ein loop setzte?
Mein Gedanke war folgender. Die Fehlermeldung wird ja per Funktion aufgerufen, kann ich diese irgendwie unterbrechen wenn ich unter die Bedingung ein loop setzte?
- Jan
- Marvin
- Beiträge: 14655
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: XbpSLE Zeichenabfrage
Naja, Du könntest das "autolöschen" ja auch weg lassen. Wenn Du dann kontrollierst, was das letzte eingegeben Zeichen war, und dieses eines der unerwünschten, dann kommt die Meldung halt nur dann. Der Weg wäre gleich dem, was ich oben skizziert habe. Nur eben ohne das :setData. Du müsstes nur auslesen, an welcher Position der Cursor steht, und ob das Zeichen davor eines der betreffenden ist. Dann kommt die Fehlermeldung nicht bei jedem Tastendruck - bei den korrigierenden wäre das ja z. B. ziemlich unpraktisch.
Jan
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: XbpSLE Zeichenabfrage
Wenn man Eingaben während der Eingabe prüfen will, nimmt man, wie Jan ausgeführt hat, den Keyboard-Slot des SLEs:
Das wird Dir über Kurz oder Lang jeder Benutzer um die Ohren hauen. Es wäre sinnvoller, die falschen Zeichen einfach zu löschen:
Noch einfacher ist es, sich fertige Klassen oder Frameworks zu holen, die so etwas unterstützen, also beispielsweise Roger Donnay's eXpress++ oder das hier schon erwähnte SLEpic. Da hängt man dann Validierungs- und Pictureklauseln an die SLEs und feddisch. Das hätte auch den Vorteil, dass sie Cut&Paste abfangen, was der Keyboard-Slot allein nicht schafft.
Code: Alles auswählen
oXbp:Keyboard := {|n,x,o|TesteEingabe(n,o)} // n ist der Tastencode, o das Objekt
FUNCTION TesteEingabe(n,o)
IF Ungueltig(n) // z.B. n = 65 - der Großbuchstabe "A" ist nicht erlaubt
MsgBox('Fehler!")
ENDIF
RETURN NIL
Code: Alles auswählen
FUNCTION TesteEingabe(n,o)
IF Ungueltig(n) // z.B. n = 65 - der Großbuchstabe "A" ist nicht erlaubt
o:Undo() // letztes Event rückgängig
ENDIF
RETURN NIL
Herzlich,
Tom
Tom