Entwickler-Ecke

Windows API - Anwendung in den Fordergrund stellen


Peter18 - Di 11.05.10 15:37
Titel: Anwendung in den Fordergrund stellen
Ein freundliches Hallo an alle,

ich möchte ein Formular, in den Vordergrund stellen. Nach einer durch Timer (testweise) erzeugten Verzögerung soll das Formular eine Meldung anzeigen. Wenn man jedoch eine andere Anwendung startet, liegt das Fenster dahinter. Mein Versuch mit der API-Funktion "SetFocus" das Meldefenster in den Vordergrund zu stellen ist genauso fehlgeschlagen wie der Versuch mit "Application.BringToFront". :roll: :?:

Kennt jemand einen Weg das Problem zu lösen?

Meinen Dank an alle die zu helfen versuchen.

Grüße von der teils sonnigen Nordsee
Peter


bummi - Di 11.05.10 15:49

so ?

Delphi-Quelltext
1:
2:
3:
 FormStyle := fsStayOnTop;
 Application.ProcessMessages;
 FormStyle := fsNormal;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Peter18 - Di 11.05.10 17:20

Hallo bummi,

es war einen Versuch wert, aber hat nicht geklappt. Wenn eine andere Anwendung gestartet wird, wenn der Timer läuft, so erscheint das Meldefenster hinter dieser Anwendung!

Trotzdem Danke und Grüße von der Nordsee
Peter

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Hallo bummi,

Ich habe einen interessanten Effekt beobachtet: Wenn der Timer das 1. Mal abgelaufen ist bleibt das Fenster hinter der Anwendung, beim 2. Mal springt es davor.

Woran kann das liegen?

Grüße von der Nordsee
Peter


Tryer - Di 11.05.10 17:48

Kann es sein das es mit der Einstellung von Windows zu tun hat?
Das würde erklären das die Meldung nicht in den Vordergrund kommt, statt dessen würde nur das Symbol in der Taskleiste blinken.
Die Einstellung kann z.B. mit den Powertoys (TweakUi) (->General->Focus) verändert werden ("Prevent applications from stealing Focus" deaktivieren) - das würde die Theorie bestätigen, wäre aber natürlich keine vernünftige Lösung des Problems.

Mehr dazu ggf. hier [http://msdn.microsoft.com/en-us/library/ms633539%28VS.85%29.aspx] oder hier [http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx]. Einer anderen Anwendung "einfach" den Focus zu klauen ging glaube ich nur bis Win2k.

Grüsse, Dirk


Peter18 - Di 11.05.10 18:13

Hallo Dirk,

hört sich interessant an. Leider schaffe ich es heute und morgen nicht das zu prüfen. Ich hoffe Do. kann ich noch mal beigehen. Werde dann berichten. Danke erst mal.

Grüße von der Nordsee
Peter

------------------------------------------------------------------------------

Hallo Dirk,

leider waren die Versuche bisher nicht von Erfolg gekrönt. Alles führte stets zu dem Ergebnis: Das Fenster bleibt hinter dem aktiven. Auch "LockSetForegroundWindow" konnte nichts ändern. Es muß aber einen Weg geben, denn der Debugger springt in den Fordergrund wenn er einen Breakpoint erreicht. Wär schon gut eine Alarmmeldung in den Vordergrund zu stellen.

Was ich noch nicht getestet habe ist allerdings unter "Prevent applications from stealing Focus" vollständig zu deaktivieren und einen Neustart durchzuführen.

Grüße von der Nordsee
Peter