Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Minimieren abfangen klappt jedoch nur 1x (https://www.delphipraxis.net/81256-minimieren-abfangen-klappt-jedoch-nur-1x.html)

Timi-loader 23. Nov 2006 14:31


Minimieren abfangen klappt jedoch nur 1x
 
hallo

unzwar habe ich son applicationevents und dort das ereignis onminimize mit folgendem code:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
application.ProcessMessages;
PostMessage(Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
application.ProcessMessages;
form1.Minimieren1Click(Sender);
end;
..in dem minimierenklick wird die form1.visible:=false gesetzt und dann das trayicon angezeigt. dies ist notwendig, da ich eine form6 habe die auch wenn das programm "minimiert" ist, angezeigt werden soll.

jo.. also es klappt gut mit dem minimieren beim ersten mal. dann klicke ich auf das icon und so stellt er form1 wieder sichtbar und auch zusätzlich nochmal ein PostMessage(Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
aber wenn man jetzt entweder auf das minimieren des fensters oder einfach in die taskleiste klickt passiert nichts. wenn ich mitm rechtsklick inner taskleiste auf die anwendung klicke sehe ich auch das minimieren deaktiviert. wiederherstellen dagegen kann ich klicken und ab dann gehts es wieder einmal.

aber ich dachte dieses SC_RESTORE ist wiederherstellen??
also irgendwas funktioniert da ebend nicht richtig mit dem wiederherstellen.

mfg
timi-loader

SirThornberry 23. Nov 2006 14:37

Re: Minimieren abfangen klappt jedoch nur 1x
 
oh, versuch lieber das WM_SYSCOMMAND direkt abzufangen.

Delphi-Quellcode:
type
  TForm1 = class(TForm)
  [...]
    procedure NoMinimize(var AMsg: TWMSysCommand); message WM_SYSCOMMAND;
[...]
procedure TForm1.NoMinimize(var AMsg: TWMSysCommand);
begin
  if AMsg.CmdType = SC_MINIMIZE then
    AMsg.Result := -1
  else
    inherited;      
end;
Noch sinnvoller ist jedoch einfach bei den BorderIcons das Minimieren auszublenden.

Timi-loader 23. Nov 2006 14:59

Re: Minimieren abfangen klappt jedoch nur 1x
 
hey cool!
danke für die schnelle und sehr gute antwort :)

klappt dann so schon ganz gut, aber wenn man in der taskleiste drauf klickt minimiert es sich immernoch wie normal.

und wegen ausblenden: minimierenbutton kann man zwar ausblenden in der titelleiste, aber die anwendung soll ja eh virtuell minimiert werden ;)(ebend nur anders)

mfg

SirThornberry 23. Nov 2006 15:07

Re: Minimieren abfangen klappt jedoch nur 1x
 
Der Grund liegt darin das dann direkt an Application.Handle das wm_syscommand geschickt wird. Ich guck mal schnell ob die Lösung die mir vorschwebt da geht.

So, die Variante mit der Message musst du lassen. Damit wird verhindert dass, das Form minimiert wird. Wenn du in der Taskleiste drauf klickst wird das Minimieren an die Anwendung geschickt und muss somit dort verhindert werden:
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
  if (Msg.hwnd = Application.Handle) and (Msg.message = WM_SYSCOMMAND) and (Msg.wParam = SC_MINIMIZE) then
    Handled := True;
end;

Timi-loader 23. Nov 2006 15:30

Re: Minimieren abfangen klappt jedoch nur 1x
 
ok jo das funzt dann auch.
..hab auch in die prozedure dann wieder mein minimieren1click reingetan und jop.

ein'n hab i noch^^

unzwar: dieses desktop-anzeigen-symbol bzw die funktion. kann man auch auf diese reagieren?
..ansich macht das nichts aus, da eh form6 beim ereignis trotzdem angezeigt wird, aber trotzdem wärs schön wenns einheitlich gehn würd :)

mfg
und thx

SirThornberry 23. Nov 2006 15:33

Re: Minimieren abfangen klappt jedoch nur 1x
 
Dieses "Desktop anzeigen" funktioniert anders und minimiert nicht. Dies hat den Vorteil das auch Programme in den Hintergrund wandern welche keinen Minimieren-Button haben. Letzendlich wird dabei nur der Desktop nach ganz vorn gebracht.

Timi-loader 23. Nov 2006 15:49

Re: Minimieren abfangen klappt jedoch nur 1x
 
aha ok.
na dann lass ich das ohne ereignis. ..findet der user ja evtl auch nicht so schön, wenn ein programm gleich in den tray wandert, wenn er nur den desktop sehen will^^

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 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