Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Di 11.05.10 15:37 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 11.05.10 15:49 
so ?
ausblenden Delphi-Quelltext
1:
2:
3:
 FormStyle := fsStayOnTop;
 Application.ProcessMessages;
 FormStyle := fsNormal;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: 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 oder hier. Einer anderen Anwendung "einfach" den Focus zu klauen ging glaube ich nur bis Win2k.

Grüsse, Dirk
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 489
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: 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