Fenster in Fenster (aber kein MDI)



  • Hallo zusammen,
    ich kämpfe im Moment mit dem Problem, dass ich mehrere Fenster in einem fenster öffnen möchte. D. h. eine Form1, in der ich die Form2, From3... anzeigen möchte und diese dann aktivieren sollte.
    Dies scheint eine perfekte MDI- Anwendung zu sein.
    Leider funktioniert die Sache mit MDI in meinem Projekt nicht. (weil ich noch mehrere andere Fenster verwenden).

    Die Sache mit dem erzeugen funktioniert einwandfrei, nur aktivieren kann ich Form2, From3... nicht (kann nicht in das darauf befindliche Memo schreiben)

    Hat mir vielleicht jemand einen Tipp, wie ich diese Form2... aktivieren könnte ?

    Im Voraus schon mal besten Dank für jede Hilfe



  • Hab ich nicht verstanden. 😕
    Vielleicht kannst Du das noch ein bißchen genauer beschreiben.
    Willst Du ein Formular erzeugen, das andere Formulare integriert,
    also sowas wie andocken oder willst Du nur von einem Formular auf
    ein anderes zugreifen?

    Gruß,

    Alexander



  • Sorry, dass es etwas unverständlich war.
    Ich versuch noch einmal.

    1. Ich habe ein Formular Form1.
    2. In diesem Form1 gibt es einen Button, der mir Form2 öffnet.
    3. In Form2 gibt es wiederum einen Button2, mit dem ich mehrere Instanzen von TForm3 erzeugen kann und Form3->Parent = Form2 setze.
    4. Auf den Form3- Formularen gibt es jeweils ein Memo, in welches ich etwas schreiben möchte.

    Mein Problem nun: Ich kann auf die einzelnen Memos nicht zugreifen, d.h die Instanzen von Form3 können nicht aktiviert werden.

    Ich hoffe, mein Problem jetzt besser dargestellt zu haben.



  • maam schrieb:

    ... die Instanzen von Form3 können nicht aktiviert werden.

    Was bedeutet "aktivieren"?
    Vielleicht hast Du mal ein bißchen Source-Code. Dann wäre alles wahr-
    scheinlich gleich viel klarer.

    Gruß,

    Alexander



  • Warum stellst du Form2 nicht einfach als MDIForm ein?
    Du kannst doch "normale" Forms und MDI-Forms nebeneinander betreiben.



  • Ok:

    In Form1:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      Form2->Show();
    }
    //---------------------------------------------------------------------------
    

    In Form2:

    void __fastcall TForm2::Button1Click(TObject *Sender)
      {
      static int i1 = 0;
      Form3[i1] = new TForm3(this);
      Form3[i1]->Parent = Form2;
      i1++;
      }
    //---------------------------------------------------------------------------
    

    In Form2.h"

    private:
            TForm3 *Form3[10];
    

    In Form3 ist nur ein Memo enthalten.

    Wenn ich nun drei Instanzen von TForm3 erzeugt habe und in die Memos etwas schreiben möchte, geht dies nicht.

    Hallo Jansen,
    genau das habe ich auch schon mal probiert, aber leider ohne Erfolg. Wenn ich Form2 als MDI- Form deklariere und Form3 als MDI-Child und dann MDI- Childs (Form3) erzeugen möchte, bekomme ich die Meldung:
    MDI- Child kann nicht erzeugt werden, weil keine MDI- Form aktiv.



  • Wofür brauchst Du untenstehende Zeile?

    maam schrieb:

    Form3[i1]->Parent = Form2;
    

    Hast Du mal probiert die Zeile rauszunehmen?

    maam schrieb:

    MDI- Child kann nicht erzeugt werden, weil keine MDI- Form aktiv.

    Meiner Meinung nach bedeutet das, daß das Formular, von dem aus Du das neue
    Formular erzeugen willst, kein MDI-Formular ist. D.h. Du hast keine MDI-
    Anwendung, folglich kannst Du auch keine MDI-Childs erzeugen.

    Gruß,

    Alexander



  • Ich muss mich wohl korrigieren bzw. präzisieren.
    So wie's aussieht muss immer die Main-Form die MDIForm sein, also üblicherweise Form1. Zusätzlich zu dieser (und deren MDIChilds) lassen sich dann aber auch normale Forms, ausserhalb der MDIForm anzeigen.



  • Guten Morgen,
    Danke euch erst mal für eure Hilfen,

    die Zeile Form3[i1]->Parent = Form2, benötige ich, dass mir die Form3 immer nur angezeigt wird, wenn Form2 auch offen ist. (in Prinzip, ist Form2 wie eine MDI- Form und die Form3 ein MDI- Child).

    Wenn ich die Hauptform als MDI- Form deklariere, dann werden mir die MDI- Childs immer in dieser Hauptform erzeugt. Das kann ich aber so nicht unbedingt gebrauchen.
    Ich benötige eine Form1 als ganz noramles Fenster und erst aus dieser heraus möchte ich die "MDI- Anwendung" starten können, d.h.

    Form1 ist mein Programmfenster,
    Form2 ist mein Texteditor, in dem ich dann mehrere Editierfenster öffnen können sollte.



  • Eine Frage noch:
    Wenn ich eine MDI- Anwendung machen möchte, muss immer das Hauptformular als MDI- Form deklariert werden ?
    oder mache ich in meinem Projekt etwas falsch ?



  • nein, das stimmt, die Form1 muss immer MDI sein, wenn du weitere Forms mit MDI betreiben willst.



  • Hallo,
    ich weiß zwar nicht ob das Problem jetzt gelöst wurde oder nicht, aber muss Form2 unbeding Formulare enthalten, Du könntest stattdessen ein TabControl verwenden und dann die Editoren dort hinzufügen.
    Eine andere Möglichkeit wäre ein Fenster mit Hilfe von Panel zu "simulieren", da musst Du aber das ganze Verhalten eines Fensters, wie verschieben/verkleinern/vergrößern/schließen selbst erstellen.
    Dritter Vorschlag wäre einfach zwei Verschiedene Programme zu verwenden


Anmelden zum Antworten