Events
-
Hallo,
folgendes Beispiel aus dem Tutorial Komponenten Entwicklung.Hier wird ein Ereignis erstellt. Dieser Zeigertyp ist praktisch eine Schablone.
typedef void __fastcall (__closure *MyClickEvent)(TObject *Sender,int X, int Y);Soweit klar, hier kann der Programmierer den Zeiger auf das Event über die Eigenschaft MyClickEvent MyOnClick festlegen.
//--------------------------------------------------------------------------- class PACKAGE TMyRichEdit2 : public TRichEdit { private: MyClickEvent IVMyOnClick; //(2) __published: __property MyClickEvent MyOnClick={read=IVMyOnClick,write=IVMyOnClick};//(5) protected:WndProc wird mit einer Message aufgerufen,
ist diese Message "WM_LBUTTONDOWN" wird die Methode MyClick aufgerufen.public: void __fastcall MyClick(int X,int Y)//(3) { if(IVMyOnClick)IVMyOnClick(this,X,Y) ;//(4) } void __fastcall WndProc(Messages::TMessage &Message)//(6) { Dispatch(&Message) ;//(7) switch(Message.Msg) { case WM_LBUTTONDOWN://(8) MyClick(Message.LParamLo,Message.LParamHi);//(9) break; } } __fastcall TMyRichEdit2(TComponent* Owner); __published: };if(IVMyOnClick)-> dann das Event über den Funktionszeiger aufrufen.
if(IVMyOnClick) verstehe ich nicht.public: void __fastcall MyClick(int X,int Y)//(3) { if(IVMyOnClick)IVMyOnClick(this,X,Y) ;//(4) }Hätte nur etwas weiterlesen müssen, if(IVMyOnClick) Funktion wird nur über den
Funktionszeiger "IVMyOnClick" aufgerufen wenn der Eigenschaft ein Funktions-
zeiger zugewiesen wurde. Sonst hat der Zeiger NULL und der Aufruf erfolgt nicht.
-
Nächstes Mal bitte auf eine aussagekräftige Überschrift achten. Danke!