2 Fenster, ein Programm



  • Ich möchte ein Programm schreiben, dass von vorn herein zwei Fenster öffnet. Das eine dient zur Anzeige (mit zusätzlich ein paar Konfigurationsmethoden), das andere ist das eigentlich Arbeitsfenster. Entscheident dabei ist, dass beide Fenster auf die Daten des jeweils anderen zugreifen müssen, außerdem müssen die Fenster auf unterschiedlichen Auflösungen laufen.
    Wie kann ich es realisieren, dass beim Programmaufruf automatisch zwei Formulare (ich arbeite mit Borland) geöffnet werden, beide Formulare aber ein und den selben Quelltext verwenden?



  • Wo ist denn dein Problem?
    Du musst doch dann nur 2 mal CreateWindow aufrufen...



  • heimchen schrieb:

    Wie kann ich es realisieren, dass beim Programmaufruf automatisch zwei Formulare (ich arbeite mit Borland) geöffnet werden, beide Formulare aber ein und den selben Quelltext verwenden?

    Naja du rufst einfach 2 Mal CreateWindow(Ex) auf, nämlich da, wo du normalerweise dein Hauptfenster erstellst. Ich würde dir allerdings empfehlen für dein 2.tes Fenster auch ne neue Fensterklasse zu registrieren, um in dem Zuge diesem auch eine eigenständige WndProc zu zuweisen.



  • Genau das hab ich getan, aber das zweite Fenster ist nicht aufgegangen.



  • heimchen schrieb:

    [...]das zweite Fenster ist nicht aufgegangen.

    Hast du ShowWindow aufgerufen bzw die entsprechenden Flags gesetzt ?

    Falls ja, was sagt GetLastError ?



  • Also, ich hab was probiert, aber es hat nicht geklappt und bevor ich jetzt weiter experimentiere und nacher mein programm zerstöre, hier mal die WinMain:

    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
      try
      {
        Application->Initialize();
        Application->CreateForm(__classid(TFMeldungen), &FMeldungen);
        Application->CreateForm(__classid(TForm2), &Form2);
        Application->Run();
      }
      catch (Exception &exception)
      {
        Application->ShowException(&exception);
      }
      catch (...)
      {
        try
        {
          throw Exception("");
        }
        catch (Exception &exception)
        {
          Application->ShowException(&exception);
        }
      }
      return 0;
    }
    

    An welcher Stelle soll jetzt was rein?

    Ach ja, kleiner Zusatz: Ändere ich die Reihenfolge von CreateForm, wird mein 2. Formular angezeigt.



  • Ich kann mir nicht helfen aber das sieht irgendwie nach Borland C++ Builder aus ^^ :p

    Starte das 2. Fenster einfach im Konstruktor von dem ersten Fenster 😉

    BR
    Vinzenz



  • heimchen schrieb:

    Wie kann ich es realisieren, dass beim Programmaufruf automatisch zwei Formulare (ich arbeite mit Borland) ...

    Wie gesagt... 😉
    Das habe ich getan, dann läuft allerdings mein Programm nicht mehr, Zugriffsverlätzung in sowieso. Oder ich hab es verkehrt gemacht. Wie öffne ich denn ein Formular z.B. in einer onClick-Funktion von nem Button?



  • hola

    in Projekt/Optionen/Formulare setze deine 2te form in 'Verfügbare Formulare' rein.

    im konstruktor von form1:

    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
       Form2 = new TForm2(this);
    }
    //---------------------------------------------------------------------------
    

    danach im onCreate-event von Form1:

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

    und beim beenden des programms nicht vergessen:

    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
       delete Form2;
    }
    //---------------------------------------------------------------------------
    

    Meep Meep



  • Das funktioniert, unglaublich 😃
    Nehme ich denn jetzt mein CreateForm aus der WinMain raus oder muss das unbedingt drin bleiben?
    Ach ja, die Methoden vom Form 2, rufe ich die im Form1 auf, oder lasse ich da die eigene cpp für?



  • heimchen schrieb:

    Das funktioniert, unglaublich 😃
    Nehme ich denn jetzt mein CreateForm aus der WinMain raus oder muss das unbedingt drin bleiben?
    Ach ja, die Methoden vom Form 2, rufe ich die im Form1 auf, oder lasse ich da die eigene cpp für?

    in der WinMain hast du nur einmal CreateForm drinnen, naemlich des ersten Forms.
    die 2te CreateForm sollte automatisch geloescht werden wenn du unter
    Projekt/Optionen/Formulare deine 2te form in 'Verfügbare Formulare' verschiebst.
    deinen letzten satz versteh ich jetz inhaltlich nocht. wie meinst das ?

    Meep Meep



  • Ich hab ja im Form2 Buttons, die gedrückt werden können. Die zugehörigen Methoden, schreibe ich die in Unit2 oder in Unit1? Ich frage deswegen, weil die gemeinsame Funktionen haben, sprich Aktionen im einem Form lösen was im zweiten Form aus. Aber ich könnte natürlich die Unit2 einfach in 1 includen. Die Idee... 😮

    Dann aber noch was, wo ich grad dabei bin: Ich muss ja in der Unit1 die Unit2.h includen, damit ich das Form aufrufen kann. Im Form2 will ich aber auch auf Variablen und Methoden vom Form1 zugreifen, include ich also Unit1.h auch in Unit2 (doppelt gemoppelt), oder gibt das dann Probleme?


Anmelden zum Antworten