![]() |
Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop
Nach einigem Herumgeteste habe ich eine für mich fast funktionierende Lösung gefunden, um ein Delphifenster über allen anderen externen Fenstern zu halten, da fsStayOnTop scheinbar nur innerhalb der eigenen Anwendung gilt.
Was sagt ihr dazu? Ist das ein ganz böser und dirty Hack oder brauchbar?
Delphi-Quellcode:
ForceForegroundWindow kommt von hier
TaskStayOnTop := TTask.Create(
procedure begin Sleep(5); while Bedingung do begin if FormStyle = fsStayOnTop then ForceForegroundWindow(Handle); end; end); TaskStayOnTop.Start; ![]() |
AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop
Gibt es einen Grund dafür das Du das brauchst?
Das fsStayOnTop nur auf die Application zielt, hat einen Sinn. Das System gehört dem Anwender und nicht Dir!!!!!! Wenn der aus welchen Gründen auch immer gerade was anderes machen will, so ist das sein Recht! Bei mir würde jede Anwendung die sich so verhält rausfliegen. |
AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop
Es handelt sich um ein kleines Statusfenster im Systembereich. Ob es oben gehalten werden soll oder nicht, kann der Nutzer selber entscheiden.
Aber wenn es oben gehalten werden soll, dann wirklich oben. Während das Fenster unten im Systembereich sichtbar ist, läuft ein Verarbeitungsprozess, den der Nutzer auch selber startet. |
AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop
Nun ja,
Das Hauptproblem ist wenn Du das Fenster nach vorne holst, wird eventuell auch der Focus auf dieses Fenster verschoben. Ich denke mal das es nicht ganz einfach ist, das so zu lösen da Windows selber das Konzept für Fenster so nicht kennt. Muss aber gestehen das sich für mich das Problem noch nie gestellt hat. So weit ich das überblicke ist es auch von der Windowsversion abhängig was da genau passiert bei ForceForegroundWindow, ich wäre da sehr vorsichtig... |
AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop
Wie machen es Produkte wie Avira oder andere Antiviren-Firmen denn?
Speziell Avira zeigt häufig Werbung an, die immer oben ist. |
AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop
HWND_TOPMOST ?
HWND_TOP = fsStayOnTop gruss |
AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); und SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); hab ich schon durch. Funktioniert leider genau so wenig wie fsStayOnTop.
|
AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop
tja wenn man die Anwendung in den Hintergrund setzt dann nicht Richtig! (HWND_NOTOPMOST)
Dachte eigentlich du wolltest das Gegenteil erreichen. ![]() gruss |
AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop
Ich weiß nicht wovon du schreibst.
Ich habe einen Button wo ich hin- und herwechseln kann. Entweder immer vorne oder nicht. |
AW: Form wirklich oben halten, Alternative zu FormStyle fsStayOnTop
Ich nutze dafür folgende Funktion
Delphi-Quellcode:
Aufgerufen z.B. mit
function SetWindowAlwaysOnTop(const AForm: TForm; AOnTop: Boolean): Boolean;
var Lattr: HWND; begin if AOnTop then Lattr:= HWND_TOPMOST else Lattr:= HWND_NOTOPMOST; Result:= SetWindowPos(AForm.Handle, // handle to window Lattr, // placement-order handle {*} AForm.Left, // horizontal position AForm.Top, // vertical position AForm.Width, AForm.Height, // window-positioning options SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); end;
Delphi-Quellcode:
wird dieses Fenster im Vordergrund gehalten. Natürlich kann es von anderen Fenstern, die ebenfalls TOPMOST sind, überdeckt werden, aber das ist ja klar und wohl bekannt.
SetWindowAlwaysOnTop(Self, True);
Grüße Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz