?
hallo,
ok timo, das ganze ist problematisch weil es sich in den schwantz beisst, aber es gibt dennoch eine möglichkeit. habe es getestet und es läuft prima:
//Die Header-Datei.
class TForm1 : public TForm
{
__published: // Von der IDE verwaltete Komponenten
private:
TButton* MyButton;
public:
__fastcall TForm1(TComponent* Owner);
void __fastcall MyButtonClick(TObject* Sender);
void __fastcall DeleteMyButton(TMessage& Msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(29456, TMessage, DeleteMyButton)
END_MESSAGE_MAP(TForm);
};
//Die Cpp.
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
MyButton = new TButton(this);
MyButton->Parent = this;
MyButton->OnClick = MyButtonClick;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DeleteMyButton(TMessage& Msg)
{
delete (TObject*)Msg.LParam;
}
void __fastcall TForm1::MyButtonClick(TObject* Sender)
{
PostMessage(Handle, 29456, 0, (long)Sender);
}
es wird quasi im konstruktor der form dynamisch ein button erzeugt, parent zugewiesen und einen OnClick event-handler. das eigentliche enternen übernimmt deletemybutton die von mybuttonclick eine botschaft erhält. es ist wichtig das diese botschaft über postmessage und nicht über sendmessage übermittelt wird, da postmessage nicht auf die ausführung wartet.
bei einer statisch erzeugten komponente (also per form-editor) ist das löschen per
delete this->MyButton;
möglich ohne problem.
mfg
murphy