ToolButton und MDIChild zur laufzeit erstellen und über OnClick eins ansprechen
-
Hallo,
ich habe ein Problem wie kann man zur laufzeit des Programms ein MDIChildren über ein ToolButton ansprechen. Die ToolButtons werden zur laufzeit mit MDIChild erstellt.
void __fastcall TMainForm::AddButtons(TStringList *pCaptions, AnsiString sHint) { for (int i = 0; i < pCaptions->Count; i++) { TToolButton *pButton = new TToolButton(ToolBar2); pButton->Parent = ToolBar2; pButton->Height = 22; pButton->Caption = pCaptions->Strings[i]; pButton->Style = tbsButton; pButton->ImageIndex = 0; pButton->Hint = sHint; pButton->AutoSize = true; pButton->Name = "TButtons" + IntToStr(ToolBar2->ButtonCount); pButton->OnClick = ClickButtons; } } //--------------------------------------------------------------------------- void __fastcall TMainForm::ClickButtons(TObject *Sender) { for (int i = 0; i < ToolBar2->ButtonCount; i++) { if (ToolBar2->Buttons[i]->Caption == ((TMDIChild*)MDIChildren[i])->Caption) ShowMessage("Test"); } }
Wen ich eins anklicke, kommen alle MDIs ich weiss nicht wie ich das eine was ich nur anklicke ansprechen soll.
Von ToolButton und MDIChild ist Caption immer gleich.Ich hoffe es kann mir einer Helfen.
MfG Rave
-
Hallo
Vermutlich suchst du so etwas :
void __fastcall TMainForm::AddButtons(TStringList *pCaptions, AnsiString sHint) { for (int i = 0; i < pCaptions->Count; i++) { TToolButton *pButton = new TToolButton(ToolBar2); pButton->Parent = ToolBar2; pButton->Height = 22; pButton->Caption = pCaptions->Strings[i]; pButton->Style = tbsButton; pButton->ImageIndex = 0; pButton->Hint = sHint; pButton->AutoSize = true; pButton->Name = "TButtons" + IntToStr(ToolBar2->ButtonCount); pButton->OnClick = ClickButtons; TMDIChild* Child = ...; // Das MDI-Fenster das zu dem Button gehört pButton->Tag = reinterpret_cast<int>(Child); // Adresse des Fenster an Button "heften" } } //--------------------------------------------------------------------------- void __fastcall TMainForm::ClickButtons(TObject *Sender) { TComponent* Button = static_cast<TComponent*>(Sender); TMDIChild* Child = reinterpret_cast<TMDIChild*>(Button->Tag); // Adresse des Fensters aus Button auslesen // Child verwenden }
bis bald
akari
-
Danke für Deine antwort bekomme aber ein Fehler
[C++ Fehler] main.cpp(790): E2316 'Tag' ist kein Element von 'TObject'
-
Hallo
Hab ich oben korrigiert. Sender muß erst noch in TComponent gecastet werden.
bis bald
akari
-
ja Danke hatte ich später erst gesehen
ich habe SetFocus() hinzugefügt aber nix passiert !?!
void __fastcall TMainForm::AddButtons(TStringList *pCaptions, AnsiString sHint) { for (int i = 0; i < pCaptions->Count; i++) { TToolButton *pButton = new TToolButton(ToolBar2); pButton->Parent = ToolBar2; pButton->Height = 22; pButton->Caption = pCaptions->Strings[i]; pButton->Style = tbsButton; pButton->ImageIndex = 0; pButton->Hint = sHint; pButton->AutoSize = true; pButton->Name = "TButtons" + IntToStr(ToolBar2->ButtonCount); pButton->OnClick = ClickButtons; TMDIChild* Child = (TMDIChild*)MDIChildren[i]; // Das MDI-Fenster das zu dem Button gehört pButton->Tag = reinterpret_cast<int>(Child); // Adresse des Fenster an Button "heften" } } //--------------------------------------------------------------------------- void __fastcall TMainForm::ClickButtons(TObject *Sender) { TComponent* Button = static_cast<TComponent*>(Sender); TMDIChild* Child = reinterpret_cast<TMDIChild*>(Button->Tag); Child->SetFocus(); <----------- } //---------------------------------------------------------------------------
-
Sry es geht mit
Child->Show();