Problem mit Application->Minimize();
-
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.