4D v16.3Form event |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Form event
|
Form event -> Funktionsergebnis | ||||||||
Parameter | Typ | Beschreibung | ||||||
Funktionsergebnis | Lange Ganzzahl |
![]() |
Nummer Formularereignis | |||||
Die Funktion Form event gibt einen numerischen Wert zurück, der die Art des gerade abgelaufenen Formularereignisses kennzeichnet. Sie verwenden Form event normalerweise innerhalb eines Formulars oder einer Objektmethode.
4D bietet unter dem Thema Formularereignisse vordefinierte Konstanten, um die durch die Funktion Form event zurückgegebenen Werte zu vergleichen.
Einige Ereignisse sind generisch, d.h. sie gelten für jede Art von Objekt, andere gelten nur für einen bestimmten Objekttyp.
Konstante | Typ | Wert | Kommentar |
On Load | Lange Ganzzahl | 1 | Das Formular wird gleich angezeigt oder gedruckt. |
On Mouse Up | Lange Ganzzahl | 2 | (nur Bilder) Der Benutzer hat gerade in einem Bildobjekt die linke Maustaste losgelassen |
On Validate | Lange Ganzzahl | 3 | Die Eingabe in den Datensatz wurde bestätigt. |
On Clicked | Lange Ganzzahl | 4 | Das Objekt wurde angeklickt. |
On Header | Lange Ganzzahl | 5 | Der Kopfteil des Formulars wird gleich gedruckt oder angezeigt. |
On Printing Break | Lange Ganzzahl | 6 | Ein Umbruchbereich im Formular wird gleich gedruckt. |
On Printing Footer | Lange Ganzzahl | 7 | Der Fußteil des Formulars wird gleich gedruckt. |
On Display Detail | Lange Ganzzahl | 8 | Ein Datensatz wird gleich in einer Liste bzw. eine Zeile in einer Listbox angezeigt. |
On Outside Call | Lange Ganzzahl | 10 | Das Formular hat einen Aufruf CALL PROCESS erhalten. |
On Activate | Lange Ganzzahl | 11 | Das Formularfenster wird zum vordersten Fenster. |
On Deactivate | Lange Ganzzahl | 12 | Das Formularfenster ist nicht mehr das vorderste Fenster. |
On Double Clicked | Lange Ganzzahl | 13 | Auf ein Objekt wurde ein Doppelklick ausgeführt. |
On Losing Focus | Lange Ganzzahl | 14 | Ein Formularobjekt verliert den Fokus. |
On Getting Focus | Lange Ganzzahl | 15 | Ein Formularobjekt erhält den Fokus. |
On Drop | Lange Ganzzahl | 16 | Daten werden in ein Objekt gezogen. |
On Before Keystroke | Lange Ganzzahl | 17 | Ein Zeichen wird gerade in das Objekt mit Fokus eingegeben. Get edited text gibt den Text im Objekt ohne dieses Zeichen zurück. |
On Menu Selected | Lange Ganzzahl | 18 | Ein Menüeintrag wurde ausgewählt. |
On Plug in Area | Lange Ganzzahl | 19 | Ein externes Objekt hat angefragt, seine Objektmethode auszuführen. |
On Data Change | Lange Ganzzahl | 20 | Daten im Objekt wurden geändert. |
On Drag Over | Lange Ganzzahl | 21 | Daten werden in ein Objekt gezogen. |
On Close Box | Lange Ganzzahl | 22 | Die Schließbox des Fensters wurde angeklickt. |
On Printing Detail | Lange Ganzzahl | 23 | Der Detailbereich des Formulars wird gleich gedruckt. |
On Unload | Lange Ganzzahl | 24 | Das Formular wird gerade verlassen oder erneuert. |
On Open Detail | Lange Ganzzahl | 25 | Ein dem Ausgabeformular oder der Listbox zugeordnetes Eingabeformular wird gerade geöffnet. |
On Close Detail | Lange Ganzzahl | 26 | Sie haben das Eingabeformular verlassen und gehen zurück zum Ausgabeformular. |
On Timer | Lange Ganzzahl | 27 | Die Anzahl der durch SET TIMER definierten Ticks wurde überschritten. |
On After Keystroke | Lange Ganzzahl | 28 | Ein Zeichen wird gerade in das Objekt mit Fokus eingegeben. Get edited text gibt den Text im Objekt inkl. diesem Zeichen zurück |
On Resize | Lange Ganzzahl | 29 | Das Formularfenster wird angepasst. |
On After Sort | Lange Ganzzahl | 30 | (nur Listbox) In einer Spalte der Listbox wurde gerade eine Standard-Sortierung ausgeführt. |
On Selection Change | Lange Ganzzahl | 31 |
|
On Column Moved | Lange Ganzzahl | 32 | (nur Listbox) Der Benutzer hat eine Spalte der Listbox per Drag and Drop bewegt. |
On Column Resize | Lange Ganzzahl | 33 | (nur Listbox) Der Benutzer hat die Breite einer Spalte der Listbox mit der Maus geändert. |
On Row Moved | Lange Ganzzahl | 34 | (nur Listbox) Der Benutzer hat eine Zeile der Listbox per Drag-and-Drop bewegt. |
On Mouse Enter | Lange Ganzzahl | 35 | Der Mauszeiger geht in den grafischen Bereich eines Objekts. |
On Mouse Leave | Lange Ganzzahl | 36 | Der Mauszeiger verlässt den grafischen Bereich eines Objekts. |
On Mouse Move | Lange Ganzzahl | 37 | Der Mauszeiger bewegt sich (mindestens 1 Pixel) ODER eine Modifier-Taste (Shift, Alt, Shift Lock) wurde gedrückt. Wurde das Ereignis nur für ein Objekt markiert, wird es nur generiert, wenn der Cursor im grafischen Bereich eines Objekts liegt. |
On Alternative Click | Lange Ganzzahl | 38 |
|
On Long Click | Lange Ganzzahl | 39 | (nur 3D buttons) Eine 3D Schaltfläche wird angeklickt und die Maustaste bleibt für eine gewisse Zeit gedrückt. |
On Load Record | Lange Ganzzahl | 40 | Bei der Eingabe in die Liste, wird ein Datensatz während der Änderung geladen (Der Benutzer klickt auf eine Zeile im Datensatz und ein Feld wechselt in den Editiermodus). |
On Before Data Entry | Lange Ganzzahl | 41 | (nur Listbox) Eine Zelle der Listbox wechselt gerade in den Editiermodus |
On Header Click | Lange Ganzzahl | 42 | (nur Listbox) Ein Spaltentitel der Listbox wird angeklickt. |
On Expand | Lange Ganzzahl | 43 | (hierarchische Listen und hierarchische Listboxen) Ein Element der hierarchischen Liste bzw. Listbox wurde per Mausklick oder Tastenanschlag aufgeklappt. |
On Collapse | Lange Ganzzahl | 44 | (hierarchische Listen und hierarchische Listboxen) Ein Element der hierarchischen Liste bzw. Listbox wurde über Mausklick oder Tastenanschlag zugeklappt. |
On After Edit | Lange Ganzzahl | 45 | Der Inhalt des eingebbaren Objekts mit Fokus wurde gerade geändert. |
On Begin Drag Over | Lange Ganzzahl | 46 | Ein Objekt wird gerade bewegt (Drag) |
On Begin URL Loading | Lange Ganzzahl | 47 | (nur Web Areas) Eine neue URL wird in den Webbereich geladen. |
On URL Resource Loading | Lange Ganzzahl | 48 | (nur Web Areas) Eine neue Ressource wird in den Web Bereich geladen. |
On End URL Loading | Lange Ganzzahl | 49 | (nur Web Areas) Alle Ressourcen des URL wurden geladen. |
On URL Loading Error | Lange Ganzzahl | 50 | (nur Web Areas) Beim Laden der URL ist ein Fehler aufgetreten. |
On URL Filtering | Lange Ganzzahl | 51 | (nur Web Areas) Der Web Bereich hat eine URL geblockt. |
On Open External Link | Lange Ganzzahl | 52 | (nur Web Areas) Im Browser wurde eine externe URL geöffnet. |
On Window Opening Denied | Lange Ganzzahl | 53 | (nur Web Areas) Ein PopUp-Fenster wurde blockiert. |
On bound variable change | Lange Ganzzahl | 54 | Die dem Unterformular zugewiesene Variable wird geändert. |
_o_On Mac toolbar button | Lange Ganzzahl | 55 | *** Konstante überholt *** |
On Page Change | Lange Ganzzahl | 56 | Aktuelle Seite im Formular wird geändert |
On Footer Click | Lange Ganzzahl | 57 | (nur Listboxen) Der Fußteil einer Listbox oder einer Spalte der Listbox ist angeklickt |
On Delete Action | Lange Ganzzahl | 58 | (nur hierarchische Listen und Listboxen) Ein Benutzer möchte ein Element löschen |
On Scroll | Lange Ganzzahl | 59 | Der Benutzer scrollt den Inhalt eines Feldes vom Typ Bild oder Variable mit der Maus oder Tastatur. |
Hinweis: Ereignisse, die für Ausgabeformulare spezifisch sind, sind für Projektformulare nicht verwendbar. Dazu gehören: On Display Detail, On Open Detail, On Close Detail, On Load Record, On Header, On Printing Detail, On Printing Break, On Printing Footer.
Tritt ein Formularereignis ein, führt 4D folgende Aktionen aus:
Die Objektmethoden, sofern vorhanden, werden nicht in einer bestimmten Reihenfolge aktiviert. Als Faustregel gilt, dass die Objektmethoden immer vor den Formularmethoden aufgerufen werden. Ist das Objekt ein Unterformular, werden auch hier zuerst die Objektmethoden und dann die Formularmethoden des Ausgabeformulars aufgerufen. Die Faustregel gilt also auch für Objekte innerhalb eines Unterformulars.
Wird für ein gegebenes Ereignis kein Formularereignis ausgewählt, können für Objekte mit demselben Ereignis trotzdem Objektmethoden aufgerufen werden. Mit anderen Worten, Aktivieren oder Deaktivieren eines Ereignisses auf Formularebene hat keine Auswirkung auf die Ereignisse für Objekte. Davon ausgenommen sind die Ereignisse On Load und On Unload.
Die Anzahl der Objekte in einem Ereignis ist je nach Ereignis unterschiedlich:
WARNUNG: Während einem Ereignis On Drag over wird - im Gegensatz zu allen anderen Ereignissen - die Objektmethode für ein Objekt im Kontext des Drag-and-Drop Quellobjekts und nicht des Zielobjekts ausgeführt. Weitere Informationen dazu finden Sie im Abschnitt Einführung in Drag and Drop.
Für jedes Objekt im Kopfteil: |
|
Für jeden Datensatz: |
|
|
Folgende Tabelle zeigt, für welche Ereignisse Objekte und Methoden aufgerufen werden:
Objektmethoden | Formularmethoden | Welche Objekte | |
On Load | Ja | Ja | Alle Objekte |
On Unload | Ja | Ja | Alle Objekte |
On Validate | Ja | Ja | Alle Objekte |
On Clicked | Ja (wenn anklickbar oder eingebbar) (*) | Ja | Nur betroffene Objekte |
On Double Clicked | Ja (wenn anklickbar oder eingebbar) (*) | Ja | Nur betroffene Objekte |
On Before Keystroke | Ja (wenn eingebbar) (*) | Ja | Nur betroffene Objekte |
On After Keystroke | Ja (wenn eingebbar) (*) | Ja | Nur betroffene Objekte |
On Getting Focus | Ja (wenn tabfähig) (*) | Ja | Nur betroffene Objekte |
On Losing Focus | Ja (wenn tabfähig) (*) | Ja | Nur betroffene Objekte |
On Activate | Nie | Ja | Keine |
On Deactivate | Nie | Ja | Keine |
On Outside Call | Nie | Ja | Keine |
On Begin Drag Over | Ja (wenn drag-fähig (**) | Ja | Nur betroffene Objekte |
On Drop | Ja (wenn drop-fähig) (**) | Ja | Nur betroffene Objekte |
On Drag Over | Ja (wenn drop-fähig) (**) | Nie | Nur betroffene Objekte |
On Mouse Enter | Ja | Ja | Alle Objekte |
On Mouse Move | Ja | Ja | Alle Objekte |
On Mouse Leave | Ja | Ja | Alle Objekte |
On Mouse Up | Ja | Nie | Nur betroffene Objekte |
On Menu Selected | Nie | Ja | Keine |
On Data Change | Ja (wenn änderbar) (*) | Ja | Nur betroffene Objekte |
On Plug-In Area | Ja | Ja | Nur betroffene Objekte |
On Header | Ja | Ja | Alle Objekte |
On Printing Details | Ja | Ja | Alle Objekte |
On Printing Break | Ja | Ja | Alle Objekte |
On Printing Footer | Ja | Ja | Alle Objekte |
On Close Box | Nie | Ja | Keine |
On Display Detail | Ja | Ja | Alle Objekte |
On Open Detail | Nein, außer für Listboxen | Ja | Keine, außer Listboxen |
On Close Detail | Nie | Ja | Keine |
On Resize | Nein, außer für Listboxen | Ja | Keine, außer Listboxen |
On Selection Change | Ja (***) | Ja | Nur betroffenes Objekt |
On Load Record | Nie | Ja | Keine |
On Timer | Nie | Ja | Keine |
On Scroll | Ja | Ja | Nur betroffenes Objekt |
On Before Data Entry | Ja (Listbox) | Nie | Nur betroffenes Objekts |
On Column Moved | Ja (Listbox) | Nie | Nur betroffenes Objekt |
On Row Moved | Ja (Listbox) | Nie | Nur betroffenes Objekt |
On Column Resize | Ja (Listbox) | Nie | Nur betroffenes Objekt |
On Header Click | Ja (Listbox) | Nie | Nur betroffenes Objekt |
On After Sort | Ja (Listbox) | Nie | Nur betroffenes Objekt |
On Long Click | Ja (3D Schaltfläche) | Ja | Nur betroffenes Objekt |
On Alternative Click | Ja (3D Schaltfläche und Listbox) | Nie | Nur betroffenes Objekt |
On Expand | Ja (hierarch. Liste) | Nie | Nur betroffenes Objekt |
On Collapse | Ja (hierarch. Liste) | Nie | Nur betroffenes Objekt |
On Begin URL Loading | Ja (Web Area) | Nie | Nur betroffenes Objekt |
On URL Resource Loading | Ja (Web Area) | Nie | Nur betroffenes Objekt |
On End URL Loading | Ja (Web Area) | Nie | Nur betroffenes Objekt |
On URL Loading Error | Ja (Web Area) | Nie | Nur betroffenes Objekt |
On URL Filtering | Ja (Web Area) | Nie | Nur betroffenes Objekt |
On Open External Link | Ja (Web Area) | Nie | Nur betroffenes Objekt |
On Window Opening Denied | Ja (Web Area) | Nie | Nur betroffenes Objekt |
(*) Weitere Informationen finden Sie im folgenden Abschnitt Ereignisse, Objekte und Eigenschaften.
(**) Weitere Informationen finden Sie im Kapitel Drag and Drop.
(***) Dieses Ereignis unterstützen nur Objekte vom Typ Listbox, hierarchische Liste und Unterformular
WICHTIG: Beachten Sie, dass die Methode eines Formulars oder Objekts nur dann aufgerufen wird, wenn das entsprechende Ereignis für das Formular bzw. die Objekte ausgewählt wurde. Sie können aber auch in der Designumgebung Ereignisse im Fenster Formular- und Objekteigenschaften deaktivieren. Dadurch können Sie die Anzahl der aufgerufenen Methoden erheblich verringern und so die Ausführungsgeschwindigkeit Ihrer Formulare optimieren.
WARNUNG: Die Ereignisse On Load und On Unload werden für Objekte nur generiert, wenn sowohl die Ereignisse, die zu den Objekten gehören, als auch die Ereignisse, die zu den Formularen gehören, aktiviert sind. Sind nur die Ereignisse für Objekte aktiviert, werden sie nicht ausgeführt; On Load und On Unload müssen sowohl auf Objekt- als auch auf Formularebene aktiviert sein.
Eine Objektmethode wird aufgerufen, wenn das Ereignis für das Objekt eintreten kann. Das ist abhängig vom Typ und den Eigenschaften. Im folgenden werden die Ereignisse beschrieben, die Sie im allgemeinen zum Verwalten der verschiedenen Objekttypen verwenden können.
Beachten Sie, dass die Eigenschaftenliste im Formulareditor nur die Ereignisse anzeigt, die mit dem ausgewählten Objekt oder dem Formular kompatibel sind.
Klickbare Objekte werden mit der Maus verwaltet. Dazu gehören:
Haben Sie für eines dieser Objekte als Eigenschaft On Clicked und On Double Clicked ausgewählt, können Sie mit der Funktion Form event die Klicks innerhalb oder auf das Objekt herausfinden und verwalten. Sie gibt je nach Fall On Clicked oder On Double Clicked zurück. Haben Sie für ein Objekt beide Ereignisse gewählt, wird zuerst On Clicked und dann On Double Clicked erzeugt, wenn der Benutzer auf das Objekt doppelklickt.
Das Ereignis On Clicked tritt für all diese Objekte ein, sobald die Maustaste losgelassen wird. Es gibt jedoch bestimmte Ausnahmen:
Beim Ereignis On Clicked können Sie über den Befehl Clickcount die Anzahl der Klicks eines Benutzers testen.
Hinweis: Einige dieser Objekte können über die Tastatur aktiviert werden. Beispiel: Ein Kontrollkästchen mit Fokus kann mit der Taste Leerschritt eingegeben werden. In diesem Fall wird auch das Ereignis On Clicked generiert.
WARNUNG: Comboboxen gelten nicht als klickbare Objekte, sondern als eingebbarer Textbereich mit zugeordneter Dropdown-Liste, die Standardwerte liefert. Von daher verwalten Sie die Dateneingabe in Comboboxen über die Ereignisse On Before Keystroke, On After Keystroke und On Data Change.
Hinweis: Ab 4D v13 können die Objekte PopUp-Menü/DropDown-Liste und hierarchisches PopUp-Menü das Ereignis On Data Change generieren. Damit können Sie die Aktivierung des Objekts feststellen, wenn ein anderer Wert als der aktuelle ausgewählt wird.
Bei über Tastatur eingebbaren Objekten geben Sie Daten über Tastatur ein. Dafür filtern Sie die Dateneingabe auf der untersten Ebene, nämlich mit den Ereignissen On After Edit, On Before Keystroke, On After Keystroke und On Selection Change. Sie können diese Ereignisse mit der Funktion Get edited text nutzen. Solche Objekte und Datentypen sind:
Hinweis: Ab 4D v14 können eingebbare Felder und Variablen mit Text (vom Typ Text, Datum, Zeit oder Zahl) ebenfalls die Ereignisse On Clicked oder On Double Clicked generieren.
Hinweis: Auch wenn hierarchische Listen “eingebbare” Objekte sind, verwalten sie nicht die Formularereignisse On After Edit, On Before Keystroke und On After Keystroke. Siehe hierzu auch den späteren Absatz “Hierarchische Listen”.
Die Werte in änderbaren Objekten können mit der Maus oder über Tastatur geändert werden; sie sind eigentlich keine echten Steuerelemente der Benutzeroberfläche, die mit dem Ereignis On Clicked verwaltet werden. Solche Objekte sind:
Diese Objekte erhalten On Data Change Ereignisse. Wurde für eines dieser Objekte das Ereignis On Data Change ausgewählt, können Sie mit der Funktion Form event das Ändern des ursprünglichen Werts herausfinden und verwalten. Sie gibt On Data Change zurück. Das Ereignis wird generiert, sobald 4D die dem Objekt zugewiesene Variable intern aktualisiert, z.B. wenn der Eingabebereich eines Objekts den Fokus verliert.
Tabfähige Objekte erhalten Fokus, wenn Sie diese mit der Tabulatortaste aufrufen bzw. anklicken. Das Objekt mit Fokus erhält Zeichen über Tastatur. Es können jedoch keine Abkürzungen (Windows) bzw. Tastaturkürzel (Mac OS) eines Menübefehls oder Objekts wie z.B. eine Schaltfläche sein.
Folgende Objekte sind NICHT tabfähig:
Haben Sie für ein tabfähiges Objekt das Ereignis On Getting Focus bzw. On losing Focus auf Objektebene ausgewählt, können Sie mit der Funktion Form event eine Fokusänderung herausfinden und verwalten. Sie gibt entsprechend On Getting Focus oder On losing Focus zurück.
Mit 3D Schaltflächen können Sie ausgeklügelte grafische Oberflächen einrichten. Weitere Informationen dazu finden Sie im Handbuch 4D Designmodus. Zusätzlich zu den generischen Ereignissen gibt es für 3D Schaltflächen zwei spezifische Formularereignisse:
Für diesen Objekttyp gibt es verschiedene Formularereignisse. Damit lassen sich folgende Situationen verwalten:
Für Listboxen vom Typ Auswahl gibt es zwei generische Ereignisse:
Es gibt vier spezifische Formularereignisse, um Benutzeraktionen in hierarchischen Listen zu verwalten:
- Nach Tastenkürzel (chronologisch):
Ereignis | Kontext |
On data change | Element wurde bearbeitet |
On expand / On collapse | Unterliste über die Pfeile g oder f öffnen/schließen |
On selection change | Neues Element wählen |
On clicked | Liste über Tastatur aktivieren |
- Nach Mausklick (chronologisch):
Ereignis | Kontext |
On data change | Element wurde bearbeitet |
On expand / On collapse | Unterliste über die Icons Auf-/Zuklappen, |
Öffnen/Schließen oder | |
Doppelklick auf nicht-editierbare Unterliste | |
On selection change | Neues Element wählen |
On clicked / On double clicked | Liste über Klick oder Doppelklick aktivieren |
Ein Objekt Unterformular Container (im Elternformular enthaltenes Objekt, das eine Unterformular Instanz enthält) unterstützt folgende Ereignisse:
Hinweise:
Speziell für Web Areas sind sieben Ereignisse verfügbar
Dieses Beispiel setzt das Ereignis On Validate ein, um dem Datenfeld automatisch anzuzeigen, wann der Datensatz geändert wurde:
` Formularmethode
Case of
` ...
:(Form event=On Validate)
[aTable]Last Modified On:=Current date
End case
Dieses Beispiel zeigt die komplette Verwaltung einer Dropdown-Liste (Initialisierung, Benutzerklicks und Objekt loslassen) innerhalb einer Objektmethode:
` Objektmethode asBurgerSize für DropDown Liste
Case of
:(Form event=On Load)
ARRAY TEXT(31;asBurgerSize;3)
asBurgerSize{1}:="Small"
asBurgerSize{1}:="Medium"
asBurgerSize{1}:="Large"
:(Form event=On Clicked)
If(asBurgerSize#0)
ALERT("You chose a "+asBurgerSize{asBurgerSize}+" burger.")
End if
:(Form event=On Unload)
CLEAR VARIABLE(asBurgerSize)
End case
Dieses Beispiel zeigt, wie eine Drag&Drop-Operation für ein Feldobjekt, das nur Bilder zulässt, angenommen und später verwaltet wird.
` Objektmethode für Datenfeld, das nur Bilder zulässt
Case of
:(Form event=On Drag Over)
` Eine Drag&Drop-Operation hat begonnen, die Maus ist gerade im Datenfeld
` Hole Information über das Quellobjekt
DRAG AND DROP PROPERTIES($vpSrcObject;$vlSrcElement;$lSrcProcess)
` Die ID Nummer des Quellprozesses muss hier nicht geprüft werden, da die Objektmethode innerhalb desselben Prozesses ausgeführt wird.
$vlDataType:=Type($vpSrcObject->)
` Ist das Quelldokument ein Bild (Datenfeld, Variable oder Array) ?
If(($vlDataType=Is picture)|($vlDataType=Picture array))
` Wenn ja, akzeptiere das Bewegen (drag).
$0:=0
Else
` Wenn ja, verweigere das Bewegen (Drag)
$0:=-1
End if
:(Form event=On Drop)
` Die Quelldaten wurden bewegt und losgelassen,
` sie müssen also in das Objekt kopiert werden
` Hole Information über das Quellobjekt
DRAG AND DROP PROPERTIES($vpSrcObject;$vlSrcElement;$lSrcProcess)
$vlDataType:=Type($vpSrcObject->)
Case of
` Quellobjekt ist Bilddatenfeld oder Variable
:($vlDataType=Is picture)
` Stammt das Quellobjekt aus demselbem Prozess
` (also aus dem gleichen Fenster und Formular)?
If($lSrcProcess=Current process)
` Wenn ja, kopiere den Quellwert
[aTable]aPicture:=$vpSrcObject->
Else
` Wenn nein, ist das Quellobjekt eine Variable?
If(Is a variable($vpSrcObject))
` Wenn ja, hole Wert aus dem Quellprozess
GET PROCESS VARIABLE($lSrcProcess;$vpSrcObject->;$vgDraggedPict)
[aTable]aPicture:=$vgDraggedPict
Else
` Wenn nein, hole mit CALL PROCESS den Feldwert aus dem Quellprozess
End if
End if
` Quellobjekt ist ein Array vom Typ Bild
:($vlDataType=Picture array)
` Stammt das Quellobjekt aus demselbem Prozess
` (also aus dem gleichen Fenster und Formular)?
If($lSrcProcess=Current process)
` Wenn ja, kopiere den Quellwert
[aTable]aPicture:=$vpSrcObject->{$vlSrcElement}
Else
` Wenn nein, hole Wert aus dem Quellprozess
GET PROCESS VARIABLE($lSrcProcess;$vpSrcObject
->{$vlSrcElement};$vgDraggedPict)
[aTable]aPicture:=$vgDraggedPict
End if
End case
End case
Hinweis: Weitere Beispiele zum Verwalten von Ereignissen On Drag Over und On Drop finden Sie unter dem Befehl DRAG AND DROP PROPERTIES.
Dieses Beispiel ist Vorlage für eine Formularmethode. Es zeigt alle Ereignisse, die während einem Summenbericht eintreten können, der ein Formular als Ausgabeformular verwendet:
` Formularmethode für ein Ausgabeformular für einen Summenbericht
$vpFormTable:=Current form table
Case of
` ...
:(Form event=On Header)
` Ein Kopfteil soll gedruckt werden
Case of
:(Before selection($vpFormTable->))
` Code für den ersten Umbruch im Kopfteil folgt
:(Level=1)
` Code für den Umbruch im Kopfteil Ebene 1 folgt
:(Level=2)
` Code für den Umbruch im Kopfteil Ebene 2 folgt
` ...
End case
:(Form event=On Printing Details)
` Ein Datensatz soll gedruckt werden
` Code für jeden Datensatz folgt
:(Form event=On Printing Break)
` Ein Umbruchbereich soll gedruckt werden
Case of
:(Level=0)
` Code für den Umbruch Ebene 0 folgt
:(Level=1)
` Code für den Umbruch Ebene 1 folgt
` ...
End case
:(Form event=On Printing Footer)
If(End selection($vpFormTable->))
` Code für den letzten Fußteil folgt
Else
` Code für den Fußteil folgt
End if
End case
Dieses Beispiel zeigt die Vorlage zum Verwalten von Ereignissen in einem Formular, das mit den Befehlen DISPLAY SELECTION oder MODIFY SELECTION angezeigt wird. Zur besseren Übersicht wird die Art des Ereignisses in der Titelleiste des Formularfensters angezeigt.
` Eine Formularmethode
Case of
:(Form event=On Load)
$vsTheEvent:="Formular wird angezeigt"
:(Form event=On Unload)
$vsTheEvent:="Ausgabeformular wurde verlassen, es verschwindet
demnächst vom Bildschirm"
:(Form event=On Display Detail)
$vsTheEvent:="Datensatz # anzeigen"+String(Selected record number([TheTable]))
:(Form event=On Menu Selected)
$vsTheEvent:="Ein Menübefehl wurde ausgewählt"
:(Form event=On Header")
$vsTheEvent:="Kopfteil wird eingerichtet"
:(Form event=On Clicked")
$vsTheEvent:="Auf einen Datensatz wurde geklickt"
:(Form event=On Double Clicked")
$vsTheEvent:="Auf einen Datensatz wurde doppelgeklickt"
:(Form event=On Open Detail)
$vsTheEvent:="Datensatz #"+String(Selected record number([TheTable]))+" wurde doppelgeklickt"
:(Form event=On Close Detail)
$vsTheEvent:="Geht zurück in das Ausgabeformular"
:(Form event=On Activate)
$vsTheEvent:="Formularfenster wird zum vordersten Fenster"
:(Form event=On Deactivate)
$vsTheEvent:="Formularfenster ist nicht länger das vorderste Fenster"
:(Form event=On Menu Selected)
$vsTheEvent:="Ein Menübefehl wurde ausgewählt"
:(Form event=On Outside Call)
$vsTheEvent:="Aufruf von anderem Prozess wurde empfangen"
Else
$vsTheEvent:="Was passiert nun? Ereignis #"+String(Form event)
End case
SET WINDOW TITLE($vsTheEvent)
Beispiele zum Verwalten von Ereignissen On Before Keystroke und On After Keystroke finden Sie unter den Befehlen Get edited text, Keystroke und FILTER KEYSTROKE.
Dieses Beispiel zeigt, wie Sie Klicks und Doppelklicks genauso wie rollbare Bereiche verwenden können:
` Objektmethode asChoices für rollbaren Bereich
Case of
:(Form event=On Load)
ARRAY TEXT(...;asChoices;...)
` ...
asChoices:=0
:((Form event=On Clicked)|(Form event=On Double Clicked))
If(asChoices#0)
` Ein Eintrag wurde angeklickt, führe hier etwas aus
` ...
End if
` ...
End case
Dieses Beispiel zeigt, wie Sie Klicks und Doppelklicks unterschiedlich handhaben können. Mit dem Element Null behalten Sie das ausgewählte Element im Auge:
` Objektmethode asChoices für rollbaren Bereich
Case of
:(Form event=On Load)
ARRAY TEXT(...;asChoices;...)
` ...
asChoices:=0
asChoices{0}:="0"
:(Form event=On Clicked)
If(asChoices#0)
If(asChoices#Num(asChoices))
` Ein neuer Eintrag wurde angeklickt, führe hier etwas aus
` ...
` Sichere das neu ausgewählte Element für das nächste Mal
asChoices{0}:=String(asChoices)
End if
Else
asChoices:=Num(asChoices{0})
End if
:(Form event=On Double Clicked)
If(asChoices#0)
` Ein Eintrag wurde doppelgeklickt, führe hier etwas anderes aus
End if
` ...
End case
Dieses Beispiel zeigt, wie Sie den Status eines Textbereichs mit den Ereignissen On Getting Focus und On losing Focus verwalten können:
` [Contacts];Formularmethode "Dateneingabe"
Case of
:(Form event=On Load)
C_TEXT(vtStatusArea)
vtStatusArea:=""
:(Form event=On Getting Focus)
RESOLVE POINTER(Focus object;$vsVarName;$vlTableNum;$vlFieldNum)
If(($vlTableNum#0) & ($vlFieldNum#0))
Case of
:($vlFieldNum=1) ` Datenfeld Nachname
vtStatusArea:="Gib Nachnamen aus [Contacts] ein, er wird automatisch großgeschrieben"
` ...
:($vlFieldNum=10) ` Datenfeld Postleitzahl
vtStatusArea:="Gib fünfstellige Postleitzahl ein, sie wird automatisch geprüft und bestätigt"
` ...
End case
End if
:(Form event=On Losing Focus)
vtStatusArea:=""
` ...
End case
Dieses Beispiel zeigt, wie Sie die Dateneingabe mit dem Ereignis On Close Box steuern können:
` Methode für Eingabeformular
$vpFormTable:=Current form table
Case of
` ...
:(Form event=On Close Box)
If(Modified record($vpFormTable->))
CONFIRM("Dieser Datensatz wurde geändert. Änderungen sichern?")
If(OK=1)
ACCEPT
Else
CANCEL
End if
Else
CANCEL
End if
` ...
End case
Dieses Beispiel zeigt, wie Sie ein Datenfeld vom Typ Text oder alphanumerisch bei Änderung der Datenquelle in Großbuchstaben setzen:
` Objektmethode [Contacts]First Name
Case of
` ...
:(Form event=On Data Change)
[Contacts]First Name:=Uppercase(Substring([Contacts]First Name;1;1))]+Lowercase(Substring([Contacts]First Name;2))
` ...
End case
Dieses Beispiel zeigt, wie Sie ein Datenfeld vom Typ Text oder alphanumerisch bei Änderung der Datenquelle in Großbuchstaben setzen:
` Objektmethode [Contacts]First Name
Case of
` ...
:(Form event=On Data Change)
[Contacts]First Name:=Uppercase(Substring([Contacts]First Name;1;1))]+Lowercase(Substring([Contacts]First Name;2))
` ...
End case
Beispiel zum Verwalten eines Löschvorgangs in einer hierarchischen Liste:
... //Methode der hierarchischen Liste
:($Event=On Delete Action)
ARRAY LONGINT($itemsArray;0)
$Ref:=Selected list items(<>HL;$itemsArray;*)
$n:=Size of array($itemsArray)
Case of
:($n=0)
ALERT("Kein Eintrag ausgewählt")
OK:=0
:($n=1)
CONFIRM("Wollen Sie diesen Eintrag löschen?")
:($n>1)
CONFIRM("Wollen Sie diese Einträge löschen?")
End case
If(OK=1)
For($i;1;$n)
DELETE FROM LIST(<>HL;$itemsArray{$i};*)
End for
End if
In diesem Beispiel synchronisert das Formularereignis On Scroll die Anzeige von zwei Bildern in einem Formular. Die Formularmethode enthält folgenden Code:
Case of
:(Form event=On Scroll)
//die Position des linken Bildes nehmen
OBJECT GET SCROLL POSITION(*;"satellite";vPos;hPos)
// und auf das rechte Bild anwenden
OBJECT SET SCROLL POSITION(*;"plan";vPos;hPos;*)
End case
Ergebnis:
Die ausgewählte Zelle einer Listbox rot umrahmen und den Rahmen mitbewegen, wenn der Benutzer in der Listbox in vertikaler Richtung scrollt. In der Objektmethode zur Listbox schreiben Sie folgenden Code:
Case of
:(Form event=On Clicked)
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT SET VISIBLE(*;"RedRect";True) //rotes Rechteck initialisieren
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
:(Form event=On Scroll)
LISTBOX GET CELL POSITION(*;"LB1";$col;$raw)
LISTBOX GET CELL COORDINATES(*;"LB1";$col;$raw;$x1;$y1;$x2;$y2)
OBJECT GET COORDINATES(*;"LB1";$xlb1;$ylb1;$xlb2;$ylb2)
$toAdd:=LISTBOX Get headers height(*;"LB1") //Höhe des Kopfteils, damit es nicht überlappt
If($ylb1+$toAdd<$y1) & ($ylb2>$y2) //sind wir innerhalb der Listbox,
//verwalten wir der Einfachheit halber nur Kopfteile
//wir sollten auch horizontales Scrollen
//sowie Rollbalken verwalten
OBJECT SET VISIBLE(*;"RedRect";True)
OBJECT SET COORDINATES(*;"RedRect";$x1;$y1;$x2;$y2)
Else
OBJECT SET VISIBLE(*;"RedRect";False)
End if
End case
Als Ergebnis folgt das rote Rechteck dem Scrollen der Listbox:
CALL PROCESS
CALL SUBFORM CONTAINER
Current form table
DRAG AND DROP PROPERTIES
FILTER KEYSTROKE
Get edited text
Keystroke
SET TIMER
Produkt: 4D
Thema: Formularereignisse
Nummer:
388
Geändert: 4D v11 SQL Release 2
Geändert: 4D v12
Geändert: 4D v13
Geändert: 4D v13.2
Geändert: 4D v14
Geändert: 4D v15
Geändert: 4D v16
4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)