Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   (VCL) Wie bekomme ich mit ob die Anwendumg minimiert oder wieder hergestellt wird? (https://www.delphipraxis.net/188750-vcl-wie-bekomme-ich-mit-ob-die-anwendumg-minimiert-oder-wieder-hergestellt-wird.html)

Der schöne Günther 4. Apr 2016 09:53

(VCL) Wie bekomme ich mit ob die Anwendumg minimiert oder wieder hergestellt wird?
 
Ja, die Events
Delphi-Quellcode:
OnMinimize
und
Delphi-Quellcode:
OnRestore
der globalen Application-Variable (bzw. der
Delphi-Quellcode:
TApplicationEvents
-Komponente) habe ich gesehen. Nur leider funktionieren die nur wenn man das Hauptformular minimiert/maximiert, nicht aber ein modales Fenster.

Ich stelle mich zu dumm an, da einen einfachen Ausweg zu finden. Wo muss ich ansetzen? Mir fällt nur Application.HookMainWindow ein. Damit schaffe ich es immerhin das Minimieren mitzubekommen, nicht aber das Maximieren.

Kann mich jemand in die richtige Richtung stupsen?

Daniel 4. Apr 2016 10:07

AW: (VCL) Wie bekomme ich mit ob die Anwendumg minimiert oder wieder hergestellt wird
 
Du könntest einen Handler für die Botschaft "WM_SIZE" schreiben und dann wie folgt das Minimieren abfragen:

Delphi-Quellcode:
  if (Msg.WParam = SIZE_MINIMIZED) then
  begin
    /// ach du weia...
  end;

Der schöne Günther 4. Apr 2016 10:12

AW: (VCL) Wie bekomme ich mit ob die Anwendumg minimiert oder wieder hergestellt wird
 
Danke für den Tipp, das klappt aber leider nicht. In der Theorie sollte es klappen, in der Praxis scheint es die VCL besser zu wissen und ich bekomme die Nachricht erst gar nicht. Zumindest wenn ich über "HookMainWindow" gehe.

Meine temporäre Lösung sieht jetzt so aus:

Delphi-Quellcode:
procedure TBaseForm.WMSysCommand(var msg: TWMSysCommand);
var
   isModal: Boolean;
begin
   isModal := Vcl.Forms.fsModal in FormState;

   case msg.CmdType of
      SC_RESTORE:
         if isModal then [...]
      SC_MINIMIZE:
         if isModal then [...]
   end;

   inherited;
end;
Das muss natürlich an jedes Formular dran. Sollte eine 3rd-Party Komponente ein VCL-Popup aufmachen bekomme ich Minimieren/Maximieren natürlich wieder nicht mit.

Kann das jemand so unterschreiben oder ist das Mist?

Daniel 4. Apr 2016 10:14

AW: (VCL) Wie bekomme ich mit ob die Anwendumg minimiert oder wieder hergestellt wird
 
Zumindest für XE8 funktioniert meine Lösung - allerdings nicht mit HookMainWindow, sondern über einen ganz normalen Ereignis-Hnadler:
Delphi-Quellcode:
procedure WMSize( var Msg : TMessage ); message WM_SIZE;
.

Der schöne Günther 4. Apr 2016 10:26

AW: (VCL) Wie bekomme ich mit ob die Anwendumg minimiert oder wieder hergestellt wird
 
Ok, gut zu wissen. Dann machen wir ja beide im Endeffekt das gleiche- Der eine über WM_SIZE, der andere über WM_SYSCOMMAND.

Ich sehe auch grade: Ich muss mir eigentlich nicht mehr viel Sorgen machen, denn Dinge wie fremde Modaldialoge (Speichern Unter-Dialog, ...) verhindern in der Regel eigentlich das Minimieren.

samso 4. Apr 2016 10:59

AW: (VCL) Wie bekomme ich mit ob die Anwendumg minimiert oder wieder hergestellt wird
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1334583)
... verhindern in der Regel eigentlich das Minimieren.

Ich habe in diesem Zusammenhang oft übersehen die Funktion "Desktop anzeigen" zu testen.

Der schöne Günther 4. Apr 2016 11:03

AW: (VCL) Wie bekomme ich mit ob die Anwendumg minimiert oder wieder hergestellt wird
 
Oh, der ist gut.

"Desktop anzeigen" ist streng genommen kein Minimieren. Der nimmt nur das Desktop-Fenster und legt es vor alle anderen. Für den Benutzer sieht es aber meist genauso aus wie "Alle minimieren".


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz