Announcement

Collapse
No announcement yet.

OnClick bei abgeleiteter Klasse wird nicht aufgerufen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • OnClick bei abgeleiteter Klasse wird nicht aufgerufen

    Hallo,

    ich habe eine Klasse "Basis" definiert die letztlich eine GroupBox ist und dort ein PopupMenu mit 2 MenuItems erzeugt. Hier ist mal ein Beispielcode, damit man mein Problem besser verstehen kann:


    Code:
    //---------------------------------------------------------------------------
    class TBasis
    {
    private:	// Anwender-Deklarationen
            TPopupMenu *PopupMenu;
            TComponent* Parent;
    public:		// Anwender-Deklarationen
            __fastcall TBasis(TWinControl* Win,TComponent* Owner);
            __fastcall ~TBasis(void);
            TGroupBox *GB;
    };
    
    //---------------------------------------------------------------------------
    __fastcall TBasis::TBasis(TWinControl* Win, TComponent* Owner)
    {
      Window = Win;
      Parent = Owner;
      GB = new TGroupBox(Owner);
      GB->Parent = (TWinControl*)Owner;
     
      PopupMenu = new TPopupMenu(GB);
      TMenuItem *M1 = new TMenuItem(PopupMenu);
      PopupMenu->Items->Add(M1);
      M1->Caption = "MenuItem1";
      TMenuItem *M2 = new TMenuItem(PopupMenu);
      PopupMenu->Items->Add(M2);
      M2->Caption = "MenuItem2";
      GB->PopupMenu = PopupMenu;
      PopupMenu->Items->Items[0]->OnClick = OnClick;
      PopupMenu->Items->Items[1]->OnClick = OnClick;
    }
    //---------------------------------------------------------------------------
    void __fastcall TBasis::OnClick(TObject *Sender)
    {
      Application->MessageBox("Test","Test",MB_OK);
    }
    //---------------------------------------------------------------------------
    Jetzt habe ich diverse Klassen, die von "Basis" abgeleitet sind und möchte jetzt beim Klick der MenuItems eine Ereignisfunktion der neuen Klassen aufrufen, doch das funktioniert nicht.
    In diesen neuen Klassen habe ich eine Funktion MyOnClick(TBject *Sender) die ich für die MenuItemClicks eintrage:


    Code:
    __fastcall TMyClass::TMyClass(TWinControl* Win, TComponent* Owner)
      : TBasis(Win,Owner)
    {
      GB->PopupMenu->Items->Items[0]->OnClick = MyOnClick;
      GB->PopupMenu->Items->Items[1]->OnClick = MyOnClick;
    }
    //---------------------------------------------------------------------------
    void __fastcall TMyClass::MyOnClick(TObject *Sender)
    {
      Application->MessageBox("Gut","Okay",MB_OK);
    }
    //---------------------------------------------------------------------------
    Hat jemand eine Idee was ich falsch mache?

    Bye - Peter

  • #2
    in der header datei fehlt

    __published:

    __property OnClick;

    So funktioniert es jedenfalls bei meinen klassen.
    Diese sind aber von irgendeiner VCL klasse abgeleitet die OnClick hat.
    Ansonsten mußt du dir die Mühe machen, dieses selbst zu definieren.

    __property Classes::TNotifyEvent OnClick = {read=FOnClick, write=FOnClick, stored=IsOnClickStored};
    In TControl.
    Besser Du leitest deine TBasis von TControl ab.
    Warum das Fahrad 2x erfinden.


    mfg
    Fred
    Zuletzt editiert von Fred Nest; 27.08.2007, 14:06.

    Comment


    • #3
      Hi Fred,

      das war nur ein sehr gekürzter Auszug aus meinem Programm. Ich habe es auch mit einer Property und einem TNotify-Event probiert. hat ebenfalls nicht geklappt.

      Bye - Peter

      Comment


      • #4
        Betrachte mal mein Beispiel, dieses Funktioniert.
        PS ist ein Panel und TLedPanel eine eigene Klasse(ledS ein dyn. array).
        for( int i = 0; i < SETANZ; i++ )
        {
        ledS[i] = new TLedPanel(this);
        ledS[i]->Parent = PS;
        ledS[i]->IsNr = false;
        ledS[i]->Width = w1;
        ledS[i]->Caption = (char*)NAMENARR[ NAMENNR[ DIORNUM[i+120][3]-1 ][0] ][RELAISN];
        //ledS[i]->Nr = i+120+1;
        ledS[i]->rNr = DIORNUM[i+120][3]; // nummer des 1. relais
        ledS[i]->dioNr = i+120; // index in diornum
        IM->GetBitmap( 0,ledS[i]->LedOff );
        IM->GetBitmap( 1,ledS[i]->LedYellow );
        IM->GetBitmap( 2,ledS[i]->LedGreen );
        IM->GetBitmap( 3,ledS[i]->LedRed );
        ledS[i]->LedIndex = 0;
        ledS[i]->OnClick = PS->OnClick;
        ledS[i]->OnDblClick = PS->OnDblClick;
        } // for

        mfg
        Fred

        Comment


        • #5
          Hi Fred,

          hab's von TControl abgeleitet. Jetzt geht es super. Danke!

          Bye - Peter

          Comment

          Working...
          X