Mehrere Fenster/Forms erstellen



  • Hallo

    Also ich will "einfach" während mein programm läuft und ich dann irgendwo draufklick ein neues Fenster erstellt wird. So hab irgendwas von MDI in der Borland hilfe rausgefunden, find ich aber irgendwie eigenartig und viel zu überpowert find ich...
    kann man das nicht irgendwie einfach:
    TForm Form2;
    Form2 = new TForm(
    ); so adurch den constructor bin ich aber noch nich ganz durchgestiegen... und das Beispiel aus der Hilfe will auch nich so richtig:

    WriteComponentResFile("Temp.dfm", Form1);
    
    Form2 = new TForm(Application,1);
    
    ReadComponentResFile("Temp.dfm", Form2);
    

    so wie ich das versteh es wird erst nen ressource file vom aktuellen bzw von form1 gemacht dann form2 angelegt und dann mit der ressource geladen wie form1 ausah, oder? naja beim read bleibts hängen wie das für mich ausieht?
    Also bitte helft mir, bzw ihr könnt mir auch nen ganz anderen weg vorschlagen 😃



  • hmm... wenn du schon weißt, was in dem 2. Fenster sein soll, geh doch hin und füge schon zur Entwicklungszeit ne 2. Form hinzu. Die ist standardmäßig unsichtbar. Klicke später irgendwo in Form 1 und sag dann entweder, Form2.visible = true... dann siehst du beide Formen und kannst beide anklicken, oder mach es über Form2.showModal()... dann muss das Fenster erst wieder geschlossen werden, wenn man auf Form1 zurück will... also ne Art Zwangsinfo/Zwangsauswahl.



  • ah ok, aber... wenn ich jetzt sagen wir dieses form mehrmals öffnen will, das is auf die art ja nur einmal da, aber sie hätten immer den selben inhalt sozusagen



  • also, du könntest ja die Labels oder so bei jedem Aufruf mit andren Captions belegen... aber du hättest aber nur eine weitere Form... oder du machst dir halt 3 und kannst dann die immer anzeigen.

    Wenn du aber die Form dynamisch erzeugen willst... versuchs mal hiermit:

    TForm* TForm2   = new TForm(Application);
    TForm2->Width   = 20;
    TForm2->Height  = 50;
    TForm2->Visible = true;
    

    wenn du das in nen Button machst, kannst du ganz viele Forms erstellen... sind dann aber alle noch leer... also müsstest du da auch die Labels dynamisch drauf erzeugen, richtig? Da stelle ich mir jetzt persönlich das Layouten schlimm vor... ich seh ja gar net, was ich mache...

    EDIT: Und so bekommst du dann auf deine neue Form2 ein dynamisch erstelltes Label.

    TLabel* TLabel1  = new TLabel(Application);
    TLabel1->Parent  = TForm2;
    TLabel1->Caption = "test";
    TLabel1->Top     = 50;
    TLabel1->Left    = 50;
    TLabel1->Visible = true;
    TLabel1->Width   = 40;
    TLabel1->Height  = 24;
    

    Also immer die Nummer des Labels erhöhen und du kannst ganz viele Labels drauf bekommen. Wenn du aber noch ne 3. Form willst, musst du dafür sorgen, dass die Funktion von oben noch mal eine Form erzeugt... auch mit ner andren Nummer... außerdem sollten die Formen global sein... sonst kannst du außerhalb der Button-Routine nicht mehr drauf zugreifen... zumindest wars bei mir so... sollte ich mich irren... möge man es in Anbetracht der späten Stunde mir verzeihen 🤡
    Aber ich glaube, du solltest später die Teile wieder frei geben... sonst belegen die dir unnötig Speicher.



  • Sleepy-01 schrieb:

    ah ok, aber... wenn ich jetzt sagen wir dieses form mehrmals öffnen will, das is auf die art ja nur einmal da, aber sie hätten immer den selben inhalt sozusagen

    dafür eignen sich Frames

    du erstellst einen Frame ganz normal wie ein Formular (Datei->Neu->Frame), ordnest alle gewünschten Komponenten an und kannst dann z.B. mit

    void __fastcall TMainForm::Button1Click(TObject *Sender)
    {
    TForm *Window = new TForm(this);
    Window->Position=poScreenCenter;
    Window->Caption=" Neues Fenster ";
    Window->Width = 800;
    Window->Height = 600;
    TFrame1 *Frame = new TFrame1(Window);
    Frame->Parent = Window;
    Frame->Align  = alClient;
    Window->Show(); 
    }
    

    das Frame in einem neuen Fenster öffnen



  • hm danke für die antowrten wert mal ein bischen rum probieren :D,

    edit: gut das mit den extra forms geht gut, frames werd ich au gleich ma testen,
    aber mal ne frage wenn ich nen neues frame erstell zählt das dann nicht als fenster und kann in der taskleiste als neues angezeigt werden?



  • Eine neue Form kann in der Taskleiste angezeigt werden. Sieh mal in die FAQ unter Forms. Da gibt es zwei Beiträge dazu.
    Frames werden ja auf einer Form platziert, sind also keine eigenen Fenster.



  • 😃 wie die FAQ immer wieder schön helfen kann, hab auch gleich andere interessante sachen gefunden, danke

    EDIT: hab ma meine gräßliche Rechtschreibung verbessert kann immer noch was drinnen sein aber immerhin macht der satz jetzt sinn^^


Anmelden zum Antworten