AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Wenn Anwendung inaktiv, dann minimieren.
Thema durchsuchen
Ansicht
Themen-Optionen

Wenn Anwendung inaktiv, dann minimieren.

Ein Thema von Lostriga · begonnen am 24. Mär 2010 · letzter Beitrag vom 24. Mär 2010
Antwort Antwort
Lostriga

Registriert seit: 14. Jun 2008
28 Beiträge
 
#1

Wenn Anwendung inaktiv, dann minimieren.

  Alt 24. Mär 2010, 08:38
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 Anleitung von alcaeus verwendet, danke im nachhinein.
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
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

Re: Wenn Anwendung inaktiv, dann minimieren.

  Alt 24. Mär 2010, 12:03
Bastel dir doch einen Timer in deine Anwendung und guckst ob die Application.Active false ist.
Lars
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Wenn Anwendung inaktiv, dann minimieren.

  Alt 24. Mär 2010, 12:18
Delphi-Quellcode:

procedure TBlub.MinimizeMyApp(Sender: Tobject);
begin
  ...
end;
  ...

Application.OnDeactivate := MinimizeMyApp;
...
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#4

Re: Wenn Anwendung inaktiv, dann minimieren.

  Alt 24. Mär 2010, 12:29
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Lostriga

Registriert seit: 14. Jun 2008
28 Beiträge
 
#5

Re: Wenn Anwendung inaktiv, dann minimieren.

  Alt 24. Mär 2010, 16:09
Aloa,

danke für die Antworten.

Ich habe es mal so versucht:
Delphi-Quellcode:
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.
Das mit dem minimieren, wenn die Anwendung inaktiv ist, funktioniert soweit.
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
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Wenn Anwendung inaktiv, dann minimieren.

  Alt 24. Mär 2010, 16:28
Wozu das Sleep im Timer??
Doppelt gemoppelt ist besser??

TTimer auf Interval = 10000 stellen

Delphi-Quellcode:
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.
Ungetestet
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Lostriga

Registriert seit: 14. Jun 2008
28 Beiträge
 
#7

Re: Wenn Anwendung inaktiv, dann minimieren.

  Alt 24. Mär 2010, 17:33
Aloa,

lbccaleb du bist mein Held des Tages.
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz