Version 6.0
Keystroke String
Parameter | Typ | Beschreibung | ||||
Dieser Befehl benötigt keine Parameter | ||||||
Funktionsergebnis | String | Vom Benutzer eingegebene Zeichen |
Beschreibung
Die Funktion Keystroke gibt das Zeichen zurück, das der Benutzer in ein Datenfeld oder einen eingebbaren Bereich eingetippt hat.
Sie rufen Keystroke im allgemeinen bei einem Formularerreignis On Keystroke in einem Formular oder einer Objektmethode auf. Mit der Funktion Form event können Sie Tastaturanschläge finden.
Mit dem Befehl FILTER KEYSTROKE können Sie soeben vom Benutzer eingegebene Anschläge durch andere ersetzen.
WICHTIGER HINWEIS: Wollen Sie einige Operationen "on the fly" ausführen, beachten Sie, dass der Text auf dem Bildschirm NOCH NICHT der Wert des Quelldatenfeldes oder der Variablen für den zu bearbeitenden Bereich ist. Der eingegebene Wert, sei es der aktuelle Wert des bearbeiteten eingebbaren Bereichs oder ein neu eingetragenes Zeichen, wird dem Quelldatenfeld oder der Variablen erst zugewiesen, wenn die Dateneingabe für den Bereich bestätigt wurde. Das kann ein Tab in einen anderen Bereich, das Anklicken einer Schaltfläche uvm. sein. Sie können zu diesem Zweck die Dateneingabe in einer Variablen spiegeln und mit diesem Wert arbeiten. Diese Vorgehensweise ist erforderlich, wenn Sie zum Ausführen spezifischer Aktionen den aktuellen Textwert wissen müssen.
Sie verwenden die Funktion Keystroke, um:
Zeichen auf eigene Weise zu filtern
Die Dateneingabe zu filtern, die Sie nicht über Dateneingabefilter ausführen können.
Dynamische Nachschlag- oder Fortschreibbereiche (lookup oder type-ahead) zu integrieren
Beispiele:
1. Siehe Beispiele für den Befehl FILTER KEYSTROKE.
2. Beim Durchführen eines Ereignisses On Keystroke arbeiten Sie mit dem aktuellen Textbereich, d.h. wo der Cursor steht und nicht mit "dem zukünftigen Wert" der Datenquelle (Datenfeld oder Variable) für diesen Bereich. Mit der Projektmethode Handle keystroke können Sie jede Eingabe in den Textbereich in eine zweite Variable spiegeln. Damit können Sie dann die Aktionen während der Eingabe von Zeichen in den Bereich ausführen. Sie übergeben als ersten Parameter einen Zeiger auf die Datenquelle für den Bereich und als zweiten Parameter einen Zeiger auf die Spiegelvariable. Die Methode gibt den neuen Wert des Textbereichs in der Spiegelvariablen zurück und meldet True, wenn sich der Wert von dem unterscheidet, was vor dem zuletzt eingegebenen Zeichen eingefügt wurde.
` Verwalte Projektmethode Tastaturanschlag ` Verwalte Tastaturanschlag ( Zeiger ; Zeiger ) -> Boolean ` Verwalte Tastaturanschlag ( -> srcArea ; -> curValue ) -> Ist neuer Wert C_POINTER ($1;$2) C_TEXT ($vtNewValue) ` Hole Textauswahl innerhalb des eingebbaren Bereichs GET HIGHLIGHT ($1->;$vlStart;$vlEnd) ` Beginne mit dem aktuellen Wert zu arbeiten $vtNewValue:=$2-> ` Führe nach gedrückter Taste oder eingegebenem Zeichen, ` die entsprechenden Aktionen aus Case of ` Die Rückschrittaste (Löschen) wurde gedrückt : (Ascii (Keystroke)=Backspace ) ` Lösche die oder das links vom Cursor ausgewählte Zeichen $vtNewValue:=Substring ($vtNewValue;1;$vlStart-1-Num($vlStart=$vlEnd)) +Substring($vtNewValue;$vlEnd) ` Ein zulässiges Zeichen wurde eingegeben. : (Position (Keystroke;"abcdefghjiklmnopqrstuvwxyz -0123456789")>0) If ($vlStart#$vlEnd) ` Ein oder mehrere Zeichen wurden ausgewählt, der Tastaturanschlag wird sie überspringen $vtNewValue:=Substring($vtNewValue;1;$vlStart-1) +Keystroke+Substring($vtNewValue;$vlEnd) Else ` Die Textauswahl ist der Cursor Case of ` Der Cursor ist derzeit am Textbeginn : ($vlStart<=1) ` Füge Zeichen am Textbeginn ein $vtNewValue:=Keystroke+$vtNewValue ` Der Cursor ist derzeit am Textende : ($vlStart>=Length($vtNewValue)) ` Hänge Zeichen an Textende an $vtNewValue:=$vtNewValue+Keystroke Else ` Der Cursor steht mitten im Text, füge hier neues Zeichen ein $vtNewValue:=Substring($vtNewValue;1;$vlStart-1)+Keystroke +Substring($vtNewValue;$vlStart) End case End if ` Eine Pfeiltaste wurde gedrückt ` Tue nichts, nimm jedoch den Tastaturanschlag an : (Ascii(Keystroke)=Left Arrow Key ) : (Ascii(Keystroke)=Right Arrow Key ) : (Ascii(Keystroke)=Up Arrow Key ) : (Ascii(Keystroke)=Down Arrow Key ) ` Else ` Akzeptiere als Zeichen nur Buchstaben, Ziffern, Leerzeichen und Bindestrich FILTER KEYSTROKE ("") End case ` Unterscheidet sich der Wert vom vorigen? $0:=($vtNewValue#$2->) ` Gib den Wert für die Bearbeitung des nächsten Tastaturanschlags zurück $2->:=$vtNewValue
Sie können diese Projektmethode folgendermaßen einsetzen:
` Objektmethode Eingebbarer Bereich MyObject Case of : (Form event=On Load) MyObject:="" MyShadowObject:="" : (Form event=On before Keystroke) If (Handle keystroke (->MyObject;->MyShadowObject)) ` Führe die entsprechenden Aktionen mit dem in MyShadowObject gespeicherten Wert aus End if End case
Wir überprüfen nun folgenden Teil eines Formulars:
Es besteht aus einem eingebbaren Bereich vsLookup, einem nicht eingebbaren Bereich vsMessage und einem rollbaren Bereich asLookup. Beim Eingeben von Zeichen in vsLookup startet die Methode für dieses Objekt eine Suche auf die Tabelle [PLZ]. Der Benutzer muß nur die ersten Buchstaben eintippen, um eine bestimmte Stadt in Deutschland zu finden.
Die Objektmethode vsLookup lautet folgendermaßen:
` Objektmethode Eingebbarer Bereich vsLookup Case of : (Form event=On Load ) vsLookup:="" vsResult:="" vsMessage:="Gib die ersten Buchstaben der gesuchten Stadt ein." CLEAR VARIABLE(asLookup) : (Form event=On before Keystroke ) If (Handle keystroke (->vsLookup;->vsResult)) If (vsResult#"") QUERY([PLZ];[PLZ]Stadt=vsResult+"@") MESSAGES OFF DISTINCT VALUES([PLZ]Stadt;asLookup) MESSAGES ON $vlResult:=Size of array(asLookup) Case of : ($vlResult=0) vsMessage:="Es wurde keine Stadt gefunden." : ($vlResult=1) vsMessage:="Es wurde eine Stadt gefunden." Else vsMessage:=String($vlResult)+" gefundene Städte." End case Else DELETE ELEMENT(asLookup;1;Size of array(asLookup)) vsMessage:="Gib die ersten Buchstaben der gesuchten Stadt ein." End if End if End case
Hier ist das Formular in der Anwendungsumgebung:
Mit den Funktionalitäten der Interprozesskommunikation von 4D können Sie ähnliche Benutzeroberflächen gestalten, die in Palettenfenstern Features zum Nachschlagen anzeigen, mit Prozessen kommunizieren, Datensätze auflisten oder bearbeiten.
Referenz
FILTER KEYSTROKE, Form event, Get edited text.