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 hat 😉

    Zugriffsverletzung .. 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


Anmelden zum Antworten