Keystroke

4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 6.0 (Geändert)


Keystroke String

ParameterTypBeschreibung
Dieser Befehl benötigt keine Parameter
FunktionsergebnisStringVom 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
      : (Character Code (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
      : (Character Code(Keystroke)=Left Arrow Key )
      : (Character Code(Keystroke)=Right Arrow Key )
      : (Character Code(Keystroke)=Up Arrow Key )
      : (Character Code(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 FROM ARRAY(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.

Anwendung des Befehls

Filter Keystroke


4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next