<< | Inhaltsverzeichnis | Suchen | >> |
Anweisung
Syntax: |
ON
<EREIGNIS> MACRO <MACRO-NAME> |
|||
|
|
|||
Achtung: Anstelle von <INDEXDATEI-NAME> kann bei diesen Anweisungen nicht wie bei anderen Anweisungen ein <STRING-AUSDRUCK> angegeben werden. |
||||
|
|
|||
Bedeutung: |
Der Macro <MACRO-NAME> wird ausgeführt, sobald das <EREIGNIS> eintritt. Alle Macros, mit Ausnahme von ON OK MACRO, ON ROLL MACRO und ON ROLLBACK MACRO wirken global auch über Unterprogrammgrenzen hinweg. In allen Macros mit Ausnahme von ON OK MACRO hat die Anweisung GOTO #... keine Wirkung, sie bewirkt lediglich das Verlassen des aktuellen und aller übergeordneten Macros. |
|||
|
<EREIGNIS> |
Bedeutung |
||
|
BEGIN_READ |
Der Macro wird jeweils vor der Lesezugriff (READ, START, READ-NEXT, READ-PREVIOUS) ausgeführt. Wird im Macro die Variable EBUS_TRANSFER = 0 gesetzt, so wird der Datensatz nicht gelesen und in OK die Fehlernummer 1098 geliefert. |
||
|
DELETE |
Der angegebene Macro wird jedesmal dann ausgeführt, wenn ein Löschzugriff auf die Indexdatei erfolgte und bei dem Zugriff kein Fehler auftrat. |
||
|
DOSERROR |
Diese Anweisung hat nur bei DOS-Programmen eine Wirkung. Bei kritischen DOS-Fehlern (Interrupt 24) wird normalerweise die Meldung <Fehlermeldung>. Zugriff erneut versuchen ? ausgegeben. Anstelle dieser Standard-Meldung wird der ON DOSERROR MACRO aufgerufen. Aus der Variablen MESSAGE$ kann der Fehlertext gelesen werden. Wie beim ON PRINTERROR MACRO muß beim Beenden die Variable EBUS_RETRY$ gesetzt werden. Beim Aufruf des Macros <MACRO-NAME> wird sie mit "N" vorbelegt. Wird die Variable auf "J" gesetzt, so wird der fehlerhafte Zugriff erneut versucht. In jedem anderen Fall wird die DOS-Funktion, die zum Fehler führte, abgebrochen. |
||
|
|
|||
|
Achtung: Wenn der ON DOSERROR MACRO ausgeführt wird, befindet sich das Programm in einem kritischen Zustand. Es sollten im Macro alle Anweisungen vermieden werden, die möglicherweise zu einem weiteren DOS-Fehler führen, da dies dann zu einem Systemabsturz führen kann. Kritisch sind dabei alle Zugriffe auf Geräte: Diskette, Platte, LPT1- und COM-Schnittstellen. |
|||
|
|
|||
|
DOUBLECLICK |
Der ON DOUBLECLICK MACRO wird unter WINDOWS jedesmal dann ausgeführt, wenn ein Doppelklick mit der linken Maustaste außerhalb eines Controls erfolgt. Die Variable EBUS_MOUSE_WDEPTH enthält die Windowtiefe, in der sich der Mauszeiger befindet. Die Variable EBUS_MOUSE_IN_FIELD enthält die interne Feldnummer, wenn sich der Mauszeiger in einem Maskenfeld befindet. Unter MS-DOS und UNIX hat die Anweisung ON DOUBLECLICK MACRO keine Wirkung. |
||
|
|
|
||
|
DRAG |
Der ON DRAG MACRO läuft ab, sobald die Maus mit gedrückter linker Maustaste wenigstens eine Spalte oder eine Zeile "gezogen" wurde. Die Variable EBUS_DRAG_FENR enthält die Nummer des Maskenfeldes, das gezogen werden soll. Befand sich die Maus in keinem Maskenfeld, so ist EBUS_DRAG_FENR = 0. In diesem Fall muß der Variablen EBUS_DROP$ ein Wert zugewiesen werden. Ist EBUS_DRAG_FENR <> 0, so enthält EBUS_DROP$ den Inhalt des angeklickten Maskenfeldes. Im ON DRAG MACRO muß die Variable EBUS_DRAG = 1 gesetzt werden, andernfalls wird Drag & Drop nicht zugelassen. Ist kein ON DRAG MACRO definiert, so können keine Maskenfelder mit der Maus gezogen werden. |
||
|
|
|
||
|
DROP |
Wird die Maus "gezogen" und die linke Maustaste in einem anderen Maskenfeld losgelassen, so wird der ON DROP MACRO ausgeführt. Die Variable EBUS_DROP_FENR enthält die Nummer der Zielmaskenfeldes. EBUS_DROP$ enthält den Wert, der in dieses Maskenfeld kopiert werden soll. EBUS_DROP_ROLL = 0, wenn das Zielmaskenfeld nicht in einem Rollbereich oder in der aktuellen Rollzeile liegt. Liegt das Zielmaskenfeld im Rollbereich, aber nicht in der aktuellen Rollzeile, so enthält EBUS_DROP_ROLL den Abstand zur aktuellen Rollzeile. Im ON DROP MACRO muß die Variable EBUS_DROP = 1 gesetzt werden, andernfalls wird der Inhalt von EBUS_DROP$ nicht in das Zielmaskenfeld kopiert. Wird die linke Maustaste außerhalb eines Maskenfeldes losgelassen, so wird ebenfalls der ON DROP MACRO ausgeführt. EBUS_DROP_FENR und EBUS_DROP_ROLL sind dann =0. Der ON DROP MACRO wird nicht ausgeführt, wenn in ein Datumsfeld ein Wert kopiert werden soll, der kein gültiges Datum darstellt. Das ungültige Datum wird dann auch nicht in das Zielmaskenfeld kopiert. |
||
|
|
|
||
|
EBUS_MESSAGE |
Der Macro wird ausgeführt, wenn das Programm unter WINDOWS eine von einem anderen EBUS-Programm mit GR_SEND_EBUS_MESSAGE abgeschickte Meldung empfängt. Die Variable EBUS_MESSAGE$ enthält dann die gesendete Meldung, die Variable EBUS_MESSAGE_TYPE den gesendeten Meldungstyp und die Variable EBUS_MESSAGE_SENDER$ den Hauptprogrammnamen des Absenders. |
||
|
EXIT |
Der angegebene Macro wird ausgeführt, wenn das Hauptprogramm beendet wird, unmittelbar bevor die Indexdateien geschlossen werden. Wird die Variable EBUS_TRANSFER = 1 oder EBUS_DATA = 0 gesetzt, so wird das Programm nicht beendet. |
||
|
|
|||
|
Achtung: Beim Beenden von Unterprogrammen (CALL) wird dieser Macro nicht ausgeführt. |
|||
|
|
|||
|
GR_MENUE_ESC |
Dieser Schalter hat nur bei zeichenorientierten Bildschirmoberflächen eine Wirkung (MS-DOS und UNIX). |
||
|
|
Der Macro wird ausgeführt, wenn bei einem SAA-Menue mit F10 das Menue aktiviert wurde und anschließend die ESC-Taste gedrückt wurde. In diesem Fall wird das Menue verlassen und auf die aktuelle Maske zurückgekehrt. Das eingeblendete Menue bleibt aber in der 1. Bildschirmzeile stehen. Ist ein ON GR_MENUE_ESC MACRO definiert, so wird dieser nach dem Drücken der Taste ESC ausgeführt. Mit Hilfe dieses Macros kann der Bildschirm wieder hergestellt werden. |
||
|
|
|
||
|
HSCROLL |
Der ON HSCROLL MACRO wird jedesmal dann ausgeführt, wenn bei einem Window mit horizontaler Schiebeleiste die Position der Schiebemarkierung mit der Maus verändert wird. Die Variable EBUS_SCROLLCODE enthält dann die Art der Veränderung und die Variable EBUS_SCROLLPOS die neue Position. |
||
|
|
|
||
|
INDEXERROR |
Der Macro wird ausgeführt, wenn bei folgenden Befehlen aufgrund eines Fehlers in den Block ON ERROR ... END gesprungen wird: READ, READS, |
||
|
|
Der Macro wird ausgeführt bevor die erste Anweisung im Block ON ERROR ... END ausgeführt wird. |
||
|
|
Wenn der Macro ausgeführt wird, stehen spezielle Variablen zur Verfügung, die die Informationen über den aktuellen Indexdateizugriff enthalten: |
||
|
|
EBUS_FILENAME$(EBUS_FILENR) liefert den Indexdateinamen. |
||
|
|
EBUS_KEYNR liefert die Schlüsselnummer (0=Haupt-Schlüssel, 1 ... 9 = Neben-Schlüssel). |
||
|
|
EBUS_IFUNC liefert die Zugriffsart: |
||
|
|
Nach dem Verlassen des Macros wird mit der 1. Anweisung im Block ON ERROR ... END fortgefahren. |
||
|
|
|
||
|
KEY |
Der ON KEY MACRO wird jedesmal ausgeführt, wenn in einem alphanumerischen Maskenfeld ein Zeichen eingegeben wurde. Die Variable EBUS_KEY enthält den ASCII-Wert des eingegebenen Zeichens und kann im Macro geändert werden. Nach der Ausführung des ON KEY MACRO wird das durch EBUS_KEY dargestellte Zeichen in das aktuelle Eingabefeld übernommen, wenn EBUS_KEY >0 und <256 ist. In jedem anderen Fall wird die Eingabe ignoriert. Beispiel: /* Ä in AE umwandeln, Ö
nicht zulassen Die Variable
EBUS_TRANSFER wird vor dem Aufruf des Macros = 0 gesetzt. Wird im ON KEY
MACRO EBUS_TRANSFER = 1 gesetzt, so wird der Inhalt der Variablen EBUS_DATA
in das aktuelle Feld übernommen. Wird EBUS_TRANSFER auf einen Wert <>
0, <> 99 und <> 1 gesetzt, so wird der Inhalt der Variablen
EBUS_DATA$ in das aktuelle Feld übernommen. In diesen Fällen wird weder das
eingegebene Zeichen noch EBUS_KEY verarbeitet. |
||
|
|
|
||
|
LPRINT_LPRECORDER |
Wird anstelle des Drucks ausgeführt wenn in der Druckvorschau F1=Drucken aufgerufen wird. EBUS_LPRECORDER_FILE$ enthält den Dateinamen (auch bei LP_AUTORECORDER_ON). Ist LP_AUTORECORDER_ON gesetzt, so sollte in diesem Macro LP_AUTORECORDER_OFF ausgeführt werden, andernfalls kommt es zu Fehlern wenn die Anweisung PRINTER oder CALL __WINPRINT aufgerufen wird. |
||
|
|
|
||
|
MENUE |
Der Macro wird nur ausgeführt, wenn die Funktion MENUE$ oder die Funktion GR_STARTMENUE aktiv ist. |
||
|
|
MENUE$: |
Der Macro wird jedesmal ausgeführt, wenn in der Funktion MENUE$ irgendeine Taste betätigt wurde, die nicht zur Beendigung des Menues führt. Wenn der Macro ausgeführt wird, stehen folgende Variablen zur Verfügung: EBUS_MENUE_KEY$ enthält die gedrückte Taste (z.B. F1$, END$, ...). EBUS_MENUE$ enthält die Menuezeile, die gerade invers angezeigt wird. Bei gültigen Tasten wird zuerst die zur Taste gehörende Funktion ausgeführt und dann der ON MENUE MACRO. Bei ungültigen Tasten ertönt im Menue normalerweise der Alarmton. Wenn ein ON MENUE MACRO definiert ist, wird der Alarmton unterdrückt und der Macro ausgeführt. |
|
|
|
GR_STARMENUE: |
Im SAA-Menue kann normalerweise jederzeit mit der Maus oder der Taste F10 ein anderer Menuepunkt angewählt werden, auch wenn der gerade aktive Menuepunkt noch nicht beendet ist. Wünschenswert ist deshalb ein Mechanismus, mit dem bei einer erneuten Menueauswahl ein Macro ausgeführt werden kann, in dem z.B. abgefragt wird, ob gewisse Daten noch gespeichert werden sollen. ON MENUE MACRO stellt diesen Mechanismus bei SAA-Menues bereit. Der Macro wird jedesmal dann ausgeführt, wenn ein neuer Menuepunkt ausgewählt wurde, auch dann, wenn der aktuelle Menuepunkt 'normal' beendet wird. Über die Software muß deshalb gesteuert werden, wann der Macro aktiv sein soll (siehe Beispiel). Über die Variable EBUS_DATA kann gesteuert werden, ob der Menuepunkt angesprungen werden soll oder nicht. Vor der Ausführung des ON MENUE MACRO wird diese Variable auf 1 gesetzt. Ist sie nach der Ausführung des Macros Null, so wird der ausgewählte Menuepunkt nicht angesprungen. |
|
|
|
Beispiel: Menueauswahl: ON MENUE RESET Macro FUNK1: ON MENUE MACRO
PRUEF Macro PRUEF: MESSAGE =
"Menue zulassen ?" |
||
|
|
|
||
|
MESSAGE |
Bei jeder Ausgabe irgendeiner Meldung in der Meldungszeile wird anstelle der Ausgabe der angegebene Macro ausgeführt. In diesem Macro kann die Art der Meldung über die Variable MESSAGETYPE und die Meldung selbst über die Variable MESSAGE$ erhalten werden. Innerhalb des Macros sind die Anweisungen MESSAGE und ERRORMES zulässig. Sie werden dort nicht mehr umgeleitet, sondern geben die Meldung in der Meldungszeile aus. Die Anweisung ON MESSAGE MACRO darf in diesem Macro nicht vorkommen, da sonst unvorhersehbare Fehler auftreten können. |
||
|
|
|
||
|
MOUSE |
Der ON MOUSE MACRO wird ausgeführt, wenn die linke Maustaste gedrückt wurde und sich der Mauscursor dabei nicht in einem Maskenfeld befand. Die Variablen EBUS_MOUSE_ROW und EBUS_MOUSE_COL enthalten die Zeile und Spalte des Mauscursors. |
||
|
|
|
||
|
MOUSEMOVE |
Der ON MOUSEMOVE MACRO wird unter Windows jedesmal dann ausgeführt, wenn der Mauszeiger bewegt wird. Die Variable EBUS_MOUSE_WDEPTH enthält die Windowtiefe, in der sich der Mauszeiger befindet. Die Variable EBUS_MOUSE_IN_FIELD enthält die interne Feldnummer, wenn sich der Mauszeiger in einem Maskenfeld befindet. Unter MS-DOS und UNIX hat die Anweisung ON MOUSEMOVE MACRO keine Wirkung. |
||
|
|
|
||
|
OK |
Bei Stammdatenmasken wird der Macro ausgeführt, nachdem die Frage Datensatz
ändern/speichern ? beantwortet wurde. Die Variable EBUS_OK$ enthält das eingegebene Zeichen (<J> oder <N>). Der Macro wird ausgeführt nachdem der Datensatz von der Stammdatenverwaltung gespeichert bzw. gelöscht wurde. Dieser Macro wirkt nicht global, sondern nur lokal im jeweiligen Haupt- bzw. Unterprogramm. |
||
|
|
|
||
|
PLAY_RECORDER_ |
Wird eine Recorderdatei mit PLAY_RECORDER_-FILE abgespielt, so nach dem Abspielen der Recorderdatei dieser Macro ausgeführt. Die Variable EBUS_TRANSFER2 enthält den Grund, warum das Abspielen der Recorderdatei beendet wurde: |
||
|
|
1 0 -1 -2 -3 -4 -5 |
Die Recorderdatei wurde vollständig abgespielt Das Abspielen wurde vorzeitig durch ALT/F4 oder mit dem Abbruch-Button auf einem Hinweis-Window beendet. Fehler beim Öffnen der Recorderdatei Fehler beim Schreiben in die Recorderdatei Fehler beim Kopieren der Datei ebusrec.tmp Fehler: Dateiende erreicht in Recorderdatei Fehler: Die Recorderdatei enthält eine ungültige Zeile. |
|
|
|
|
||
|
PRINTERROR |
Wenn unter MS-DOS innerhalb eines Reports
oder bei einer LPRINT- oder OUTPUT-Anweisung bei der Ausgabe
auf den Drucker festgestellt wird,
daß der Drucker nicht bereit ist, so erfolgt standardmäßig die Abfrage: Drucker nicht bereit. Zugriff erneut versuchen ? Der ON PRINTERROR MACRO bewirkt, daß nicht diese Meldung erscheint, sondern der angegebene Macro ausgeführt wird. In diesem Macro kann die Variable EBUS_RETRY$ gesetzt werden. EBUS_RETRY$ = "J" oder ="j" führt ebenso wie die Beantwortung der obigen Frage mit <J> dazu, daß der Zugriff erneut versucht wird. Jeder andere Wert wirkt wie "N". In diesem Fall werden alle nachfolgenden Druckausgaben ohne weitere Fehlermeldung solange ignoriert, bis die Anweisung PRINTER oder die Funktion READY ausgeführt wird. Unter UNIX hat die Anweisung ON PRINTERROR MACRO keine Wirkung. |
||
|
|
|
||
|
READ |
Der angegebene Macro wird jedesmal dann ausgeführt, wenn ein erfolgreicher Lesezugriff READ, READS, ausgeführt wurde. Der Macro wird auch ausgeführt, wenn z.B. in einem Maskenfeld, das mit der Indexdateivariablen verknüpft ist, mit <F3> oder <F4> geblättert wird oder in der Stammdaten-Verwaltung gelesen oder die SELECT-Funktion ausgeführt wird, also immer dann, wenn ein Datensatz der angegebenen Indexdatei gelesen wird. |
||
|
|
|
||
|
RECORDER |
Dieser Macro wird ausgeführt, wenn eine Recorderdatei abgespielt wird und beim Aufnehmen beim Dialog 'Hinweis-Window erstellen' unter Extras eine Zeichenkette (String) in die Recorderdatei eingetragen wurde. Für jede eingetragene Zeichenkette wird der ON RECORDER MACRO aufgerufen. Die Variable EBUS_RECORDER_STRING$ enthält dann die eingetragene Zeichenkette. |
||
|
|
|
||
|
RBUTTONUP |
Der ON RBUTTONUP MACRO wird ausgeführt, wenn die rechte Maustaste nach dem Drücken wieder losgelassen wird. Ist ein ON RMOUSE MACRO definiert, so wird dieser nicht ausgeführt. |
||
|
|
|
||
|
RMOUSE |
Der ON RMOUSE MACRO wird ausgeführt, wenn die rechte Maustaste gedrückt wird. Ist kein ON RMOUSE MACRO definiert, so wirkt die rechte Maustaste wie die Taste <ESC>. Der ON RMOUSE MACRO wird nur ausgeführt, wenn kein ON RBUTTONUP MACRO definiert ist. |
||
|
|
|
||
|
ROLL |
Der Macro wird ausgeführt, unmittelbar nachdem auf dem Bildschirm vorwärts gerollt wurde. (Vorwärts gerollt wird nach dem letzten Feld der Rollzeile, bei Betätigung von <F3> bzw. <CTRL/+> im Rollbereich oder durch die Anweisung ROLL.) Dieser Macro wirkt nicht global, sondern nur lokal im jeweiligen Haupt- bzw. Unterprogramm. |
||
|
|
|
||
|
ROLLBACK |
Der Macro wird ausgeführt, unmittelbar nachdem auf dem Bildschirm rückwärts gerollt wurde. (Rückwärts gerollt wird durch die Anweisung ROLLBACK, bei Betätigung von <F4> bzw. <CTRL/-> im Rollbereich, oder wenn der Anwender im 1. Feld der Rollzeile <> betätigt.) Dieser Macro wirkt nicht global, sondern nur lokal im jeweiligen Haupt- bzw. Unterprogramm. |
||
|
|
|
||
|
SCREENOFF |
Wenn mit EBUS_SCREENOFF ein Zeitintervall für die Abschaltung des Bildschirms definiert wird, werden normalerweise nach Ablauf des Zeitintervalls die Indexdateien geschlossen, der Bildschirm gelöscht und die Meldung Bitte beliebige Taste drücken läuft im Sekunden-Intervall über den Bildschirm. Wenn der ON SCREENOFF MACRO definiert ist, wird stattdessen dieser Macro ausgeführt. Es werden die Indexdateien dann nicht geschlossen, der Bildschirm wird nicht gelöscht und auch die Meldung Bitte beliebige Taste drücken erscheint nicht. Nach Ausführung des Macros wird aber trotzdem bis zum nächsten Tastendruck gewartet. Ist dies nicht gewünscht (z.B. weil im Macro schon auf den nächsten Tastendruck gewartet wurde), so kann das Drücken der Taste mit der Anweisung UNGETCHAR simuliert werden. |
||
|
|
|
||
|
SELECT |
Der Macro wird jedesmal ausgeführt, wenn in einer SELECT- oder SHOW-Funktion ein Indexdatei-Datensatz gelesen wurde, bevor der Datensatz am Bildschirm angezeigt wird. In diesem Macro dürfen die Werte der Indexdatei-Variablen verändert werden. Mit der Variablen EBUS_SELECT kann gesteuert werden, ob der Datensatz am Bildschirm angezeigt werden soll oder nicht. Bei EBUS_SELECT = 0 wird nach Verlassen des Macros die Anzeige des Datensatzes unterdrückt, andernfalls wird der Datensatz angezeigt. Jedesmal vor der Ausführung des Macros wird intern EBUS_SELECT = 1 gesetzt. Wird EBUS_SELECT = 99 gesetzt, so wird das Dateiende simuliert, d.h. der aktuelle Datensatz wird nicht angezeigt und es werden keine weiteren Datensätze mehr gelesen. Dies kann dazu benutzt werden, die Menge der zu lesenden Datensätze einzugrenzen. Mit Hilfe der Variablen EBUS_SELECT_COLOR$ können die einzelnen Felder farbig angezeigt werden. Der ON SELECT MACRO wird auch bei der Anweisung REFRESHSELECT für jeden gelesenen Datensatz ausgeführt. Die Variable EBUS_SELECT und die Anweisungen ENDSELECT und QUITSELECT haben dabei aber keine Wirkung. |
||
|
|
|
||
|
SELECTLINE |
Dieser Macro wird jedesmal dann ausgeführt, wenn ein einzelnes Feld einer Zeile im SELECT am Bildschirm angezeigt wurde. Folgende Variablen sind dabei gesetzt: EBUS_SELECT_FIELD enthält die Nummer des angezeigten Feldes (= Spalte des SELECT). EBUS_SELECT_COLUMN enthält die Spalte des angezeigten Feldes (X-Koordinate). EBUS_SELECT_ROW enthält die Zeile des angezeigten Feldes (Y-Koordinate). Dieser Macro kann z.B. dazu verwendet werden, in den SELECT-Zeilen mit Hilfe der Funktionen GR_LINE und GR_FILLRECT Diagramme anzuzeigen. |
||
|
|
Achtung: Dieser Macro wird ausgeführt während die SELECT-Zeilen am Bildschirm angezeigt werden. Der zugehörige Datensatz der Indexdatei wurde dabei bereits gelesen. Deshalb ist die Anweisung READSELECT nicht notwendig und auch nicht zulässig. |
||
|
|
|
||
|
SELECT(<TASTE>) |
Der ON SELECT(<TASTE>) MACRO wird jedesmal dann ausgeführt, wenn im SELECT, SELECTA oder SHOW die Taste <TASTE> gedrückt wurde. Folgende Tasten sind möglich: F1, F2,..., F24 Funktionstasten
1-24 Bei den Tasten CURSO, CURSU, PGUP und PGDN bleibt die ursprüngliche Wirkung erhalten, d.h. es kann mit diesen Tasten weiter vorwärts und rückwärts geblättert bzw. positioniert werden. Wenn die Aktion erfolgreich war (es wurde also nicht versucht, am Anfang oder Ende weiter zu blättern), wird nach der Neupositionierung des Inversbalkens der zugehörige Macro ausgeführt. Der ON SELECT(MOUSE) MACRO wird im SELECT/SHOW/SELECTA ausgeführt, wenn die linke Maustaste betätigt wurde und gleichzeitig eine oder mehrere der Tasten SHIFT, ALT oder CTRL gedrückt sind. Der ON SELECT(RBUTTONUP) MACRO wird ausgeführt, wenn die rechte Maustaste nach dem Drücken wieder losgelassen wird. Ist ein ON SELECT(RMOUSE) MACRO definiert, so wird dieser nicht ausgeführt, wenn ein ON SELECT(RBUTTONUP) MACRO definiert ist. |
||
|
|
|
||
|
SELECT(KEY) |
Der Macro <MACRO-NAME> wird ausgeführt, wenn im SELECT/SELECTA/SHOW eine Taste mit ASCII-Wert 1 bis 255 (also keine Funktionstasten) gedrückt wird. Die Variable EBUS_SELECT_KEY enthält dann den ASCII-Wert der gedrückten Taste. Dies kann z.B dazu benutzt werden, beim Suchen nach Namen durch Eingabe der Anfangsbuchstaben automatisch an die entsprechende Stelle zu positionieren. Beispiel: ON SELECT(KEY) MACRO SELECT.ON.KEY Macro SELECT.ON.KEY: ...
Macro
SELECT.ON.F2 |
||
|
|
|
||
|
SET_WDEPTH |
Der Macro wird ausgeführt, wenn mit SET_WDEPTH ein Window aktiviert wird. EBUS_WDEPTH enthält die Windowtiefe. |
||
|
|
|
||
|
TABCONTROL_ |
Der Macro wird ausgeführt, wenn im Tabcontrol eine andere Karteikarte aktiviert werden soll. Die Variable EBUS_DATA enthält die Nummer der Karteikarte, die aktiviert werden soll. Wird in diesem Macro EBUS_TRANSFER = 1, so wird die Karteikarte nicht aktiviert. |
||
|
|
|
||
|
TASKBAR |
Wird der Mauszeiger über ein in der Task-Leiste mit GR_TASKBAR_ADDICON erzeugtes Icon bewegt oder dort eine Maustaste gedrückt, so wird der Macro ausgeführt. Die Variable EBUS_TASKBAR_ID enthält die Nummer des Icons und EBUS_TASKBAR_MESSAGE den Grund für den Aufruf des Macros. Diese Funktion ist nur unter WINDOWS 32-Bit verfügbar. |
||
|
|
|
||
|
TIMER |
Die Anweisung ON TIMER MACRO hat nur eine Bedeutung unter WINDOWS. Sie startet einen Timer, der alle EBUS_TIMER_TIMEOUT Millisekunden den angegebenen Macro ausführt. Soll das Timeout-Intervall eines bereits laufenden Timers geändert werden, so muß der Variablen EBUS_TIMER_TIMEOUT der neue Intervallwert zugewiesen und anschließend die Anweisung ON TIMER MACRO erneut ausgeführt werden. Hat die Variable EBUS_TIMER_TIMEOUT einen Wert <= 0, so hat die Anweisung ON TIMER MACRO keine Wirkung. ON TIMER2/3/4/5 startet den 2., 3., 4., 5. Timer. |
||
|
|
|
||
|
VSCROLL |
Der ON VSCROLL MACRO wird jedesmal dann ausgeführt, wenn bei einem Window mit vertikaler Schiebeleiste die Position der Schiebemarkierung mit der Maus verändert wird. Die Variable EBUS_SCROLLCODE enthält dann die Art der Veränderung und die Variable EBUS_SCROLLPOS die neue Position. |
||
|
|
|
||
|
WCLOSE |
Der ON WCLOSE MACRO wird ausgeführt, wenn ein Window geschlossen wird. EBUS_WDEPTH enthält die Windowtiefe des zu schließenden Windows. Dieser Macro kann dazu verwendet werden, zu prüfen, ob geänderte Daten gespeichert werden müssen. |
||
|
|
Achtung: Im ON WCLOSE MACRO sollte als erstes die Anweisung ON WCLOSE RESET ausgeführt werden, andernfalls kommt es zu rekursiven Aufrufen, wenn in diesem Macro weitere Windows geschlossen werden. |
||
|
|
|
||
|
|
Beispiel:
Macro PRUEFEN.AENDERUNG: IF EBUS_WDEPTH = PRUEF_WDEPTH |
||
|
|
|
||
|
WM_ACTIVATEAPP |
Der ON WM_ACTIVATEAPP MACRO wird unter WINDOWS jedesmal dann ausgeführt, wenn das Programm aktiviert (in den Vordergrund geholt) oder deaktivert (in den Hintergrund gestellt) wird. Die Variable EBUS_TRANSFER hat dabei den Wert 0 beim Deaktivieren und den Wert 1 beim Aktivieren. Die Variable EBUS_TRANSFER2 enthält beim Deaktivieren die Prozeß-Nummer der Anwendung, die anschließend aktiviert wird. Unter MS-DOS und UNIX hat die Anweisung ON WM_ACTIVATEAPP MACRO keine Wirkung. |
||
|
|
|
||
|
WM_SIZE |
Der ON WM_SIZE MACRO wird unter Java und WINDOWS jedesmal dann ausgeführt, wenn sich die Größe des Main-Windows ändert. Die Variable EBUS_ MAINSIZE enthält die Information über die Größe des Main-Windows. Unter MS-DOS und UNIX hat die Anweisung ON WM_SIZE MACRO keine Wirkung. |
||
|
|
|
||
|
WRITE |
Analog zu ON READ(...) wird der angegebene Macro jedesmal dann ausgeführt, wenn ein Schreibzugriff auf die Indexdatei erfolgte und bei dem Zugriff kein Fehler auftrat.
|
||
Beispiel: |
In der Rechnungsdatei RECH existiert ein Feld RECH.KUNR, das auf die Kundendatei verweist. Beim Lesen der Datei RECH soll immer automatisch der Kunde mitgelesen werden. |
|||
|
ON READ(RECH) MACRO LIES.KU |
|||
|
Macro
LIES.KU: |
|||
|
Dieser Mechanismus kann auch mehrstufig verwendet werden. Z.B. könnte die obige Kundendatei auf eine weitere Datei verweisen, die dann genauso mit ON READ(KUNDEN) MACRO automatisch als Folge des Macros LIES.KU gelesen werden könnte. Diese Schachtelung kann prinzipiell bis zu jeder beliebigen Tiefe ausgeführt werden. Jedoch ist darauf zu achten, daß keine rekursiven Aufrufe entstehen, z.B. bei Datei A wird Datei B gelesen, bei Datei B wird Datei C gelesen und bei Datei C wird wieder Datei A gelesen. Dies führt intern zu unendlich vielen rekursiven Aufrufen und damit zum Stack-Overflow! |
|||
siehe auch: |
||||