Hauptformular minimieren ohne andere Fenster ebenfalls zu minimieren



  • Mahlzeit!

    Wenn ich das Hauptformular minimiere ist es ja üblich, dass die Unterformulare ebenfalls minimiert werden.
    Ich möchte allerdings, dass alle anderen, aber insbesondere mein 2.Formular unverändert bleibt und sich nur das Hauptfenster minimiert.

    Im Forum bin ich hier auf diesen Eintrag gestoßen:
    https://www.c-plusplus.net/forum/topic/130629/form1-minimieren-und-andere-form-anzeigen/2

    Der sagt eigentlich genau das aus, was ich auch möchte. Allerdings werde ich aus der Lösung nicht schlau, da es eben nicht die Lösung für das Problem ist.

    Folgendes habe ich bereits versucht:

    • im ApplicationEvents Objekt über das OnMessage Ereignis:
    void __fastcall TForm1::ApplicationEventsMessage(tagMSG &Msg, bool &Handled)
    {
     if ((Msg.message == WM_SYSCOMMAND) && (Msg.wParam == SC_MINIMIZE))
     {
       if (Form2->Visible == true)
      {
    	Form1->Visible = false;
    	Handled = true;
      }
     }
    }
    
    • im ApplicationEvents Objekt über das OnMinimize Ereignis:
    void __fastcall TForm1::ApplicationEventsMinimize(TObject *Sender)
    {
    	if (Form2->Visible == true)
    	{
    		Form1->WindowState = wsNormal;
    		Form2->Show();
    		Form1->Visible = false;
    	}
    }
    

    Probleme:

    • die WM_SYSCOMMAND kommt nur, wenn der Nutzer über das Kontextmenü "Minimieren" auswählt, nicht aber wenn der Minimieren-Button in der Titelleiste gedrückt wird, obwohl Microsoft ja dazu sagt:
      "A window receives this message when the user chooses a command from the Window menu (formerly known as the system or control menu) or when the user chooses the maximize button, minimize button, restore button, or close button."
    • habe dann mal versucht, die WM_SIZE abzufangen, aber die krieg ich nicht im ApplicationEvents Objekt, da sie wohl an der Warteschlange vorbei geschickt wird (wenn ich das richtig verstanden habe). Außerdem wird die ja auch erst gesendet, nachdem das Minimieren abgeschlossen ist
    • außerdem hat das Form1->Visible = false zur Folge, dass das Symbol aus der Taskleiste verschwindet, weshalb ich es lieber über den WindowState machen würde, nur dann minimiert sich ja wieder alles
    • das OnMinimize Ereignis tritt zwar wenigstens ein, wenn der Nutzer den Minimieren-Button drückt, allerdings ist das ja schon zu spät, weil das Fenster ja bereits minimiert wurde. Daher passiert bei dem zweiten Code wohl auch nichts.

    Hoffe ihr könnt mir da auf die richtige Fährte verhelfen. 🙂



  • Füge eine Form hinzu mit der Ausdehnung 0,0 und mache diese zu deiner Mainform.


Log in to reply