4D v16.3

Form event

Home

 
4D v16.3
Form event

Form event 


 

Form event -> Funktionsergebnis 
Parameter Typ   Beschreibung
Funktionsergebnis  Lange Ganzzahl in 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
  • Listbox: Die aktuelle Auswahl der Zeilen oder Spalten wurde geändert.
  • Datensätze in Liste: Der aktuelle Datensatz oder die aktuelle Auswahl der Zeilen in einem Listen- bzw. Unterformular wurde geändert.
  • Hierarchische Liste: Die Auswahl in der Liste wurde nach einem Mausklick oder Tastenanschlag geändert.
  • Eingebbares Feld oder Variable: Die Textauswahl oder Position des Cursors im Bereich wurde nach einem Mausklick oder Tastenanschlag geändert.
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
  • 3D Schaltflächen: Der Pfeilbereich einer 3D Schaltfläche ist angeklickt
  • Listboxen: In einer Spalte eines Objekt Arrays ist eine Schaltfläche [...] angeklickt (Attribut "alternateButton")
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:

  • 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 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.
  • On Drag Over - Nur die Objektmethode für das dropfähige Objekt innerhalb des Ereignisses wird aufgerufen,wenn die Eigenschaft "dropfähig" dafür ausgewählt wurde. Die Formularmethode wird nicht aufgerufen.
  • Umgekehrt wird für das Ereignis On Begin Drag Over die Objektmethode oder die Formularmethode des bewegten Objekts aufgerufen, wenn das Ereignis "dragfähig" dafür ausgewählt ist.

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.

  • 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 OBJECT 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.
    Beachten Sie, dass das Ereignis On Mouse Move nicht nur bei Bewegen des Mauszeigers generiert wird, sondern auch wenn der Benutzer eine Modifier-Taste, wie Shift, Shift Lock, Alt oder Option, drückt. So lassen sich auch Drag-and-Drop Operationen vom Typ Kopieren oder Bewegen verwalten.
  • Datensätze in Liste: Die Abfolge der Aufrufe von Methoden und Formularereignissen in Listenformularen, die über die Befehle DISPLAY SELECTION und MODIFY SELECTION und Unterformulare angezeigt werden ist folgendermaßen:
    Für jedes Objekt im Kopfteil:
    • Objektmethode 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, einen 4D Befehl aufzurufen, der ein Dialogfenster über die Ereignisse On Display Detail und On Header anzeigt. Das erzeugt einen Syntaxfehler. Das gilt insbesondere für die Befehle ALERT, DIALOG, CONFIRM, Request, ADD RECORD, MODIFY RECORD, DISPLAY SELECTION und MODIFY SELECTION.
  • On Page Change: Auf Formularebene verfügbar (wird in der Formularmethode aufgerufen).
    Es wird jedes Mal generiert, wenn sich die aktuelle Seite des Formulars ändert, entweder nach Aufrufen des Befehls FORM GOTO PAGE oder über standardmäßige Navigationsaktionen. Beachten Sie, dass dieses Ereignis erst generiert wird, wenn die Seite komplett geladen ist, z.B. wenn alle enthaltenen Objekte, inkl. Web Areas, initialisiert sind. Dieses Ereignis ist hilfreich zum Ausführen von Code, für den zuvor alle Objekte initialisiert sein müssen. Sie können damit Ihre Anwendung auch optimieren, wenn Code nicht bereits nach dem Laden der 1. Seite ausgeführt werden soll, sondern erst nach Anzeigen einer bestimmten Seite im Formular, beispielsweise eine Suche.

Folgende Tabelle zeigt, für welche Ereignisse Objekte und Methoden aufgerufen werden:

EreignisObjektmethodenFormularmethodenWelche Objekte

On Load

JaJaAlle Objekte
On UnloadJaJaAlle Objekte
On ValidateJaJaAlle Objekte
On ClickedJa (wenn anklickbar oder eingebbar) (*)JaNur betroffene Objekte
On Double ClickedJa (wenn anklickbar oder eingebbar) (*)JaNur betroffene Objekte
On Before KeystrokeJa (wenn eingebbar) (*) JaNur betroffene Objekte
On After KeystrokeJa (wenn eingebbar) (*) JaNur betroffene Objekte
On Getting FocusJa (wenn tabfähig) (*)JaNur betroffene Objekte
On Losing FocusJa (wenn tabfähig) (*)JaNur betroffene Objekte
On ActivateNieJaKeine
On DeactivateNieJaKeine
On Outside CallNieJaKeine
On Begin Drag OverJa (wenn drag-fähig (**)JaNur betroffene Objekte
On DropJa (wenn drop-fähig) (**)JaNur betroffene Objekte
On Drag OverJa (wenn drop-fähig) (**)NieNur betroffene Objekte
On Mouse EnterJaJaAlle Objekte
On Mouse MoveJaJaAlle Objekte
On Mouse LeaveJaJaAlle Objekte
On Mouse UpJaNieNur betroffene Objekte
On Menu SelectedNieJaKeine
On Data ChangeJa (wenn änderbar) (*)JaNur betroffene Objekte
On Plug-In AreaJaJaNur betroffene Objekte
On HeaderJaJaAlle Objekte
On Printing DetailsJaJaAlle Objekte
On Printing BreakJaJaAlle Objekte
On Printing FooterJaJaAlle Objekte
On Close BoxNieJaKeine
On Display DetailJaJaAlle Objekte
On Open DetailNein, außer für ListboxenJaKeine, außer Listboxen
On Close DetailNieJaKeine
On ResizeNein, außer für ListboxenJaKeine, außer Listboxen
On Selection ChangeJa (***)JaNur betroffenes Objekt
On Load RecordNieJaKeine
On TimerNieJaKeine
On ScrollJaJaNur betroffenes Objekt
On Before Data EntryJa (Listbox)NieNur betroffenes Objekts
On Column MovedJa (Listbox)NieNur betroffenes Objekt
On Row MovedJa (Listbox)NieNur betroffenes Objekt
On Column ResizeJa (Listbox)NieNur betroffenes Objekt
On Header ClickJa (Listbox)NieNur betroffenes Objekt
On After SortJa (Listbox)NieNur betroffenes Objekt
On Long ClickJa (3D Schaltfläche)JaNur betroffenes Objekt
On Alternative ClickJa (3D Schaltfläche und Listbox)NieNur betroffenes Objekt
On ExpandJa (hierarch. Liste)NieNur betroffenes Objekt
On CollapseJa (hierarch. Liste)NieNur betroffenes Objekt
On Begin URL LoadingJa (Web Area)NieNur betroffenes Objekt
On URL Resource LoadingJa (Web Area)NieNur betroffenes Objekt
On End URL LoadingJa (Web Area)NieNur betroffenes Objekt
On URL Loading ErrorJa (Web Area)NieNur betroffenes Objekt
On URL FilteringJa (Web Area)NieNur betroffenes Objekt
On Open External LinkJa (Web Area)NieNur betroffenes Objekt
On Window Opening DeniedJa (Web Area)NieNur 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:

  • 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 und Spalten von Listboxen
  • Unsichtbare Schaltflächen, hervorgehobene Schaltflächen, Optionsbilder
  • Thermometer, Lineale, Halbkreisskalen (Objekte mit Regler)
  • Registerkarten
  • Splitter

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.

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:

  • Alle eingebbaren Datenfeldobjekte vom Typ Alpha, Text, Datum, Zeit, Zahl oder Bild (nur On After Edit)
  • Alle eingebbaren Variablen vom Typ Alpha, Text, Datum, Zeit, Zahl oder Bild (nur On After Edit)
  • Comboboxen (außer On Selection Change)
  • Listboxen

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”.

  • On Before Keystroke and On After Keystroke
    Hinweis: Das Ereignis On After Keystroke kann 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 und On After Keystroke werden beim Verwenden einer Eingabemethode nicht erzeugt. Eine Eingabemethode (oder IME, Eingabemethodeneditor) ist ein Programm oder 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.
    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, Alle auswählen oder Wert markieren (Drag-Aktion ähnlich wie Kopieren); diese Aktionen verändern nicht die Position des Cursors und lösen so das Ereignis On Selection Change aus.
    - 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.
  • On Selection Change
    Dieses Ereignis wird bei Anwendung auf ein Textfeld bzw. eine Variable (eingebbar oder nicht eingebbar) immer ausgelöst, wenn sich die Position des Cursors ändert. Das passiert z.B., sobald der Benutzer Text mit der Maustaste oder über die Pfeiltasten der Tastatur auswählt oder Text eingibt. Auf diese Weise können Sie z.B. Befehle wie GET HIGHLIGHT auswählen.

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 von 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 und Spalten von 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 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:

  • 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ässt)
  • 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.

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:

  • On Long Click: Dieses Ereignis tritt ein, wenn auf eine 3D Schaltfläche geklickt wird und die Maustaste eine gewisse Zeit gedrückt bleibt. Theoretisch 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 alle Arten von 4D Schaltflächen, 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ü (siehe unten).
    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 Alternative 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 alternativer Aktionen in Bezug auf die primäre Aktion der Schaltfläche.
    Diese Art Schaltfläche lässt sich mit dem Ereignis On Alternative 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 mit diesem Schaltflächentyp erzeugt werden kann.



    Folgende Typen für 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.

Für diesen Objekttyp gibt es verschiedene 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 LISTBOX MOVED 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 generiert, wenn der Benutzer die Breite einer Spalte in der Listbox ändert.
    Ab 4D v16 wird das Ereignis "live" ausgelöst, es wird beispielsweise während dem Ereignis kontinuierlich gesendet, solange die Größe der betroffenen Listbox oder Spalte verändert wird. Die Aktion erfolgt manuell durch einem Benutzer oder ergibt sich durch Ändern der Listbox und seiner Spalten zusammen mit dem Formularfenster (manuelle Anpassung oder über den Befehl RESIZE FORM WINDOW).
    Hinweis: Das Ereignis On Column Resize wird nicht ausgelöst beim Ändern einer "fake" Spalte. Weitere Informationen dazu finden Sie im Abschnitt Gruppe Vergrößerungsoptionen.
  • On Expand und On Collapse: Diese Ereignisse werden generiert, wenn eine Zeile in der hierarchischen Listbox auf- bzw. zugeklappt wird.
  • 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. Mit der Funktion Clickcount können Sie die Anzahl Klicks durch den Benutzer testen.
    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 Footer Click: Dieses Ereignis ist für eine Listbox bzw. die Spalte einer Listbox verfügbar. Es wird generiert, wenn in den Fußteil einer Listbox bzw. einer Spalte in der Listbox geklickt wird. Dann gibt der Befehl OBJECT Get pointer einen Zeiger auf die Variable des angeklickten Fußteils zurück. Das Ereignis wird für Klicks mit der rechten und der linken Maustaste generiert. Mit der Funktion Clickcount können Sie die Anzahl Klicks durch den Benutzer testen.
  • On After Sort: Dieses Ereignis wird direkt nach einer Standardsortierung generiert (es wird z.B. nicht generiert, 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 des Kopfteils der sortierten Spalte zurück.
  • On Delete Action: Dieses Ereignis wird immer erzeugt, wenn ein Benutzer versucht, die ausgewählten Einträge über die Taste Löschen bzw. Rückschritt oder den Menübefehl Bearbeiten > Löschen zu löschen. Es ist nur auf der Listbox-Ebene verfügbar und wird jedes Mal erzeugt, wenn ein Benutzer versucht, eine Zeile zu löschen. Beachten Sie, dass 4D nur das Ereignis generiert, d.h. das Programm löscht keine Einträge. Der Entwickler muss den Löschvorgang mit entsprechenden Meldungen selbst verwalten.
  • On Scroll (neu in v15): Dieses Ereignis wird erzeugt, sobald ein Benutzer in den Zeilen oder Spalten der Listbox scrollt. Es wird nur erzeugt, wenn das Scrollen durch einen Benutzer erfolgt, also Rollbalken bzw. Cursor, Mausrädchen oder Tastatur verwendet werden. Es wird nicht generiert bei Scrollen durch Ausführen des Befehls OBJECT SET SCROLL POSITION.
    Dieses Ereignis wird nach jedem anderen Benutzerereignis im Zusammenhang mit Scrollen ausgelöst (On Clicked, On After Keystroke, etc.). Es wird nur in der Objektmethode und nicht in der Formularmethode generiert. Siehe hierzu Beispiel 15.
  • On Alternative Click (neu in v15): Dieses Ereignis wird in Spalten von Listboxen des Typs Objekt Array erzeugt, wenn der Benutzer auf eine Schaltfläche [...] klickt (Attribut "alternateButton"). Weitere Informationen dazu finden Sie im Abschnitt Objekt Arrays in Spalten von Listboxen (4D View Pro).

Für Listboxen vom Typ Auswahl gibt es zwei generische Ereignisse:

  • On Open Detail: Dieses Ereignis wird generiert, wenn gerade ein Datensatz im Detailformular einer Listbox vom Typ Auswahl angezeigt wird (und bevor dieses  Formular geöffnet wird).
  • On Close Detail: Dieses Ereignis wird generiert, wenn gerade ein Datensatz im Detailformular einer Listbox vom Typ Auswahl geschlossen wird (egal, ob er geändert wurde oder nicht).

Es gibt vier 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.
  • On Delete Action: Dieses Ereignis wird immer erzeugt, wenn ein Benutzer versucht, die ausgewählten Einträge über die Taste Löschen bzw. Rückschritt oder den Menübefehl Bearbeiten > Löschen zu löschen.
    Beachten Sie, dass 4D nur das Ereignis generiert, d.h. das Programm löscht keine Einträge. Der Entwickler muss den Löschvorgang mit entsprechenden Meldungen selbst verwalten (siehe Beispiel).
Diese Ereignisse schließen sich nicht gegenseitig aus. Sie lassen sich für eine hierarchische Liste der Reihe nach erzeugen:

- Nach Tastenkürzel (chronologisch):

EreignisKontext
On data changeElement wurde bearbeitet
On expand / On collapseUnterliste über die Pfeile g oder f öffnen/schließen
On selection changeNeues Element wählen
On clickedListe über Tastatur aktivieren

- Nach Mausklick (chronologisch):

EreignisKontext
On data changeElement wurde bearbeitet
On expand / On collapseUnterliste über die Icons Auf-/Zuklappen,
Öffnen/Schließen oder
Doppelklick auf nicht-editierbare Unterliste
On selection changeNeues Element wählen
On clicked / On double clickedListe über Klick oder Doppelklick aktivieren

  • Das Formularereignis On Picture Scroll wird generiert, sobald ein Benutzer ein Bild in einem Bereich (Feld oder Variable) scrollt. Sie können den Inhalt eines Bildbereichs scrollen, wenn der Bereich kleiner als sein Inhalt ist und beim Anzeigeformat "Abgeschnitten (nicht-zentriert)". Weitere Informationen dazu finden Sie im Abschnitt Bildformate.
    Das Ereignis wird generiert, wenn das Scrollen durch einen Benutzer erfolgt, also Rollbalken bzw. Cursor, Mausrädchen oder Tastatur verwendet werden. Weitere Informationen zum Scrollen über die Tastatur finden Sie im Abschnitt Rollbalken. Es wird nicht generiert, wenn ein Bild durch Ausführen des Befehls OBJECT SET SCROLL POSITION gescrollt wird.
    Dieses Ereignis wird nach jedem anderen Benutzerereignis im Zusammenhang mit Scrollen ausgelöst (On Clicked, On After Keystroke, etc.). Es wird nur in der Objektmethode und nicht in der Formularmethode generiert. Siehe hierzu Beispiel 14.
  • (Neu in v16) Das Ereignis On Mouse Up wird generiert, wenn der Benutzer beim Ziehen in einem Bildbereich (Feld oder Variable) gerade die linke Maustaste losgelassen hat. Dieses Ereignis ist z.B. hilfreich, wenn der Benutzer die Möglichkeit haben soll, in einem SVG Bereich Objekte zu bewegen, zeichnen oder zu vergrößern/verkleinern.
    Wird das Ereignis On Mouse Up generiert, können Sie dort, wo die Maustaste losgelassen wurde, die lokalen Koordinaten erhalten. Sie werden in den Systemvariablen MouseX und MouseY zurückgegeben und in Pixel angegeben, ausgehend von der oberen linken Ecke des Bildes (0,0).
    Mit diesem Ereignis müssen Sie auch den Befehl Is waiting mouse up verwenden für Fälle, wo der "Statusmanager" des Formulars desynchronisiert ist, z.B. wenn das Ereignis On Mouse Up nicht nach einem Klick empfangen wird. Das passiert beispielsweise, wenn ein Meldefenster über den Formular angezeigt wird, während die Maustaste nicht losgelassen wurde. Weitere Informationen dazu finden Sie unter dem Befehl Is waiting mouse up.

    Hinweis: Ist für das Bildobjekt die Option "Dragfähig" markiert, wird nie das Ereignis On Mouse Up generiert.

Ein Objekt Unterformular Container (im Elternformular enthaltenes Objekt, das eine Unterformular Instanz enthält) unterstützt folgende Ereignisse:

  • On Load und On Unload: Öffnet und schließt jeweis das Unterformular (Diese Ereignisse müssen auf Ebene des Elternformulars aktiviert worden sein, damit sie berücksichtigt werden). Beachten Sie, dass diese Ereignisse vor denen des Elternformulars generiert werden. Entsprechend zur Funktionsweise von Formularereignissen werden diese Ereignisse bei Unterformularen, die nicht auf Seite 0 oder 1 liegen, nur erzeugt, wenn diese Seite angezeigt bzw. geschlossen ist, und nicht wenn das Formular angezeigt bzw. geschlossen wird.
  • On Validate: Bestätigt die Dateneingabe im Unterformular.
  • On Data Change: Der Wert der Variablen des Objekts Unterformular wurde geändert.
  • On Getting Focus und On Losing Focus: Unterformular Container hat gerade Fokus erhalten bzw. verloren. Diese Ereignisse werden in der Methode des Objekts Unterformular erzeugt, wenn sie markiert sind. Sie werden an die Formularmethode des Unterformulars gesendet, d.h. zum Beispiel, dass Sie die Anzeige der Schaltflächen zum Navigieren im Unterformular gemäß dem Fokus verwalten können.
    Beachten Sie dass Unterformular Objekte selbst Fokus haben können.
  • On bound variable change: Dieses spezifische Ereignis wird im Rahmen der Formularmethode des Unterformulars erzeugt, sobald der Variablen, die mit dem Unterformular im Elternformular verbunden ist, ein Wert zugewiesen wird (selbst wenn der gleiche Wert erneut zugewiesen wird) und das Unterformular zur aktuellen Formularseite oder zur Seite 0 gehört. Weitere Informationen dazu finden Sie im Handbuch 4D Designmodus.

Hinweise:

  • 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.
  • Die im Unterformular generierten Ereignisse On Clicked und On Double Clicked werden zuerst von der Formularmethode des Unterformulars und dann von der Formularmethode des Host Formulars empfangen.

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 aktuellen 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 eingerichtet 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.

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:



Siehe auch 

CALL PROCESS
CALL SUBFORM CONTAINER
Current form table
DRAG AND DROP PROPERTIES
FILTER KEYSTROKE
Get edited text
Keystroke
SET TIMER

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Formularereignisse
Nummer: 388

 
GESCHICHTE 

New
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

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)