![]() |
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! |
AW: Erkennen wenn Anwendung im Vordergrund
Löse das Zeichen im OnPaint Ereignis deines Formulars aus. Am besten mit einem Puffer im Speicher:
![]() |
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). |
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.
|
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. |
AW: Erkennen wenn Anwendung im Vordergrund
Du hast dir meinen Link nicht angeguckt richtig? Löse im Timer ein Repaint der Oberfläche aus.
|
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:
Und irgendwo zuweisen, z.B. im onCreate
procedure TForm_Main.ApplicationActivate(Sender: TObject);
begin global_screen_update:=true; end;
Code:
procedure TForm_Main.FormCreate(Sender: TObject);
begin Application.OnActivate:=ApplicationActivate; end; Zitat:
|
AW: Erkennen wenn Anwendung im Vordergrund
Zitat:
|
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