Button im eigenen onClick Ereignis löschen



  • Hilft es denn, wenn Du vor dem Löschen die OnClick-Eigenschaft auf null setzt?
    Also so:

    void __fastcall TForm1::handleOnClick(TObject *Sender)
    {
       TButton* btn = (TButton*) Sender;
       btn->OnClick = 0;
       delete btn;
    }
    

    Nur geraten...

    Gruß

    Alexander



  • @Th ist zwar irgendwie auch geschummelt, aber ist natürlich auch ne Möglichkeit. 😃
    Die PostMessage Geschichte gefällt mir zwar prinzipiell besser, nur habe ich mich damit noch gar nicht beschäftigt und hab dazu jetzt auch nicht die Zeit.

    Daher werde ich mal Deine Lösung in Betracht ziehen.

    schon mal danke

    Mfg mav



  • Alexander Kempf schrieb:

    Hilft es denn, wenn Du vor dem Löschen die OnClick-Eigenschaft auf null setzt?

    Nee, leider nicht...



  • Das mit dem PostMessage ist nicht so schwierig:

    // Header des Forms
    // irgendwo über der Klassendefinition
    #define CM_DELETEBUTTON (WM_APP + 400)
    
    // unter private oder protected
    void __fastcall CMDeleteButton(TMessage Message);
    	BEGIN_MESSAGE_MAP
    		VCL_MESSAGE_HANDLER(CM_DELETEBUTTON, TMessage, CMDeleteButton);
    	END_MESSAGE_MAP (TForm)
    
    // CPP des Forms
    void __fastcall TForm1::CMDeleteButton(TMessage Message)
    {
    	// hier der Code zum Löschen des Buttons
    	// am sinnvollsten ist wohl als LParam oder WParam der Botschaft einen Zeiger auf den Button zu übergeben
    	TButton* btn = (TButton*) Message.LParam;
    	delete btn;
    }
    
    // Aufruf dann aus der Button-Click Mehtode über
    PostMessage(Form1->Handle, CM_DELETEBUTTON, 0, (int) this);
    


  • Hallo

    @Braunstein : Die Methode muß natürlich überall CMDeleteButton heißen 😉

    ...
    void __fastcall TForm1::CMDeleteButton(TMessage Message) 
    ...
    

    bis bald
    akari



  • @Joe_M: Wirklich vielen Dank! Werde ich nachher mal ausprobieren. Weil aus der BCB Hilfe habe ich jetzt nicht auf die Schenlle verstanden wie das funzt.

    Danke

    Mfg Mav



  • @akari
    Hiermit hatte ich ausnahmsweise mal nichts zu tun. 🙂



  • Hallo,

    habs jetzt mal ausprobiert. funktioniert super vielen Dank!

    Mfg Mav



  • Hallo

    Braunstein schrieb:

    @akari
    Hiermit hatte ich ausnahmsweise mal nichts zu tun. 🙂

    Sorry... ich weiß gar nicht warum ich dort Braunstein geschrieben habe... 🙄

    bis bald
    akari



  • akari schrieb:

    Die Methode muß natürlich überall CMDeleteButton heißen 😉

    Ich hab das einfach kopiert, geändert und die angesprochene Stelle vergessen... Ich habs geändert.


Anmelden zum Antworten