Form event

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

Version 2004.2 (Geändert)


Form event

ParameterTypBeschreibung
Dieser Befehl benötigt keine Parameter
Funktionsergebnis1Nummer 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.

4th Dimension 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:

KonstanteWertBeschreibung
On Load1Das Formular wird zur Anzeige bzw. zum Druck
geladen
On Unload24Das Formular wird verlassen und freigegeben
On Validate3Die Eingabe in den Datensatz wurde bestätigt
On Clicked4Es wurde auf ein Objekt geklickt
On Double Clicked13Es wurde auf ein Objekt doppelgeklickt
On Before Keystroke17Ein Zeichen wird gleich in das Objekt mit Fokus
eingegeben. Get edited text gibt den Text des Objekts
ohne dieses Zeichen zurück
On After Keystroke28Ein Zeichen wird gleich in das Objekt mit Fokus
eingegeben. Get edited text gibt den Text des Objekts
mit diesem Zeichen zurück
On After Edit45Dieses Ereignis wird nach jeder Änderung am Inhalt eines
Eingabebereichs (Feld oder Variable) generiert.
On Getting Focus15Ein Formularobjekt wird mit Fokus versehen
On Losing Focus14Ein Formularobjekt verliert den Fokus
On Activate11Das Fenster des Formulars kommt an vorderste Stelle
On Deactivate12Das Fenster des Formulars ist nicht mehr an
vorderster Stelle
On Outside Call10Das Formular hat einen Aufruf CALL PROCESS erhalten
On Drop16Daten wurden in ein Objekt bewegt und losgelassen
On Drag Over21Daten wurden in ein Objekt bewegt, noch nicht
losgelassen
On Mouse Enter35Der Mauszeiger geht in den grafischen Bereich eines
Objekts
On Mouse Move37Der Mauszeiger bewegt sich im grafischen Bereich eines
Objekts (mindestens 1 Pixel)
On Mouse Leave36Der Mauszeiger verlässt den grafischen Bereich eines
Objekts
On Menu Selected18Ein Menüpunkt wurde ausgewählt
On Data Change20Daten des Objekts wurden geändert
On Plug-In Area19Ein Externes Objekt verlangt die Ausführung seiner
Objektmethode
On Header5Der Kopfteil des Formulars wird angezeigt oder
gedruckt
On Printing Details23Der Datenteil des Formulars wird gedruckt
On Printing Break6Ein Umbruchteil des Formulars wird gedruckt
On Printing Footer7Der Fußteil des Formulars wird gedruckt
On Close Box22Es wurde in die Schließbox des Fensters geklickt
On Display Detail8Ein Datensatz wird in einer Liste angezeigt
On Open Detail25Es wurde auf einen Datensatz doppelgeklickt und das
Eingabeformular geöffnet
On Close Detail26Sie verlassen das Eingabeformular und kehren zum
Ausgabeformular zurück
On Selection Change31 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 Record40Wä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 Timer27Die vom Befehl SET TIMER festgelegte Anzahl Ticks ist
erreicht
On Resize29Formularfenster wird in der Größe angepasst

Listbox

Folgende Ereignisse werden nur für Listboxen generiert:

KonstanteWertBeschreibung
On Before Data Entry41Eine Zelle in Listbox wechselt gleich in den
Bearbeitungsmodus
On Column Moved32Eine Spalte in Listbox wird vom Benutzer per Drag&Drop
bewegt
On Row Moved34Eine Zeile in Listbox wird vom Benutzer per Drag&Drop
bewegt
On Column Resize33Eine Spaltenbreite in Listbox wird geändert
On Header Click42Im Spaltentitel der Listbox tritt ein Mausklick auf
On After Sort30In einer Spalte in Listbox wurde gerade eine
Standardsortierung ausgeführt

3D Schaltflächen

Folgende Ereignisse werden nur für 3D Schaltflächen generiert:

KonstanteWertBeschreibung
On Long Click39Eine 3D Schaltfläche wurde angeklickt und die Maustaste
bleibt eine gewisse Zeit gedrückt
On Arrow Click38Der PopUp-Bereich (mit Pfeil) einer 3D Schaltfläche
wurde angeklickt

Hierarchische Listen

Folgende Ereignisse werden nur für hierarchische Listen generiert:

KonstanteWertBeschreibung
On Expand43Ein Element der hierarchischen Liste wurde über Mausklick
oder Tastenkürzel aufgeklappt
On Collapse44Ein Element der hierarchischen Liste wurde über Mausklick
oder Tastenkürzel zugeklappt

Ereignisse und Methoden

Tritt ein Formularereignis ein, führt 4th Dimension 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:

EreignisObjektmethodenFormular-Welche Objekte
methoden
On LoadJaJaAlle Objekte
On UnloadJaJaAlle Objekte
On ValidateJaJaAlle Objekte
On ClickedJa (wenn anklickbar) (*)JaNur betroffene Objekte
On Double ClickedJa (wenn anklickbar) (*)JaNur betroffene Objekte
On KeystrokeJa (wenn über
Tastatur 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 DropJa (wenn dropfähig) (*)JaNur betroffene Objekte
On Drag OverJa (wenn dropfähig) (*)NieNur betroffene Objekte
On Mouse EnterJaJaAlle Objekte
On Mouse MoveJaJaAlle Objekte
On Mouse LeaveJaJaAlle 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 DetailsJaJaAlle Objekte
On Open DetailsNieJaKeine
On Close DetailsNieJaKeine
On ResizeNieJaKeine
On Selection ChangeJa (**)JaNur betroffene Objekte
On Load RecordNieJaKeine
On TimerNieJaKeine
On Before Data EntryJa (Listbox)NieNur betroffene Objekte
On Column MovedJa (Listbox)NieNur betroffene Objekte
On Row MovedJa (Listbox)NieNur betroffene Objekte
On Column ResizeJa (Listbox)NieNur betroffene Objekte
On Header ClickJa (Listbox)NieNur betroffene Objekte
On After SortJa (Listbox)NieNur betroffene Objekte
On Long ClickJa (3D Schaltfläche)JaNur betroffene Objekte
On Arrow ClickJa (3D Schaltfläche)JaNur betroffene Objekte
On ExpandJa (3D Schaltfläche)NieNur betroffene Objekte
On CollapseJa (hierarch. Liste)NieNur betroffene Objekte

(*) Weitere Informationen finden Sie in den folgenden Abschnitten Ereignisse, Objekte und Eigenschaften.

(**) 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):

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/Schliessen oder
Doppelklick auf nicht-editierbare Unterliste
On selection changeNeues Element wählen
On clicked / On double clickedListe über Klick oder Doppelklick aktivieren

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).
               ` Die Maustaste ist weiterhin gedrückt, durch Akzeptieren des Drag hebt 
               ` 4D lediglich das Objekt hervor, um dem Benutzer anzuzeigen, dass die
               ` Quelldaten in das Objekt gelegt werden können. 
            $0:=0
         Else
               ` Wenn ja, verweigere das Bewegen (Drag)
            $0:=-1
               ` In diesem Fall wird das Objekt nicht hervorgehoben
         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.


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