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!


Anmelden zum Antworten