Problem mit Application->Minimize();



  • Wenn du die Zusatzform minimierst wird eben nur diese Form minimiert. Wenn du die ganze Anwendung ausblenden willst musst du die Hauptform minimireren bzw. das (unsichtbare) Application-Fenster (über das Menü des Taskbar-Buttons bzw. per Application->Minimize();).

    PS. Scheint ich bin heute dauernd zu langsam. 🙂



  • Danke Jansen.
    Das ist genau das Problem.
    Nur wie kann ich feststellen ob jetzt dieses "Nebenformular" minimiert wurde?
    Das OnMinimize von TApplicationEvents reagiert nämlich nicht darauf...



  • Kannst dich bei aaaabyx ruhig auch bedanken. 😉

    Du musst WM_SYSCOMMAND für das Fenster abfangen und bei SC_MINIMIZE deinen eigenen Code ausführen.

    // in .h
    private:	// User declarations
      void __fastcall WMSysCommand(TWMSysCommand &Msg);
      BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_SYSCOMMAND, TWMSysCommand, WMSysCommand)
      END_MESSAGE_MAP(TForm)
    
    // in .cpp
    void __fastcall TForm2::WMSysCommand(TWMSysCommand &Msg)
    {
      if (Msg.CmdType == SC_MINIMIZE)
        Application->Minimize();
      else
        TForm::Dispatch(&Msg);
    }
    

    Sieh in der FAQ mal im Abschnitt "System" nach, da wird das ausführlich erklärt.



  • Vielen Dank ihr beiden.
    Das klappt jetzt schonmal ganz gut so.
    Es gäbe da nur noch ein Porblem: Es soll in den SysTray minimiert werden.
    Ich benutze dazu die Componente aus "Beispiele".
    Wenn ich jetzt über das "Nebenfenster" minimiere, dann minimiert sich die App schön wie sie soll in die Taskbar. Klicke ich aber rechts auf das Feld in der Taskbar und wähle "Minimieren" so haut meine App in den SysTray ab - wie im "normalzustand".
    Ist es möglich, dass wenn ich über die "Neben-Form" minimiere die App auch in den Systray vesrchwinden lassen kann?
    danke



  • Vesuch mal statt

    Application->Minimize();
    

    folgendes:

    ShowWindow(Application->Handle, SW_MINIMIZE);
    

    oder

    ShowWindow(Application->MainForm, SW_MINIMIZE);
    

    Ich weiß ja nicht, worauf dieses TTeayIcon von Borland da reagiert.

    EDIT: Wenn ich nochmal drüber nachdenke, müsste das zweite funktionieren.



  • Scheiße, ich hatte meinen Namen noch nicht geändert... 🙄



  • ...so, jetzt aber! 😃 :p



  • Hi.
    Danke für die Mühe.
    WebFritzi:
    Das erste Beispiel hat den selben Effekt wie Application->Minimize();
    Das 2. Beispiel hab ich auch so schonmal getestet und herausgefunden, dass es die Minimizie-Schaltfläche quasi deaktiviert. Also keine Reaktion.



  • Dass noch keiner gemeckert hat, wundert mich. Das zweite "Beispiel" muss natürlich lauten:

    ShowWindow(Application->MainForm->Handle, SW_MINIMIZE);
    

    Oder wie wär's mit

    SendMessage(Application->MainForm->Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
    

    Wenn das alles nicht klappt, dann empfehle ich dir, statt der Borland-Kompo meine TTrayIcon-Kompo zu nutzen. Die ist etwas anders aufgebaut - und zwar so, dass jeder mit ihr zurechtkommt.



  • WebFritzi schrieb:

    Dass noch keiner gemeckert hat, wundert mich. Das zweite "Beispiel" muss natürlich lauten:

    ShowWindow(Application->MainForm->Handle, SW_MINIMIZE);
    

    Genau das habe ich auch getestet (ohne zu meckern 😉 aber das Resultat folgendes:
    Die Form bleibt weiterhin offen und nebenbei minimiert sich das Fenster oberhalb der Startleiste (wie oben schon einmal geschildert).

    WebFritzi schrieb:

    Oder wie wär's mit

    SendMessage(Application->MainForm->Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
    

    Wenn das alles nicht klappt, dann empfehle ich dir, statt der Borland-Kompo meine TTrayIcon-Kompo zu nutzen. Die ist etwas anders aufgebaut - und zwar so, dass jeder mit ihr zurechtkommt.

    Danke, letzteres funktioniert korrekt 🙂
    Ich habe mich mit SendMessage noch zuwenig auseinandergesetzt - sollte ich unbedingt nachholen 🙂



  • Jo, schau dir dazu mal in der FAQ den Artikel "Windows Messages" (oder so ähnlich) an.


Anmelden zum Antworten