Formulare erst zur Laufzeit erzeugen und anzeigen ?



  • Hi,

    hab eine software im einsatzt wo ich auf mein pannel immer die verschiedenen forms lade. nun ist die software aber auf knapp 20 formulare angewachsen und ich hab angst das die software nun zu lange laden könnte am anfang.

    kann ich ein solches fenster z.b. in einer funktion dynamisch generieren und löschen:

    z.b.

    function zeige(TForm *frm)
    {
    form mit namen frm erzeugen und anzeigen
    }

    function lösche(TForm *frm)
    {
    lösche form frm
    }

    am besten wäre dann noch wenn ich ihrgendwo global denn namen der aktuellen form speichern könnte. habt ihr sowas schonmal gemacht oder einen tipp für mich wie ich das anstellen kann ???



  • Klar, geht doch ganz einfach. Beispiel:

    TForm* form = new TForm(Application);
    form->SetBounds(0,0,300,300);
    TButton* but = new TButton(form);
    but->SetBounds(0,0,75,23);
    but->Caption = "OK";
    but->Parent = form;
    
    form->Show();
    

    Natürlich musst du den Speicher, den du angelegt hast, wieder freigeben.



  • wäre eine funktion wie diese denkbar oder geht sowas nicht ?

    TForm* zgrForm = NULL;
    
    void Formwechsel(TForm* frmName)
    {
      // wenn Zeiger bereits auf ein Formular zeigt visible auf false setzen
      if(zgrForm != NULL)
      {
        zgrForm->Visible = false;
        // alten Zeiger löschen wenn nötig
        delete zgrForm; // zeigt auf das mit new angelegte Formular
      }
    
      // zgrForm auf neues Formular zeigen lassen
      zgrForm = new frmName(this); // neu angelegten Zeiger auf zgrForm zeigen
      zgrForm->Parent = pnlMain;
      zgrForm->Visible = true;
    }
    
    // Aufruf der Funktion
    Formwechsel(TForm* Form1);
    


  • das problem welches ich habe ist das ich einfach nicht weis auf welchen button der user klickt um ein neues formular anzulegen.

    angenohmen ich habe 4 fenster:

    1
    2
    3
    4

    wenn 1 aktiv ist dann ist fenster 2,3,4 inaktiv, wenn fenster 2 aktiv ist dann ist fenster 1,3,4 inaktiv. sprich es kann immer nur ein aktives fenster geben. wärend ich z.b. fenster 1 offen habe auf 2 geklickt soll 1 geschlossen wund 2 angezeigt werden. die obere funktion ist mal nur eine idee von mir wie es ungefähr aussehen könnte aber so wie sie ist läuft sie nicht. ihr müsstet mir da ein bischen auf die sprünge helfen da ich in diesen bereich noch anfänger bin 😞

    für hilfe bin ich echt mega dankbar da ich mit diesen problem schon sehr lange kämpfe und keien anständige lösung finden kann ...



  • Wie wärs mit der Idee, mal im FAQ-Index (ganz oben auf der Thread übersicht) im Abschnitt "Komponenten benutzen" zu stöbern?

    -junix


Log in to reply