Autor Beitrag
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 22.08.03 13:49 
meine Anwendung in den Vordergrund bringen?

Oft wird die Frage gestellt wie man die eigene Anwendung oder besser gesagt das Hauptfenster der Anwendung in den Vordergrund bringt. Genauso oft wird Application.BringToFront oder SetForegroundWindow als Antwort genannt. Diese Methoden sind nicht falsch nur haben sie den kleinen Nebeneffekt das seit Windows 98 nur noch der entsprechende Button in der Taskleiste blinkt und das Hauptfenster tortzdem im Hintergrund bleibt.

Die folgende Procedure setzt vorher den Eingabefokus auf die Anwendung und ruft erst dann SetForegroundWindow auf.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
Procedure ShowApplication;
Var
  Thread1,
  Thread2: Cardinal;
Begin
  Thread1 := GetCurrentThreadId;
  Thread2 := GetWindowThreadProcessId (GetForegroundWindow, nil);
  AttachThreadInput (Thread1, Thread2, true);
  Try
    SetForegroundWindow (Application.Handle);
  Finally
    AttachThreadInput (Thread1, Thread2, false);
  End;
End;

Zum testen reicht es einfach eine normale Anwendung mit einem Timer (Interval auf ca. 5000 [~ 5 Sec.] stellen) zu erstellen und im OnTimer Event die Procedure ShowApplication aufzurufen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  ShowApplication;
end;

Moderiert von user profile iconjasocul: Beitrag geprüft am 16.05.2006
[meta]Vordergund[/meta]