![]() |
Wenn Anwendung inaktiv, dann minimieren.
Aloa,
bin auch mal wieder hier mit einer kleinen Frage. Wie der Titel des Threads schon sagt, geht es mir um das minimieren einer inaktiven Anwendung. Zum minimieren habe ich folgende ![]() ![]() Aus dessen Demo´s nahm ich mir was ich brauchte und kombinierte das ein und andere. Meine CoolTrayIcon Funktion läuft wie folgt: - kein Task angezeigt in der Taskleiste (sowohl minmiert als auch maximiert) - ein CoolTrayIcon neben der Uhr - durch Klick auf dieses Icon wird die Anwendung sowohl minimiert als auch maximiert - mit rechts-Klick auf das Icon erscheint ein Popup Menü in dem Beenden zu wählen ist Mein Problem ist nun folgendes - ist die Anwendung inaktiv/im Hintergrund/nicht im Vordergrund soll diese automatisch minimiert werden Ich suche also: wenn Anwendung inaktiv/im Hintergrund/nicht im Vordergrund, dann minimieren. Bzw. soll einfach gemerkt werden wenn das geschieht, das minimieren bekomme ich dann auch selber hinein. Freu mich auf ein bisschen Hilfe und Danke schon mal. Mit freundlichem Gruß Lostriga |
Re: Wenn Anwendung inaktiv, dann minimieren.
Bastel dir doch einen Timer in deine Anwendung und guckst ob die Application.Active false ist.
|
Re: Wenn Anwendung inaktiv, dann minimieren.
Delphi-Quellcode:
procedure TBlub.MinimizeMyApp(Sender: Tobject); begin ... end; ... Application.OnDeactivate := MinimizeMyApp; ... |
Re: Wenn Anwendung inaktiv, dann minimieren.
Dann verschwindet aber die Anwendung sofort, auch wenn eine andere Anwendung sich nur mal kurz in den Fordergrund bringt (z.B. Virenscanner oder Firewall) oder man im Startmenü rumblättert.
Und mit einem Timmer rumzupollen ist auch nicht sonderlich schön. Eine Kombination wäre da schon angebrachter: Ich würde also in OnDeactivate einen Timer starten und in OnActivate stoppen. Wenn der Timer dann z.B. nach 15-30 Sekunden auslößt, dann ebenfalls den Timer stoppen (einmal auslösen reicht ja) und gleichzeitig die Anwendung minimieren. |
Re: Wenn Anwendung inaktiv, dann minimieren.
Aloa,
danke für die Antworten. Ich habe es mal so versucht:
Delphi-Quellcode:
Das mit dem minimieren, wenn die Anwendung inaktiv ist, funktioniert soweit.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure ApplicationActivate(Sender:TObject); //procedure ApplicationMinimize(Sender:TObject); procedure ApplicationDeactivate(Sender:TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Application.OnActivate := ApplicationActivate; //Application.OnMinimize := ApplicationMinimize; Application.OnDeactivate := ApplicationDeactivate; end; procedure TForm1.ApplicationActivate(Sender: TObject); begin Timer1.Enabled := False; end; //procedure TForm1.ApplicationMinimize(Sender: TObject); //begin //Timer1.Enabled := False; //end; procedure TForm1.ApplicationDeactivate(Sender: TObject); begin Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin //if Application.Minimize then //auch mit Application.OnMinimize versucht, aber bei beidem kommt eine Fehlermeldung // begin // Timer1.Enabled := False; // end // else begin sleep(10000); Application.Minimize; Timer1.Enabled := False; // end; end; end. Leider blockiert diese für die 10 Sekunden des Timers, welche als Verzögerung dienen soll. Desweiteren setzt der Timer auch ein, wenn ich die Anwendung direkt minimiere, wodurch dieses wiederum 10 Sekunden blockiert, was ja Irrsinn ist. Ich habe es versucht zu lösen in dem ich das in den Bemerkungen einfügte, bisher hat nicht funktioniert. Mit freundlichem Gruß Lostriga |
Re: Wenn Anwendung inaktiv, dann minimieren.
Wozu das Sleep im Timer??
Doppelt gemoppelt ist besser?? TTimer auf Interval = 10000 stellen
Delphi-Quellcode:
Ungetestet :)
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure ApplicationActivate(Sender:TObject); //procedure ApplicationMinimize(Sender:TObject); procedure ApplicationDeactivate(Sender:TObject); procedure Timer1Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Application.OnActivate := ApplicationActivate; Application.OnDeactivate := ApplicationDeactivate; end; procedure TForm1.ApplicationActivate(Sender: TObject); begin Timer1.Enabled := False; end; procedure TForm1.ApplicationDeactivate(Sender: TObject); begin if not (Form1.WindowState = wsMinimized) then Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; Application.Minimize; end; end. |
Re: Wenn Anwendung inaktiv, dann minimieren.
Aloa,
lbccaleb du bist mein Held des Tages. :thumb: Die Anwendung wird nun nicht mehr blockiert und funktioniert genau so wie sie soll. Ich danke dir für die Berichtigungen, und den anderen dreien für den Ansatz um mich auf den Weg zu bringen. Mit freundlichem Gruß Lostriga |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 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 by Thomas Breitkreuz