Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Feststellen, ob Anwendung aktiv


Atreyu - Mi 21.11.07 15:20
Titel: Feststellen, ob Anwendung aktiv
Ich hab jetzt ne kleine Anwendung. Nun brauche ich einen Event, der getriggert wird, wenn der User von meiner Anwendung auf irgendwas anderes wechselt, bzw ob beim Klick zurück auf meine Anwendung diese gerade aktiv (im Vordergrund) ist oder nicht.
Irgendwie find ich da nix.


Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 21.11.2007 um 14:21


TProgger - Mi 21.11.07 15:41

von deinem HauptForm den Status abfragen?

Delphi-Quelltext
1:
if Self.Active then...                    

oder mal in den ApplicationEvents nachschauen, da gibts auch einige Events, die ausgelöst werden, wenn die Application deaktiviert wird.


Atreyu - Sa 24.11.07 23:13

Funktioniert leider nicht. Auch keiner der Tform events kann das irgendwie...


Delete - So 25.11.07 04:45
Titel: Re: Feststellen, ob Anwendung aktiv
Erkläre mal bitte etwas genauer, ich weiß nicht ob ich es richtig verstanden habe.

user profile iconAtreyu hat folgendes geschrieben:
... wenn der User von meiner Anwendung auf irgendwas anderes wechselt, bzw ob beim Klick zurück auf meine Anwendung diese gerade aktiv (im Vordergrund) ist oder nicht. ...

Wenn Du auf die Anwendung zurück klickst, dann war sie bestimmt nicht aktiv sondern wrid es in genau dem Moment, wo sie geklickt wird.

Ich vermute mal, Du möchtest herausfinden, ob beim Klick auf Deine Anwendung, diese Anwendung bereits aktiviert war. Ich weiß jetzt nicht genau welches Event Du benutzen musst. Aber sinnvoll wäre es z. B. eine boolsche Variable einzusetzen, die bei Deativierung der Anwendung auf False und bei Aktivierung auf True gestzt wird. Nun musst Du Deine Algorhythmen, die bei Aktivierung und Deaktivierung ausgeführt werden nur noch in eine IF-Struktur packen.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if Self.statActive = True then
begin
  Self.statActive := False;
  // ...
end
else
begin
  Self.statActive := True;
  // ...
end;


Ich hoffe, das hilft Dir weiter.


Atreyu - So 25.11.07 15:17

Leider nicht, das sind ja keine Events.

Also:

Ich hab mein Prog offen und beispielsweise Word, whatever. Meins ist aktiv. Dann klicke ich auf das Word Fenster. Meine Anwendung ist nun nicht aktiv, sondern Word. Meins arbeitet noch im Hintergrund aber ist nicht das aktive Proggy.

Ich brauche ein Event, dass erkennt, dass mein Prog gerade aktiv oder inaktiv geworden ist. Es muss doch einen Trigger dafür geben. Schliesslich muss WIndows ja auch die Taskbar (Farben, usw) verändern. Eine Variable kann ich selber setzen, aber ein Event sollte doch vorgegeben sein.


Sinspin - So 25.11.07 16:08

Warum es mit dem Form Events nicht geht weis ich nicht :?
Aber ich habe im Beispiel einfach mal für form1.OnActive und Form1.OnDeactivate ein Event erstellt. Und die beiden Handler dann auf die namensgleichen Events der Application Variable gehangen. Und siehe da es geht :wink:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.FormActivate(Sender: TObject);
begin
  Application.Title := 'Show';
end;

procedure TForm1.FormDeactivate(Sender: TObject);
begin
  Application.Title := 'Hide';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnActivate := FormActivate;
  Application.OnDeactivate := FormDeactivate;
end;


Atreyu - So 25.11.07 16:12

Hui, die Zeieln bei OnCreate hab ich nicht gehabt... ausprobieren!=)

Danke dir erstmal.


TProgger - So 25.11.07 17:21

Schau mal in deiner Komponentenpalette unter Zusätzlich, da gibts TApplicationEvents.
Pack dir das aufs Form und stöber im ObjectInspector mal die Eigenschaften durch und les die dazugehörigen Hilfetexte. Da ist sicher einiges dabei, was für dich in Frage kommt.


Atreyu - Mi 28.11.07 13:53

Stimmt, nur leider lassen diese Komponenten die StayOnTop-Eigenschaft meines Programmes noch schneller versinken.
Naja, ich werds wohl anders lösen.