Version 11.2 (Geändert)
Form event
Parameter | Typ | Beschreibung | ||||
Dieser Befehl benötigt keine Parameter | ||||||
Funktionsergebnis | 1 | Nummer Formularereignis |
Beschreibung
Die Funktion Form event gibt eine Zahl zurück, die 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.
Allgemeine Ereignisse
Nachfolgende Ereignisse werden für jedes beliebige Formular bzw. Objekt generiert:
Konstante | Wert | Beschreibung |
On Load | 1 | Das Formular wird zur Anzeige bzw. zum Druck |
geladen | ||
On Unload | 24 | Das Formular wird verlassen und freigegeben |
On Validate | 3 | Die Eingabe in den Datensatz wurde bestätigt |
On Clicked | 4 | Es wurde auf ein Objekt geklickt |
On Double Clicked | 13 | Es wurde auf ein Objekt doppelgeklickt |
On Before Keystroke | 17 | Ein Zeichen wird gleich in das Objekt mit Fokus |
eingegeben. Get edited text gibt den Text des Objekts | ||
ohne dieses Zeichen zurück | ||
On After Keystroke | 28 | Ein Zeichen wird gleich in das Objekt mit Fokus |
eingegeben. Get edited text gibt den Text des Objekts | ||
mit diesem Zeichen zurück | ||
On After Edit | 45 | Dieses Ereignis wird nach jeder Änderung am Inhalt eines |
Eingabebereichs (Feld oder Variable) generiert. | ||
On Getting Focus | 15 | Ein Formularobjekt wird mit Fokus versehen |
On Losing Focus | 14 | Ein Formularobjekt verliert den Fokus |
On Activate | 11 | Das Fenster des Formulars kommt an vorderste Stelle |
On Deactivate | 12 | Das Fenster des Formulars ist nicht mehr an |
vorderster Stelle | ||
On Outside Call | 10 | Das Formular hat einen Aufruf CALL PROCESS erhalten |
On Drop | 16 | Daten wurden in ein Objekt bewegt und losgelassen |
On Drag Over | 21 | Daten wurden in ein Objekt bewegt, noch nicht |
losgelassen | ||
On Mouse Enter | 35 | Der Mauszeiger geht in den grafischen Bereich eines |
Objekts | ||
On Mouse Move | 37 | Der Mauszeiger bewegt sich im grafischen Bereich eines |
Objekts (mindestens 1 Pixel) | ||
On Mouse Leave | 36 | Der Mauszeiger verlässt den grafischen Bereich eines |
Objekts | ||
On Menu Selected | 18 | Ein Menüpunkt wurde ausgewählt |
On Data Change | 20 | Daten des Objekts wurden geändert |
On Plug-In Area | 19 | Ein Externes Objekt verlangt die Ausführung seiner |
Objektmethode | ||
On Header | 5 | Der Kopfteil des Formulars wird angezeigt oder |
gedruckt | ||
On Printing Details | 23 | Der Datenteil des Formulars wird gedruckt |
On Printing Break | 6 | Ein Umbruchteil des Formulars wird gedruckt |
On Printing Footer | 7 | Der Fußteil des Formulars wird gedruckt |
On Close Box | 22 | Es wurde in die Schließbox des Fensters geklickt |
On Display Detail | 8 | Ein Datensatz wird in einer Liste angezeigt |
On Open Detail | 25 | Es wurde auf einen Datensatz doppelgeklickt und das |
Eingabeformular geöffnet | ||
On Close Detail | 26 | Sie verlassen das Eingabeformular und kehren zum |
Ausgabeformular zurück | ||
On Selection Change | 31 | Listbox: Aktuelle Auswahl der Zeilen/Spalten wurde |
geändert | ||
Datensätze in Liste: Aktueller Datensatz/aktuelle Auswahl | ||
der Zeilen in Listen- oder Unterformular wurde geändert | ||
HierarchischeListen: Auswahl in der Liste wurde geändert | ||
nach Mausklick oder Tastenkürzel | ||
On Load Record | 40 | Während Eingabe in Liste wird ein Datensatz während der |
Änderung geladen (der Benutzer klickt auf eine Zeile und | ||
das Feld wechselt in den Bearbeitungsmodus). | ||
On Timer | 27 | Die vom Befehl SET TIMER festgelegte Anzahl Ticks ist |
erreicht | ||
On Resize | 29 | Formularfenster wird in der Größe angepasst |
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.
Listbox
Folgende Ereignisse werden nur für Listboxen generiert:
Konstante | Wert | Beschreibung |
On Before Data Entry | 41 | Eine Zelle in Listbox wechselt gleich in den |
Bearbeitungsmodus | ||
On Column Moved | 32 | Eine Spalte in Listbox wird vom Benutzer per Drag&Drop |
bewegt | ||
On Row Moved | 34 | Eine Zeile in Listbox wird vom Benutzer per Drag&Drop |
bewegt | ||
On Column Resize | 33 | Eine Spaltenbreite in Listbox wird geändert |
On Header Click | 42 | Im Spaltentitel der Listbox tritt ein Mausklick auf |
On After Sort | 30 | In einer Spalte in Listbox wurde gerade eine |
Standardsortierung ausgeführt |
3D Schaltflächen
Folgende Ereignisse werden nur für 3D Schaltflächen generiert:
Konstante | Wert | Beschreibung |
On Long Click | 39 | Eine 3D Schaltfläche wurde angeklickt und die Maustaste |
bleibt eine gewisse Zeit gedrückt | ||
On Arrow Click | 38 | Der PopUp-Bereich (mit Pfeil) einer 3D Schaltfläche |
wurde angeklickt |
Hierarchische Listen
Folgende Ereignisse werden nur für hierarchische Listen generiert:
Konstante | Wert | Beschreibung |
On Expand | 43 | Ein Element der hierarchischen Liste wurde über Mausklick |
oder Tastenkürzel aufgeklappt | ||
On Collapse | 44 | Ein Element der hierarchischen Liste wurde über Mausklick |
oder Tastenkürzel zugeklappt |
Web Areas
Folgende Ereignisse werden nur für Web Areas generiert:
Konstante | Wert | Beschreibung |
On Begin URL Loading | 47 | Eine neue URL wird in den Web Bereich geladen |
On URL Resource Loading | 48 | Eine neue Ressource wird in den Web Bereich geladen |
On End URL Loading | 49 | Alle Ressourcen der URL wurden geladen |
On URL Loading Error | 50 | Beim Laden der URL ist ein Fehler aufgetreten |
On URL Filtering | 51 | Eine URL wurde vom Web Bereich blockiert |
On Open External Link | 52 | Eine externe URL wurde im Browser geöffnet |
On Window Opening Denied | 53 | Ein PopUp-Fenster wurde blockiert |
Ereignisse und Methoden
Tritt ein Formularereignis ein, führt 4D folgende Aktionen aus:
Zuerst werden die Objekte des Formulars durchlaufen und die zum Ereignis gehörenden Objektmethoden aufgerufen.
Wurde das entsprechende Formularereignis ausgewählt, wird die Formularmethode aufgerufen.
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:
On Load - Alle Objekte des Formulars (von jeder Seite), für die Ereignisse On Load für Objekte ausgewählt wurden, sind mit den entsprechenden Objektmethoden beteiligt. Bei Auswahl von Ereignissen On Load für Formulare werden die entsprechenden Formularmethoden angerufen.
On Activate oder On Resize - Es wird keine Objektmethode aufgerufen, da dieses Ereignis für das gesamte Formular gilt und nicht für ein spezifisches Objekt. Folglich werden bei Auswahl von Ereignissen On Activate für Formulare im Formular nur die Formularmethoden aufgerufen.
On Drag Over - Bei Auswahl des Ereignisses On Drag Over für Objekte wird nur die Objektmethode für das drop-fähige Objekt innerhalb des Ereignisses aufgerufen. Die Formularmethode wird nicht aufgerufen.
On Timer - Dieses Ereignis wird nur erzeugt, wenn in der Formularmethode zuvor der Befehl SET TIMER aufgerufen wurde. Ist die Eigenschaft Formularereignis On Timer ausgewählt, erhält nur die Formularmethode das Ereignis. Es wird keine Objektmethode ausgelöst.
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&Drop Quellobjekts und nicht des Zielobjekts ausgeführt. Weitere Informationen dazu finden Sie unter den Befehlen DRAG AND DROP PROPERTIES und Drag and drop position.
Wurden die Ereignisse On Mouse Enter, On Mouse Move und On Mouse Leave für das Formular markiert, werden sie für jedes Formularobjekt erzeugt. Sind sie für ein einzelnes Objekt markiert, werden sie nur für dieses Objekt generiert. Bei übereinander liegenden Objekten wird das Ereignis vom ersten Objekt erzeugt, das dieses verwalten kann, ausgehend von oben nach unten. Objekte, die über den Befehl SET VISIBLE ausgeblendet sind, erzeugen diese Ereignisse nicht. Wird ein Objekt eingegeben, können je nach Position der Maus andere Objekte diese Art Ereignisse empfangen.
Datensätze in Liste: Die Abfolge der Aufrufe von Methoden und Formularereignissen in Listenformularen, die über die Befehle MODIFY SELECTION und DISPLAY SELECTION und Unterformulare angezeigt werden ist folgendermaßen:
Für jedes Objekt im Kopfteil: Objektmetode mit Ereignis On Header Formularmethode mit Ereignis On Header Für jeden Datensatz: Für jedes Objekt im Detail-Bereich: Objektmethode mit Ereignis On Display Detail Formularmethode mit Ereignis On Display Detail
Es ist nicht erlaubt, eine 4D Routine aufzurufen, die ein Dialogfenster über die Ereignisse On Display Detail und On Header anzeigt. Das erzeugt einen Syntaxfehler.
Das gilt insbesondere für die Routinen ALERT, DIALOG, CONFIRM, Request, ADD RECORD, MODIFY RECORD, DISPLAY SELECTION und MODIFY SELECTION.
Folgende Tabelle zeigt, für welche Ereignisse Objekte und Methoden aufgerufen werden:
Ereignis | Objektmethoden | Formular- | Welche Objekte |
methoden | |||
On Load | Ja | Ja | Alle Objekte |
On Unload | Ja | Ja | Alle Objekte |
On Validate | Ja | Ja | Alle Objekte |
On Clicked | Ja (wenn anklickbar) (*) | Ja | Nur betroffene Objekte |
On Double Clicked | Ja (wenn anklickbar) (*) | Ja | Nur betroffene Objekte |
On Keystroke | Ja (wenn über | ||
Tastatur 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 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 Details | Ja | Ja | Alle Objekte |
On Open Details | Nie | Ja | Keine |
On Close Details | Nie | Ja | Keine |
On Resize | Nie | Ja | Keine |
On Selection Change | Ja (***) | Ja | Nur betroffene Objekte |
On Load Record | Nie | Ja | Keine |
On Timer | Nie | Ja | Keine |
On Before Data Entry | Ja (Listbox) | Nie | Nur betroffene Objekte |
On Column Moved | Ja (Listbox) | Nie | Nur betroffene Objekte |
On Row Moved | Ja (Listbox) | Nie | Nur betroffene Objekte |
On Column Resize | Ja (Listbox) | Nie | Nur betroffene Objekte |
On Header Click | Ja (Listbox) | Nie | Nur betroffene Objekte |
On After Sort | Ja (Listbox) | Nie | Nur betroffene Objekte |
On Long Click | Ja (3D Schaltfläche) | Ja | Nur betroffene Objekte |
On Arrow Click | Ja (3D Schaltfläche) | Ja | Nur betroffene Objekte |
On Expand | Ja (hierarch. Liste) | Nie | Nur betroffene Objekte |
On Collapse | Ja (hierarch. Liste) | Nie | Nur betroffene Objekte |
On Begin URL Loading | Ja (Web Area) | Nie | Nur betroffene Objekte |
On URL Resource Loading | Ja (Web Area) | Nie | Nur betroffene Objekte |
On End URL Loading | Ja (Web Area) | Nie | Nur betroffene Objekte |
On URL Loading Error | Ja (Web Area) | Nie | Nur betroffene Objekte |
On URL Filtering | Ja (Web Area) | Nie | Nur betroffene Objekte |
On Open External Link | Ja (Web Area) | Nie | Nur betroffene Objekte |
On Window Opening Denied | Ja (Web Area) | Nie | Nur betroffene Objekte |
(*) Weitere Informationen finden Sie im folgenden Abschnitt Ereignisse, Objekte und Eigenschaften.
(**) Weitere Informationen finden Sie im Abschnitt Drag and Drop.
(***) Dieses Ereignis unterstützen nur Objekte vom Typ Listboxen, hierarchische Listen und Unterformulare
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.
Ereignisse, Objekte und Eigenschaften
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
Klickbare Objekte werden mit der Maus verwaltet. Dazu gehören:
Eingebbare Datenfelder oder Variablen vom Typ Boolean
Schaltflächen, Standardschaltflächen, Optionsfelder, Kontrollkästchen, Schaltflächengitter
3D Schaltflächen, 3D Optionsfelder, 3D Kontrollkästchen
PopUp-Menüs, hierarchische PopUp-Menüs, Bildmenüs
Dropdown-Listen, Menüs/Dropdown-Listen
Rollbare Bereiche, hierarchische Listen, Listboxen
Unsichtbare Schaltflächen, hervorgehobene Schaltflächen, Optionsbilder
Thermometer, Lineale, Halbkreisskalen (Objekte mit Regler)
Registerkarten
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:
Unsichtbare Schaltflächen - Das Ereignis On Clicked tritt bereits beim Klick ein, und nicht erst, wenn die Maustaste losgelassen wird.
Objekte mit Schieberegler (Thermometer, Lineale und Halbkreisskalen) - Gibt das Anzeigeformat an, dass die Objektmethode aufgerufen werden muss, während der Regler verschoben wird, tritt das Ereignis On Clicked bereits beim Klicken ein.
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 Keystroke und On Data Change.
Über Tastatur eingebbare Objekte
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 and On After Keystroke. Sie können diese Ereignisse mit der Funktion Get edited text nutzen. Solche Objekte und Datentypen sind:
Alle eingebbaren Datenfeldobjekte vom Typ Alpha, Text, Datum, Zeit, Zahl oder Bild (On After Edit)
Alle eingebbaren Variablen vom Typ Alpha, Text, Datum, Zeit, Zahl oder Bild (On After Edit)
Comboboxen
Listboxen
Hinweise:
Auch wenn hierarchischen 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".
Ab 4th Dimension Version 2004.2 kann das Ereignis On After Keystroke generell durch das Ereignis On After Edit ersetzt werden (siehe unten).
Haben Sie für ein Objekt die Ereignisse On Before Keystroke und On After Keystroke ausgewählt, können Sie die Tastaturanschläge im Objekt mit der Funktion Form event herausfinden und verwalten. Sie gibt On Before Keystroke und dann On After Keystroke zurück. Weitere Informationen dazu finden Sie in der Beschreibung zur Funktion Get edited text. Diese Ereignisse werden auch über Befehle aktiviert, die eine Benutzeraktion simulieren, z.B. POST KEY.
Beachten Sie, dass Benutzeraktionen, die nicht über Tastatur ausgeführt werden, z.B. Kopieren, Drag & Drop, nicht berücksichtigt werden. Diese Ereignisse verwalten Sie mit On After Edit.
Hinweis: Die Ereignisse On Before Keystroke undOn After Keystroke werden beim Verwenden einer Eingabemethode nicht erzeugt. Eine Eingabemethode (oder IME, Eingabemethodeneditor) ist ein Programmoder eine Systemkomponente, um komplexe Zeichen oder Symbole mit einer Standardtastatur einzugeben, z.B. Japanisch oder Chinesisch.
On After Edit
Dieses Ereignis wird nach jeder Änderung am Inhalt eines Eingabebereichs (Feld oder Variable) generiert, unabhängig von der Aktion, welche die Änderung verursacht hat.
Aktionen, welche dieses Ereignis auslösen, sind:
- Standardaktionen für Bearbeiten, welche den Inhalt verändern, wie Einsetzen, Ausschneiden, Löschen oder Abbrechen;
- Wert ziehen (Drop-Aktion ähnlich wie Einsetzen);
- Jede vom Benutzer gemachte Eingabe per Tastatur; in diesem Fall wird das Ereignis On After Edit nach den Ereignissen On Before Keystroke und On After Keystroke erzeugt, sofern sie verwendet werden.
- Jede Änderung, die über einen Befehl der Programmiersprache ausgeführt wird, der eine Benutzeraktion simuliert, z.B. POST KEY oder POST EVENT.
Achten Sie darauf, dass folgende Aktionen NICHT dieses Ereignis auslösen:
- Aktionen für Bearbeiten, welche den Inhalt des Bereichs nicht verändern, wie Kopieren oder Alle auswählen;
- Wert markieren (Drag-Aktion ähnlich wie Kopieren);
- Jede Änderung am Inhalt, die per Programmierung ausgeführt wird, mit Ausnahme der Befehle, die eine Benutzeraktion simulieren.
Über dieses Ereignis können Sie Benutzeraktionen steuern, z.B. um zu verhindern, dass ein zu langer Text eingesetzt, ein Feld mit Kennwort abgeschnitten wird oder um bestimmte Zeichen zu blockieren.
Änderbare Objekte
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:
Alle eingebbaren Datenfeldobjekte (mit Ausnahme Untertabelle und BLOB)
Alle eingebbaren Variablen (mit Ausnahme von BLOB, Zeiger und Array)
Comboboxen
Externe Objekte (für die die komplette Dateneingabe über das 4D Plug-In bestätigt wird)
Hierarchische Listen
Listboxen
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
Tabfähige Objekte erhalten Focus, 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 (MacOS) eines Menübefehls oder Objekts wie z.B. eine Schaltfläche sein.
Folgende Objekte sind NICHT tabfähig:
Nicht eingebbare Datenfelder oder Variablen
Schaltflächengitter
3D Schaltflächen, 3D Optionsfelder, 3D Kontrollkästchen
PopUp-Menüs, hierarchische PopUp-Menüs
Menüs/Dropdown-Listen
Bildmenüs
Rollbare Bereiche
Unsichtbare Schaltflächen, hervorgehobene Schaltflächen, Optionsbilder
Diagramme
Externe Objekte (für die das 4D Plug-In keine komplette Dateneingabe zuläßt)
Registerkarten
Splitter
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.
3D Schaltflächen
Mit 3D Schaltflächen können Sie ausgeklügelte grafische Oberflächen einrichten. Weitere Informationen dazu finden Sie im Handbuch 4th Dimension Designmodus. Zur Verwaltung dieser Objekte gibt es zwei spezifische Formularereignisse:
On Long Click: Dieses Ereignis tritt ein, wenn auf eine 3D Schaltfläche geklickt wird und die Maustaste eine gewisse Zeit gedrückt bleibt. In der Theorie entspricht die Zeitspanne, für die das Ereignis generiert wird, der max. Zeit, die zwischen einem Doppelklick liegt, so wie in den Systemeinstellungen definiert.
Dieses Ereignis lässt sich für jede Art von 4D Schaltfläche, 3D Optionsfeldern und 3D Kontrollkästchen generieren. Davon ausgenommen sind die "vorherige Generation" der 3D Schaltflächen (z.B. Background offset) und die Pfeilbereiche von 3D Schaltflächen mit PopUp-Menü.
Dieses Ereignis dient in der Regel zum Anzeigen von PopUp-Menüs bei langen Klicks auf die Schaltfläche. Das Ereignis On Clicked wird erzeugt sofern aktiviert, wenn der Benutzer die Maustaste loslässt, bevor die Zeit für den langen Klick abgelaufen ist.
On Arrow Click: Einige 3D Schaltflächentypen können mit einem PopUp-Menü verknüpft sein und einen Pfeil anzeigen. Klicken Sie darauf, erscheint ein PopUp-Menü zum Auswählen zusätzlicher Aktionen.
Diese Art Schaltfläche können Sie mit dem neuen Formularereignis On Arrow Click verwalten. Es wird erzeugt, wenn der Benutzer auf den Pfeil klickt und die Maustaste gedrückt hält.
Ist das PopUp-Menü "getrennt", wird das Ereignis nur ausgelöst bei Anklicken des Bereichs mit dem Pfeil.
Ist das PopUp-Menü "verbunden", wird das Ereignis ausgelöst bei Anklicken eines beliebigen Teils der Schaltfläche. Beachten Sie, dass das Ereignis On Long Click nicht über diesen Schaltflächentyp erzeugt werden kann.
Folgende 3D Schaltflächen, 3D Optionsfelder und 3D Kontrollkästchen akzeptieren die Eigenschaft "Mit PopUp-Menü": Keine, Toolbar Schaltfäche, Bevel, Bevel (abgerundet) und Office XP.
Listboxen
Für diesen Objekttyp gibt es sieben Formularereignisse. Damit lassen sich folgende Situationen verwalten:
On Before Data Entry: Dieses Ereignis wird unmittelbar vor Bearbeiten einer Zelle in der Listbox generiert (vor Anzeige des Eingabe-Cursors). Damit kann der Entwickler z.B. einen anderen Text anzeigen, je nachdem ob der Benutzer im Modus Anzeigen oder Bearbeiten ist.
On Selection Change: Dieses Ereignis wird bei jeder Änderung der aktuellen Auswahl von Zeilen und Spalten in der Listbox generiert, sowie in Datensatzlisten und hierarchischen Listen.
On Column Moved: Dieses Ereignis wird generiert, wenn der Benutzer eine Spalte in der Listbox per Drag&Drop bewegt. Es wird nicht generiert, wenn die Spalte per Drag&Drop an ihre Ausgangsposition bewegt wird. Der Befehl MOVED LISTBOX COLUMN NUMBER gibt die neue Position der Spalte zurück.
On Row Moved: Dieses Ereignis wird generiert, wenn der Benutzer eine Zeile der Listbox per Drag&Drop bewegt. Es wird nicht generiert, wenn die Spalte per Drag&Drop an ihre Ausgangsposition bewegt wird.
On Column Resize: Dieses Ereignis wird bei Andern einer Spalte in der Listbox generiert. Das kann mit der Maus oder über den Befehl SET LISTBOX COLUMN WIDTH erfolgen.
On Header Click: Dieses Ereignis wird bei einem Klick in den Kopfteil einer Spalte in der Listbox generiert. In diesen Fall erfahren Sie über die Funktion Self, welcher Kopfteil angeklickt wurde. Ist in der Listbox die Eigenschaft Sortierbar angeklickt, können Sie eine Standardsortierung der Spalte über die Variable $0 zulassen oder verweigern:
- Bei $0 gleich 0 wird die Standardsortierung ausgeführt.
- Bei $0 gleich -1 wird die Standardsortierung nicht ausgeführt, der Kopfteil zeigt keinen Sortierpfeil an. Über die Befehle zur Array-Verwaltung kann der Entwickler weiterhin eine Spalte nach eigenen Kriterien sortieren.
Wurde die Eigenschaft Sortierbar nicht für die Listbox ausgewählt, wird die Variable $0 nicht verwendet.
On After Sort: Dieses Ereignis wird nach einer Standardsortierung generiert, jedoch nicht, wenn die Variable $0 im Ereignis On Header Click den Wert -1 zurückgibt. Dieses Ereignis ist hilfreich, um die Richtung der zuletzt vom Benutzer ausgeführten Sortierung zu speichern.
Bei diesem Ereignis gibt die Funktion Self einen Zeiger auf die Variable der sortierten Spalte zurück.
Hierarchische Listen
Es gibt drei spezifische Formularereignisse, um Benutzeraktionen in hierarchischen Listen zu verwalten:
On Selection Change: Dieses Ereignis wird immer erzeugt, wenn die Auswahl in der hierarchischen Liste über Mausklick oder Tastenkürzel geändert wird. Es wird auch in Listboxen und Datensatzlisten generiert.
On Expand: Dieses Ereignis wird immer erzeugt, wenn ein Element der hierarchischen Liste über Mausklick oder Tastenkürzel aufgeklappt wird.
On collapse: Dieses Ereignis wird immer erzeugt, wenn ein Element der hierarchischen Liste über Mausklick oder Tastenkürzel zugeklappt wird.
Diese Ereignisse schließen sich nicht gegenseitig aus. Sie lassen sich für eine hierarchische Liste der Reihe nach erzeugen:
- 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/Schliessen oder | |
Doppelklick auf nicht-editierbare Unterliste | |
On selection change | Neues Element wählen |
On clicked / On double clicked | Liste über Klick oder Doppelklick aktivieren |
Web Areas
Speziell für Web Areas sind sieben Ereignisse verfügbar
On Begin URL Loading: Dieses Ereignis wird erzeugt, wenn im Web Bereich das Laden einer neuen URL startet. Über die dem Web Bereich zugeordnete Variable "URL" lässt sich die URL herausfinden, die gerade geladen wird.
Hinweis: Die gerade geladene URL unterscheidet sich von der aktuellen URL (siehe Beschreibung zur Funktion WA Get current URL)
On URL Resource Loading: Dieses Ereignis wird immer erzeugt, wenn eine neue Ressource, z.B. ein Bild, ein Rahmen,etc. in die aktuelle Web Seite geladen wird.
Über die dem Bereich zugewiesene Variable "Ablauf" können Sie den aktu-ellen Status des Ladevorgangs herausfinden.
On End URL Loading: Dieses Ereignis wird erzeugt, wenn alle Ressourcen der aktuellen URL geladen sind.
Über die Funktion WA Get current URL können Sie die geladene URL herausfinden.
On URL Loading Error: Dieses Ereignis wird erzeugt, wenn beim Laden einer URL ein Fehler gefunden wird.
Über den Befehl WA GET LAST URL ERROR erhalten Sie Informationen über den Fehler.
On URL Filtering: Dieses Ereignis wird erzeugt, wenn der Web Bereich das Laden einer URL blockiert, da über den Befehl WA SET URL FILTERS Filter eingerich-tet wurden.
Über die Funktion WA Get last filtered URL können Sie die blockierte URL herausfinden.
On Open External Link: Dieses Ereignis wird erzeugt, wenn das Laden einer URL vom Web Bereich blockiert und die URL mit dem aktuellen Browser des Systems geöffnet wird, da über den Befehl WA SET EXTERNAL LINKS FILTERS ein Filter eingerichtet ist.
Über die Funktion WA Get last filtered URL können Sie die blockierte URL herausfinden.
On Window Opening Denied: Dieses Ereignis wird erzeugt, wenn das Öffnen eines PopUp-Fensters vom Web Bereich blockiert wird. 4D Web Bereiche erlauben nicht das Öffnen von PopUp-Fenstern.
Über die Funktion WA Get last filtered URL können Sie die blockierte URL herausfinden.
Beispiele
Alle Beispiele setzen voraus, dass die Ereignisse für Formulare und Objekte ordnungsgemäß ausgewählt wurden.
1. Dieses Beispiel sortiert eine Auswahl von Unterdatensätzen für die Untertabelle [Parents]Children, bevor ein Formular für die Tabelle [Parents] auf dem Bildschirm angezeigt wird:
` Formularmethode für die Tabelle [Parents] Case of : (Form event=On Load) ORDER SUBRECORDS BY([Parents]Children;[Parents]Children'First name;>) ` ... End case
2. 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
3. Dieses Beispiel zeigt die komplette Verwaltung einer Dropdown-Liste (Initialisierung, Benutzerklicks und Objekt loslassen) innerhalb einer Objektmethode:
` asBurgerSize Drop-down list Object Method Case of : (Form event=On Load) ARRAY STRING(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
4. 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.
5. 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
6. 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)
7. Beispiele zum Verwalten von Ereignissen On Keystroke finden Sie unter den Befehlen Keystroke und FILTER KEYSTROKE.
8. Dieses Beispiel zeigt, wie Sie Klicks und Doppelklicks genauso wie rollbare Bereiche verwenden können:
` Objektmethode asChoices rollbarer Bereich Case of : (Form event=On Load) ARRAY STRING (...;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
9. 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 rollbarer Bereich Case of : (Form event=On Load) ARRAY STRING (...;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
10. 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
11. Dieses Beispiel zeigt, wie Sie die Dateneingabe mit dem Ereignis On Close Box steuern können:
` Methode für Formular zur Dateneingabe $vpFormTable:=Current form table Case of ` ... : (Form Event=On Close Box) If (Modified rec ´ Dieser Datensatz wurde verändert. Änderungen sichern?") If (OK=1) ACCEPT Else CANCEL End if Else CANCEL End if ` ... End case
12. Dieses Beispiel zeigt, wie Sie ein Datenfeld vom Typ Text oder alphanumerisch bei Änderung der Datenquelle in Großbuchstaben setzen:
` Objektmethode [Contacts]Vorname 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
Referenz
CALL PROCESS, Current form table, DRAG AND DROP PROPERTIES, FILTER KEYSTROKE, Get edited text, Keystroke, SET TIMER.
Befehl: On Collapse, Befehl: On Expand, New form events in 4D 2004