Zweck
Leitet die Events von einem Fenster oder Control auf die Methode eines anderen Objekts um.
Typ
Function
Syntax
bRegisterByEventHandler(
<oWindow>,
<oMethodOwner>,
<symMethod>
) Æ lSuccess
Argumente
<oWindow> | Fenster oder Control, von dem die Events umgeleitet werden sollen. |
Datentyp: | Object |
<oMethodOwner> | Objekt zu dem die Events umgeleitet werden sollen. |
Datentyp: | Object |
<symMethod> | Name der Methode, die im <oMethodOwner> aufgerufen werden soll und in der die umgeleiteten Events verarbeitet werden. |
Datentyp: | Symbol |
Rückgabewert
lSuccess | Logischer Wert der definiert, ob die Umleitung aktiviert werden konnte. |
TRUE | Die Umleitung konnte aktiviert werden. |
FALSE | Die Umleitung konnte nicht aktiviert werden. |
Datentyp: | Logic |
Beschreibung
Die VO-Klassen Window und Control besitzen einen allgemeinen EventHandler, der immer dann aufgerufen wird, wenn Microsoft-Windows eine Nachricht (Event) an das Window/Control schickt. Dieser EventHander ist durch die Methode Dispatch() realisiert und sorgt dafür, daß die eingehenden Events an untergeordnete EventHandler weitergereicht oder verarbeitet werden. Leider kommen in der Methode Dispatch() nicht alle Nachrichten von Microsoft-Windows an. Einige werden bereits vorher von der Klassenbibliothek abgefangen und nicht weitergereicht. In manchen Fällen möchte man aber trotzdem auf diese bestimmten Nachrichten reagieren oder ein anderes Objekt soll auf die Nachrichten reagieren. Für genau diese Aufgaben dient die Funktion bRegisterByEventHandler(). Sie leitet die Nachrichten für ein Window/Control auf ein anderes Objekt um und zwar noch bevor die Dispatch-Methode des Window/Control aufgerufen wird. Hierdurch erhält das Objekt die Möglichkeit auf die Nachrichten zu reagieren. Die Methode <symMethod> in dem Objekt <oMethodOwner> muss folgendes Format haben:
<symMethod>(oEvent) CLASS <classname>
Wenn die Methode die eingehende Nachricht nicht selbst verarbeitet oder die Nachricht an das Fenster/Control weitergereicht werden soll, muss die Methode den Wert NIL zurückgeben. Andernfalls muss der Wert zurückgeben werden, der für die entsprechende Nachricht definiert ist. Welche Werte das sind, kann über das SDK von Microsoft-Windows ermittelt werden.
Die Funktion bRegisterByEventHandler() kann auch für ein Window/Control auf verschiedene Objekte umgeleitet werden. In diesem Fall werden die Methoden in der Reihenfolge aufgerufen, in der sie sich über die Funktion registriert haben. Sobald eine Methode einen Wert ungleich NIL zurück gibt, werden allerdings die nachfolgenden registrierten Methoden nicht mehr aufgerufen.
Beispiel
Das folgende Beispiel leitet die Nachrichten für einen bBrowser auf die Methode BrowserEventHandler() in dessen Owner um. Innerhalb der Methode werden die KeyDown-Events abgefangen und eine Nachricht ausgegeben, wenn die RETURN-Taste gedrückt wurde. Damit die Events an den bBrowser weitergeleitet werden, wird die Methode immer mit dem Wert NIL verlassen.
CLASS dtwSample INHERIT DataWindow
PROTECT oBrowser AS bBrowser
METHOD Init(oOwner) CLASS dtwSample
SUPER:Init(oOwner)
oBrowser := bBrowser{oOwner,;
1000,;
Point{0, 0},;
Dimension{300, 250}}
SELF:oBrowser:Show()
// Events des bBrowser auf das Fenster umleiten
bRegisterByEventHandler(SELF:oBrowser,;
SELF,;
#BrowserEventHandler)
RETURN SELF
METHOD Destroy() CLASS dtwSample
// Fenster aus dem EventHandler des bBrowser ausklinken
bUnregisterByEventHandler(SELF:oBrowser, SELF)
RETURN SUPER:Destroy()
METHOD BrowserEventHandler(oEvent) CLASS dtwSample
// in dieser Methode kommen alle Events des bBrowser an
IF oEvent:uMsg=WM_KEYDOWN
IF InList(oEvent:WParam, KEYRETURN, KEYENTER)
MessageBox(SELF:Handle(),;
"RETURN-Taste wurde gedrückt.",;
"Info",;
MB_OK+MB_ICONINFORMATION)
ENDIF
ENDIF
RETURN NIL
Siehe auch
Page url: http://www.YOURSERVER.com/index.html?bregisterbyeventhandler.htm