Ich kann mich nicht mehr genau erinnern warum ich das so gemacht habe, aber einen Versuch ist es sicherlich wert. Mein Fenster bleibt immer sichtbar, egal ob ich in der Anwendung bin oder nicht, bleibt aber immer in der gerade aktiven Anwendung mit dem Fokus stehen, zudem schließt es sich selbstständig nach einer gewissen Zeit.
Ich kopiere einfach mal den relevanten Teil hier rein:
Delphi-Quellcode:
procedure TfmShowAnrufer.FormHide(Sender: TObject);
begin
Timer2.Enabled := False;
Timer1.Enabled := False;
ShowWindow(
handle, SW_HIDE);
end;
procedure TfmShowAnrufer.FormShow(Sender: TObject);
begin
Left := Screen.WorkAreaLeft + Screen.WorkAreaWidth - Width;
Top := Screen.WorkAreaTop + Screen.WorkAreaHeight - Height;
Timer2.Enabled := True;
Timer1.Enabled := True;
Timer2Timer(
Nil);
// das müssen wir machen, damit das Fenster keinen Fokus bekommt
end;
procedure TfmShowAnrufer.Timer1Timer(Sender: TObject);
var
Merk : TWindowState;
begin // Fenster schließt sich nach einer gewissen Zeit automatisch
Timer2.Enabled := False;
If not Application.Active
then
begin
// diesen Workaround müssen wir machen, weil sonst nach ToggleDesktop das Fenster
// sichtbar bleibt und sich auch nicht manuell schlie0en läßt
Merk := Application.MainForm.WindowState;
Application.Minimize;
Application.Restore;
Close;
Application.MainForm.WindowState := Merk;
end else
begin
Close;
end;
end;
procedure TfmShowAnrufer.Timer2Timer(Sender: TObject);
begin
// den Aufstand müssen wir machen, da das Fenster sonst beim Minimieren, Deaktivieren
// oder ToggleDesktop verschwinden würde
Application.RestoreTopMosts;
ShowWindow(
handle, SW_SHOWNOACTIVATE);
end;