Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi WM_SIZE + SIZE_MINIMIZED geht nicht? (https://www.delphipraxis.net/6993-wm_size-size_minimized-geht-nicht.html)

mirage228 30. Jul 2003 15:36

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
 
Bei Delphi3 funktioniert es übrigens auch nicht......


mfG
mirage228

Alexander 30. Jul 2003 16:18

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
 
@Chakotay1308
Ohne VCL scheint es funktionieren:
Zitat:

Zitat von Mathias
Nach ein bisschen Rätselraten bei einem nonVCL-Programm habe ich das Problem nun mit WM_SIZE/SIZE_MINIMIZED lösen können. So wird auch auf den o.g. Sys-Hotkey reagiert, und das Programm verschwindet korrekt in der TNA.

Tja, und beim Versuch, das für die VCL umzusetzen, bin ich dann auf das obige Problem gestoßen. Vielleicht ist´s auch keins, sondern ich mache bloß irgendwo einen Fehler. Darum habe ich mal die beiden Beispiele (VCL und nonVCL) rangehangen.


Snoopy240871 30. Jul 2003 16:20

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
 
Hallo Mathias,


vielleicht hilft dir das weiter. Das funktioniert in meinem Programm einwandfrei:

private
procedure ApplicationMinimize(Sender: TObject);

beispielsweise im TForm1.FormCreate...

with Application do

OnMinimize:=ApplicationMinimize;

und anschließend kannst du die procedure im implementations Teil beliebig verwenden...

procedure TForm1.ApplicationMinimize(Sender: TObject);
begin
// hier Code was beim minimieren der Anwendung passieren soll
end;

entsprechendes geht auch für
procedure ApplicationRestore(Sender: TObject); (wiederherstellen)
procedure ApplicationActivate(Sender:TObject); (Aktivierung)

Gruß Martin.... :dancer:

MathiasSimmack 30. Jul 2003 17:18

Re: WM_SIZE + SIZE_MINIMIZED geht nicht?
 
Zitat:

Zitat von oki
Das heißt, dass wmSize beim minimieren nicht aufgerufen wird.

Doch, eigentlich schon (s. nonVCL-Demo).

Zitat:

Zitat von Chakotay1308
Unter Delphi (nonVCL) geht es nur sporadisch. D.h. beim normalen Minimieren funzt es und beim Win+M wieder nicht...

Das kann ich nicht bestätigen. Ich habe natürlich mein nonVCL-Beispiel (OnMinimize.dpr) mehrmals ausprobiert, und es verschwand immer in der TNA - egal, ob ich´s nun via Maus oder Systemmenü oder WIN+M minimiert habe.

Zitat:

Zitat von Snoopy240871
vielleicht hilft dir das weiter. [...]

Ich hatte mal so etwas ähnliches bei AUQ.de gepostet. Aber das entspricht der Idee mit WM_SYSCOMMAND/SC_MINIMIZE. Wenn ich das Programm mit der Maus oder dem Systemmenü minimiere, dann verschwindet es natürlich in der TNA. Aber wenn ich den Hotkey WIN+M benutze, dann wird es nur normal in die Startleiste minimiert.
Darum bin ich ja auf die Sache mit WM_SIZE/SIZE_MINIMIZED gekommen. Aber dennoch Danke für den Vorschlag. :)


@Motzi: Ich werde mir deine Komponente wohl mal ansehen müssen. Ich hab´s gerade mal so versucht:
Delphi-Quellcode:
var
  oldproc  : pointer;

function FormProc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): LRESULT;
  stdcall;
begin
  case uMsg of
    WM_SIZE:
      if(wp = SIZE_MINIMIZED) and
        (Shell_NotifyIcon(NIM_ADD,@NID)) then
      begin
        ShowWindow(Application.Handle,SW_HIDE);
        Result := 0;
        exit;
      end;
  end;

  Result := CallWindowProc(oldproc,wnd,uMsg,wp,lp);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  NID.wnd  := self.Handle;
  NID.hIcon := LoadIcon(hInstance,'DIABLO');

  oldproc  := pointer(SetWindowLong(self.Handle,GWL_WNDPROC,
    integer(@FormProc)));
end;
Ist zwar IMHO rein technisch mit dem Überschreiben der "WndProc" identisch (s. Code oben), nur halt auf dem Weg, den man normalerweise für API-Programme benutzt. Ergebnis: keine Wirkung ... es sei denn, ich benutze SIZE_MAXIMIZED ... :nerd:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz