MDIChild - merkwürdiges Verhalten
-
Hallo!
Ich habe mit:
TForm *Child=new TForm(Application); Child->Parent=Form1; Child->FormStyle=fsMDIChild; TButton *button=new TButton(Child); button->Left=80; button->Height=25; button->Show(); Child->Show();
ein MDI-Child mit einem dynamischen Button generiert.
Wenn ich jetzt die Anwendung laufen lasse, ist der Inhalt des MDIChilds transparent - und ich kann das MDI-Fenster nicht schließen - er minimiert nur das Fenster. Der Button wird auch nicht angezeigt. Außerdem stürzt mir der BCB
mit einer Zugriffsverletzungs-Meldung ab, wenn ich die ganze Anwendung schließen möchte.Wenn ich jetzt diese Deklaration weglasse:
Child->FormStyle=fsMDIChild;
... ist das MDI-Child plötzlich nicht mehr transparent - aber ich kann dem Fenster nicht den Fokus geben. Das schließen funktioniert jetzt wieder - jedoch erscheint trotzdem nicht der dynamische Button.
Wer weiß - was ich falsch mache???
Vielen Dank schonmal im Vorraus!!!!
Martin
-
thunder1902 schrieb:
TForm *Child=new TForm(Application); Child->Parent=Form1; Child->FormStyle=fsMDIChild; TButton *button=new TButton(Child); button->Left=80; button->Height=25; button->Show(); Child->Show();
Hi,
Der Button wird nicht angezeigt, weil er verweist ist! Also "kein" Eltern hatZugriffsverletzung .. immer wieder alles wegmachen was man verursacht hat! (new -> ...)
geht nicht zu schließen ... bei onClose muss eine Var gesetzt werden, die bei MDI-Child einen anderen std. Wert hat! (Hilfe)
Child->Show(); ist überflüssig! MDI-Child wird sofort angezeigt!
MFG
Alexander Sulfrian
-
thunder1902 schrieb:
Hallo!
Ich habe mit:
... Child->FormStyle=fsMDIChild;
ein MDI-Child mit einem dynamischen Button generiert.
Das soll man laut Borland C++ Builder Hilfe nicht machen.
Zitat aus der Hilfe zu TForm::FormStyle:
Der Wert von FormStyle sollte nicht zur Laufzeit geändert werden.Ich mache es aber auch
thunder1902 schrieb:
... und ich kann das MDI-Fenster nicht schließen - er minimiert nur das Fenster.
Probier's mal damit:
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; }
und irgendwo noch das Ereignis zuweisen
Child->OnClose = &FormClose;
Gruß,
Alexander
-
Vielen DAnk für eure Tips!
Funktioniert jetzt astrein!
Martin