MDI-Child bei Programmstart automatisch öffnen
-
Ich habe sozusagen das gegenteilige Problem wie das hier:
https://www.c-plusplus.net/forum/54026-fullIch lasse ein MDI-Child Formular nicht automatisch beim Programmstart erzeugen, möchte dies aber unter gewissen Bedingungen doch gleich nach Programmstart erzeugen.
Es geht weder wenn ich es in der Ereignisfunktion für OnCreate noch für OnActivate noch für OnShow versuche. Weiß jemand die Lösung?
-
Eine Möglichkeit wäre, dafür einfach einen 10ms Timer zu benutzen, der einmal aufgerufen wird, um das Child- Fenster zu erzeugen.
Form10 ist die MDIForm, Form11 ist MDIChild
void __fastcall TForm10::tmr1Timer(TObject *Sender) { tmr1->Enabled = false; TForm *pForm = new TForm11(this); pForm->Show(); }
Eine andere Möglichkeit wäre, das Erzeugen über Postmessage nach dem Anzeigen auszulösen:
H-Datei:
class TForm10 : public TForm { __published: // Von der IDE verwaltete Komponenten void __fastcall FormShow(TObject *Sender); private: // Benutzer-Deklarationen enum { WM_CREATECHILDS = WM_USER+1 }; virtual void __fastcall Dispatch(void* Message); void __fastcall CreateChilds(); public: // Benutzer-Deklarationen __fastcall TForm10(TComponent* Owner); };
cpp-Datei:
#include <vcl.h> #pragma hdrstop #include "Unit10.h" #include "Unit11.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm10 *Form10; //--------------------------------------------------------------------------- __fastcall TForm10::TForm10(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm10::CreateChilds() { TForm *pForm = new TForm11(this); pForm->Show(); } //--------------------------------------------------------------------------- void __fastcall TForm10::Dispatch(void* Message) { TForm::Dispatch(Message); TMessage *pMsg = (TMessage*)Message; if (pMsg->Msg == WM_CREATECHILDS) { CreateChilds(); } } //--------------------------------------------------------------------------- void __fastcall TForm10::FormShow(TObject *Sender) { PostMessage(Handle,WM_CREATECHILDS,0,0); } //---------------------------------------------------------------------------
-
herzlichen dank an burkhi für die ausführliche Antwort