AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Erkennen wenn Anwendung im Vordergrund

Ein Thema von arc · begonnen am 14. Aug 2011 · letzter Beitrag vom 14. Aug 2011
Antwort Antwort
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#1

Erkennen wenn Anwendung im Vordergrund

  Alt 14. Aug 2011, 15:46
Delphi-Version: 7
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!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Erkennen wenn Anwendung im Vordergrund

  Alt 14. Aug 2011, 15:55
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
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von ehX
ehX

Registriert seit: 11. Aug 2011
Ort: Augsburg
55 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Erkennen wenn Anwendung im Vordergrund

  Alt 14. Aug 2011, 15:56
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).
Fin
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Erkennen wenn Anwendung im Vordergrund

  Alt 14. Aug 2011, 16:06
OnPaint ist aber besser geeignet für Zeichenoperationen, da es immer dann ausgelöst wird, wenn neu gezeichnet werden muss.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Erkennen wenn Anwendung im Vordergrund

  Alt 14. Aug 2011, 16:06
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.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Erkennen wenn Anwendung im Vordergrund

  Alt 14. Aug 2011, 16:08
Du hast dir meinen Link nicht angeguckt richtig? Löse im Timer ein Repaint der Oberfläche aus.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von arc
arc

Registriert seit: 6. Nov 2009
Ort: Elbflorenz
62 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Erkennen wenn Anwendung im Vordergrund

  Alt 14. Aug 2011, 16:17
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;

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.
Miniaturansicht angehängter Grafiken
mb_mp.png  

Geändert von arc (14. Aug 2011 um 16:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Erkennen wenn Anwendung im Vordergrund

  Alt 14. Aug 2011, 16:23
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 05:39 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