XbpSLE Zeichenabfrage

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
vorti
UDF-Programmierer
UDF-Programmierer
Beiträge: 61
Registriert: Mo, 25. Sep 2017 12:21

XbpSLE Zeichenabfrage

Beitrag von vorti »

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?
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: XbpSLE Zeichenabfrage

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
vorti
UDF-Programmierer
UDF-Programmierer
Beiträge: 61
Registriert: Mo, 25. Sep 2017 12:21

Re: XbpSLE Zeichenabfrage

Beitrag von vorti »

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?
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: XbpSLE Zeichenabfrage

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: XbpSLE Zeichenabfrage

Beitrag von Tom »

Wenn man Eingaben während der Eingabe prüfen will, nimmt man, wie Jan ausgeführt hat, den Keyboard-Slot des SLEs:

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
Das wird Dir über Kurz oder Lang jeder Benutzer um die Ohren hauen. Es wäre sinnvoller, die falschen Zeichen einfach zu löschen:

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
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.
Herzlich,
Tom
Antworten