Navigation:  Funktionen >

bRegisterByEventHandler()

Diese Seite drucken    Vorherige SeiteZurück zum Anfang des KapitelsNächste Seite

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

lSuccessLogischer Wert der definiert, ob die Umleitung aktiviert werden konnte.
TRUEDie Umleitung konnte aktiviert werden.
FALSEDie 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

bUnregisterByEventHandler()

bSample - SensitiveSearch

 


Page url: http://www.YOURSERVER.com/index.html?bregisterbyeventhandler.htm