Zitat von
oki:
Das heißt, dass wmSize beim minimieren nicht aufgerufen wird.
Doch, eigentlich schon (s.
nonVCL-Demo).
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 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 ...