Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anwendung minimiert ? (https://www.delphipraxis.net/87632-anwendung-minimiert.html)

Nils_13 3. Mär 2007 13:22


Anwendung minimiert ?
 
Hi,

ich möchte mit folgender If-Abfrage herausfinden, ob meine Anwendung minimiert ist und wenn ja etwas machen.
Delphi-Quellcode:
if (GetWindowLong(wnd, GWL_EXSTYLE) and WS_MINIMIZE) = 0 then
Die If-Abfrage trifft allerdings immer zu, also auch wenn die Anwendung nicht minimiert ist.

Warum ? Geht es überhaupt auf diese Art und Weise, wenn nein, wie dann ?

Christian Seehase 3. Mär 2007 13:53

Re: Anwendung minimiert ?
 
Moin Nils,

so kann es schon mal nicht gehen.
Mit GWL_EXSTYLE liest man die WS_EX_xxx und nicht die WS_xxx Werte aus, ausserdem müsstest Du nicht auf = 0, sondern auf = angegebener Style testen.
Dein Beispiel müsste also lauten

Delphi-Quellcode:
if (GetWindowLong(hWnd,GWL_STYLE) and WS_MINIMIZE) = WS_MINIMIZE then
Da hiermit aber nicht der aktuelle Zustand abgefragt, sondern wie das Fenster initial dargestellt wird, nutzt Dir das auch nichts.

Die Funktion die Du suchst heisst schlicht MSDN-Library durchsuchenIsIconic

Nils_13 3. Mär 2007 14:10

Re: Anwendung minimiert ?
 
Zitat:

If the window is iconic, the return value is nonzero.

If the window is not iconic, the return value is zero.
Zitat:

Wenn die Anwendung minimiert ist, dann ist das Ergebnis <> 0

Wenn die Anwendung nicht minimiert ist, dann ist das Ergebnis 0
Dann müsste es ja so funktionieren:
Delphi-Quellcode:
var wnd : HWND;
    i  : Integer;
begin
  if IsIconic(wnd) then
  begin
    m.Lines.Add(IntToStr(i));
    inc(i);
  end;
Es passiert allerdings nichts. Woran könnte es liegen ?

Blackheart 3. Mär 2007 14:20

Re: Anwendung minimiert ?
 
Delphi-Quellcode:
public
   procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.WMSysCommand;
begin
  if (Msg.CmdType = SC_MINIMIZE) then ShowMessage('Klein');
  if (Msg.CmdType = SC_MAXIMIZE) then ShowMessage('Groß');
  DefaultHandler(Msg);
end;

Nils_13 3. Mär 2007 14:24

Re: Anwendung minimiert ?
 
Diese Methode ist nicht allgemein genug, da diese Message nur eintritt, wenn man auf den Minimier-Button klickt. Bei der Taskleiste funktioniert es dann schon wieder nicht.

turboPASCAL 3. Mär 2007 14:27

Re: Anwendung minimiert ?
 
Was willst du tun, prüfen der Form oder der Application ?

Nils_13 3. Mär 2007 14:29

Re: Anwendung minimiert ?
 
Eigentlich Application, da schließlich die gesamte Anwendung in Tray minimiert wird und ich deshalb wissen muss, ob diese minimiert ist oder nicht.

turboPASCAL 3. Mär 2007 15:08

Re: Anwendung minimiert ?
 
Anwendung in Tray... also in die TNA oder in die Taskleiste ?

Abfrage, hier mal mit einem Timer, der Application:
Delphi-Quellcode:
procedure TFormX.TimerXTimer(Sender: TObject);
begin
  if isIconic(Application.Handle)
    then Application.Title := 'Minimiert'
    else Application.Title := 'nicht Minimiert';
end;
Eine weitere Möglichkeit sind die Applications Events. Delphi-Referenz durchsuchenTApplicationEvents OnMinimize OnRestore

Nils_13 3. Mär 2007 15:15

Re: Anwendung minimiert ?
 
Genau das habe ich gesucht. Danke! :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:09 Uhr.

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