Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
Form event code
|
Form event code -> Funktionsergebnis | ||||||||
Parameter | Typ | Beschreibung | ||||||
Funktionsergebnis | Lange Ganzzahl |
![]() |
Nummer Formularereignis | |||||
Form event code hieß in früheren 4D Versionen Form event. Die Funktion wurde umbenannt, um sie vom neu hinzugefügten Befehl FORM Event, der ein Objekt zurückgibt, zu unterscheiden.
Die Funktion Form event code gibt einen numerischen Wert zurück, der die Art des gerade abgelaufenen Formularereignisses kennzeichnet. Sie verwenden Form event code normalerweise innerhalb eines Formulars oder einer Objektmethode.
4D bietet unter dem Thema Formularereignisse vordefinierte Konstanten, um die durch die Funktion Form event code 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 VP Ready | Lange Ganzzahl | 9 | (nur 4D View Pro Areas) Laden des 4D View Pro Bereichs ist komplett |
On Outside Call | Lange Ganzzahl | 10 | Das Formular hat einen Aufruf POST OUTSIDE CALL 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. |
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. |
On Row Resize | Lange Ganzzahl | 60 | (nur 4D View Pro) Der Benutzer hat die Höhe einer Zeile mit der Maus geändert |
On VP Range Changed | Lange Ganzzahl | 61 |
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: |
|
Folgende Tabelle zeigt, für welche Ereignisse Objekt- bzw. Formularmethoden aufgerufen werden:
Ereignis | 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 |
On VP Ready | Ja (4D View Pro Area) | Ja | Nur betroffenes Objekt |
On Row Resize | Ja (4D View Pro 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 code 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 code 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 code 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:
Hinweis: Sie können einen beliebigen eigenen Ereignistyp spezifizieren, der sich über den Befehl CALL SUBFORM CONTAINER im Unterformular generieren lässt. Dieser Befehl ermöglicht, die Objektmethode des Containers aufzurufen und ihr einen Ereigniscode zu übergeben.
Folgende Ereignisse werden auch in den Formularmethoden des Unterformulars empfangen:
Speziell für Web Areas sind folgende Ereignisse verfügbar
Für 4D View Pro Bereiche sind folgende Ereignisse verfügbar:
Weitere Informationen dazu finden Sie im Abschnitt Formularereignis On VP Ready.
Dieses Beispiel setzt das Ereignis On Validate ein, um dem Datenfeld automatisch anzuzeigen, wann der Datensatz geändert wurde:
//Formularmethode
Case of
// ...
:(Form event code=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 code=On Load)
ARRAY TEXT(asBurgerSize;3)
asBurgerSize{1}:="Small"
asBurgerSize{1}:="Medium"
asBurgerSize{1}:="Large"
:(Form event code=On Clicked)
If(asBurgerSize#0)
ALERT("You chose a "+asBurgerSize{asBurgerSize}+" burger.")
End if
:(Form event code=On Unload)
CLEAR VARIABLE(asBurgerSize)
End case
Dieses Beispiel zeigt, wie in einer Objektmethode eine Drag-and-Drop-Operation für ein Feldobjekt, das nur Bilder zulässt, angenommen und später verwaltet wird.
//Objektmethode [aTable]a Picture für Datenfeld, das nur Bilder zulässt
Case of
:(Form event code=On Drag Over) //Eine Drag-and-Drop Operation hat begonnen und 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 im selben Prozess ausgeführt wird
$vlDataType:=Type($vpSrcObject->)
//Ist das Quellobjekt ein Bild (Feld, Variable oder Array)?
If(($vlDataType=Is picture)|($vlDataType=Picture array))
//Wenn ja, akzeptiere das Ziehen (Drag).
$0:=0
Else
//Wenn nein, verweigere das Ziehen (drag)
$0:=-1
End if
:(Form event code=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 demselben 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 den 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
//Das Quellobject 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 den 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 _o_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:
//Methode für Ausgabeformular für einen Summenbericht
$vpFormTable:=Current form table
Case of
//...
:(Form event code=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 Umbruch im Kopfteil Ebene 1 folgt hier
:(Level=2)
//Code für Umbruch im Kopfteil Ebene 2 folgt hier
//...
End case
:(Form event code=On Printing Detail)
//Ein Datensatz soll gedruckt werden
//Code für jeden Datensatz folgt
:(Form event code=On Printing Break)
//Ein Umbruchbereich soll gedruckt werden
Case of
:(Level=0)
//Code für Umbruch Ebene 0 folgt
:(Level=1)
//Code für Umbruch Ebene 1 folgt
//...
End case
:(Form event code=On Printing Footer)
If(End selection($vpFormTable->))
//Code für den letzten Fußteil folgt
Else
//Code für ein 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 code=On Load)
$vsTheEvent:="Formular wird angezeigt"
:(Form event code=On Unload)
$vsTheEvent:="Das Ausgabeformular wurde verlassen, es verschwindet demnächst vom Bildschirm"
:(Form event code=On Display Detail)
$vsTheEvent:="Datensatz # anzeigen"+String(Selected record number([TheTable]))
:(Form event code=On Menu Selected)
$vsTheEvent:="Ein Menübefehl wurde ausgewählt"
:(Form event code=On Header")
$vsTheEvent:="Kopfteil wird eingerichtet"
:(Form event code=On Clicked")
$vsTheEvent:="Auf einen Datensatz wurde geklickt"
:(Form event code=On Double Clicked")
$vsTheEvent:="Auf einen Datensatz wurde doppelgeklickt"
:(Form event code=On Open Detail)
$vsTheEvent:="Datensatz #"+String(Selected record number([TheTable]))+" wurde doppeltgeklickt"
:(Form event code=On Close Detail)
$vsTheEvent:="Geht zurück in das Ausgabeformular"
:(Form event code=On Activate)
$vsTheEvent:="Formularfenster wird zum vordersten Fenster"
:(Form event code=On Deactivate)
$vsTheEvent:="Formularfenster ist nicht länger das vorderste Fenster"
:(Form event code=On Menu Selected)
$vsTheEvent:="Ein Menübefehl wurde gewählt"
:(Form event code=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 code=On Load)
ARRAY TEXT(asChoices;...)
//...
asChoices:=0
:((Form event code=On Clicked)|(Form event code=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 code=On Load)
ARRAY TEXT(asChoices;...)
// ...
asChoices:=0
asChoices{0}:="0"
:(Form event code=On Clicked)
If(asChoices#0)
If(asChoices#Num(asChoices))
//Ein neuer Eintrag wurde angeklickt, führe hier etwas aus
//...
//Sichere das neu gewählte Element für das nächste Mal
asChoices{0}:=String(asChoices)
End if
Else
asChoices:=Num(asChoices{0})
End if
:(Form event code=On Double Clicked)
If(asChoices#0)
//Auf einen 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 code=On Load)
C_TEXT(vtStatusArea)
vtStatusArea:=""
:(Form event code=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 [Contacs] ein; er wird automatisch großgeschrieben"
//...
:($vlFieldNum=10) //Datenfeld Postleitzahl
vtStatusArea:="Gib 5-stellige Postleitzahl ein; sie wird automatisch geprüft und bestätigt"
//...
End case
End if
:(Form event code=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 code=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 code=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 code=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
:(Form event code=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 Objektmethode "satellite" für Bilddatenfeld oder Variable 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 code=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 code=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:
_o_DRAG AND DROP PROPERTIES
CALL SUBFORM CONTAINER
Current form table
FILTER KEYSTROKE
FORM Event
Get edited text
Keystroke
POST OUTSIDE CALL
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
Geändert: 4D v16 R4
Umbenannt: 4D v18 (Form event)
4D Programmiersprache ( 4D v20 R7)