Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Erkennen wenn Anwendung im Vordergrund (https://www.delphipraxis.net/162249-erkennen-wenn-anwendung-im-vordergrund.html)

arc 14. Aug 2011 15:46

Delphi-Version: 7

Erkennen wenn Anwendung im Vordergrund
 
Ich habe eine grafische Anwendung, die ereignisgesteuert eine Zeichenfläche aktualisiert. Wenn ich ein anderes Programm über meine Anwendung ziehe und dann per Taskleiste zurück zu meiner Anwendung wechsel, ist die Zeichenfläche mit grau gefüllt, man kann auch lustige Muster erzeugen indem man das andere Programm drüberzieht.

Das ist nicht so schlimm, ich möchte aber die Zeichenfläche aktualisieren, wenn zurück zu meiner Anwendung gewechselt wird, also erkennen können ob sie im Vordergrund oder Hintergrund läuft.

Ich bin mir sicher, daß die Frage bereits gestellt wurde, könnt ihr mir bitte einen Tip geben wo ich nachlesen kann? Danke!

Luckie 14. Aug 2011 15:55

AW: Erkennen wenn Anwendung im Vordergrund
 
Löse das Zeichen im OnPaint Ereignis deines Formulars aus. Am besten mit einem Puffer im Speicher: http://www.michael-puff.de/Programmi...enBitmap.shtml

ehX 14. Aug 2011 15:56

AW: Erkennen wenn Anwendung im Vordergrund
 
Ich glaube, du suchst das FormActivate-Ereignis deiner Hauptform.
Das wird immer dann ausgelöst, wenn dein Fenster den Focus erhält und ihn vorher nicht hatte.
=> Einfach im Objektinspektor unter "Ereignisse" FormActivate doppelklicken und die Ereignissroutine dann im Event-Handler schreiben (neu zeichnen).

Luckie 14. Aug 2011 16:06

AW: Erkennen wenn Anwendung im Vordergrund
 
OnPaint ist aber besser geeignet für Zeichenoperationen, da es immer dann ausgelöst wird, wenn neu gezeichnet werden muss.

arc 14. Aug 2011 16:06

AW: Erkennen wenn Anwendung im Vordergrund
 
Gerade getestet, onActivate löst aus wenn das Formular erzeugt wird. Wechsel ich von einer anderen Anwendung zurück zum Formular, dann wird das Ereignis nicht ausgelöst.

Hilfe sagt auch wieso: "Note: The OnActivate event of the application (TApplication), not the form, occurs when Windows switches control from another application."

Ganz blöde Frage, wie kann ich mich an das Event von TApplication ranhängen? Also einen event handler zuweisen? Danke!

PS: Mit onPaint möchte ich nicht arbeiten, da ein Timer die Aktualisierung der Zeichenfläche übernimmt. Parallel dazu gibt es eine Variable Screen_Update die von der Anwendung auf true gesetzt werden muß, damit der Timercode auch ausgeführt wird. Damit begrenze ich die Framerate nach oben hin und vermeide unnötiges Refreshen. Deshalb benötige ich das Ereignisfür den Fall, daß die Anwendung wieder den Fokus bekommt. Dann wird Screen_Update gesetzt und einmal im Timer Zyklus refresht.

Luckie 14. Aug 2011 16:08

AW: Erkennen wenn Anwendung im Vordergrund
 
Du hast dir meinen Link nicht angeguckt richtig? Löse im Timer ein Repaint der Oberfläche aus.

arc 14. Aug 2011 16:17

AW: Erkennen wenn Anwendung im Vordergrund
 
Liste der Anhänge anzeigen (Anzahl: 1)
Problem gelöst, danke für die Hinweise!

Die Lösung ist einfach. Eine neue Methode anlegen z.B.

Code:
procedure TForm_Main.ApplicationActivate(Sender: TObject);
begin
  global_screen_update:=true;
end;
Und irgendwo zuweisen, z.B. im onCreate

Code:
procedure TForm_Main.FormCreate(Sender: TObject);
begin
  Application.OnActivate:=ApplicationActivate;
end;

Zitat:

Zitat von Luckie (Beitrag 1116795)
Du hast dir meinen Link nicht angeguckt richtig? Löse im Timer ein Repaint der Oberfläche aus.

Ich arbeite mit Asphyre eXtreme, einem DirectX Framework. Die Oberfläche ist lediglich ein Container für das DirectDraw Surface.

Luckie 14. Aug 2011 16:23

AW: Erkennen wenn Anwendung im Vordergrund
 
Zitat:

Zitat von arc (Beitrag 1116797)
Ich arbeite mit Asphyre eXtreme, einem DirectX Framework. Die Oberfläche ist lediglich ein Container für das DirectDraw Surface.

Meinst du nicht auch, dass solche wichtigen Informationen in den ersten Beitrag gehören?


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