Ich kann eine Form mit "BringToFront" nach oben (on top) bekommen und mit "SendToBack" nach unten. Bei Windows heißen diese Eigenschaften "HWND_TOP" und "HWND_BOTTOM". Gibt es eine Property, wo man den Zustand abfragen kann?
Der Grund meiner Frage:
Wenn eine Form den Focus hat (HasFocus = true), heißt das nicht automatisch, dass es auch oben liegt. Denn es gibt die Property "Form.StayOnTop". Wenn man diese Property bei einer anderen Form gesetzt hat, dann liegt die andere Form über der betrachteten Form, trotzdem hat die Form darunter den Focus.
Ich weiß, dass ich das "zu Fuß" herausbekommen kann und ich weiß wie man das mit Windows APIs macht. Bei der "zu Fuß" Methode kann man über Application.Forms[] schauen, ob eine Form eine StayOnTop oder eine SystemStayOnTop Property hat. Wenn es keine solche Form gibt, dann bedeutet HasFocus, dass das Windows auch oben ist, andernfalls nicht.
ZOrder einer Form abfragen
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: ZOrder einer Form abfragen
Hi!
Die Variable Screen enthält eine Unmenge von Infos, u.a. auch über die ZOrder:
Damit müsstest Du auch ohne OS-Helferlein auskommen .
Winni
Die Variable Screen enthält eine Unmenge von Infos, u.a. auch über die ZOrder:
Code: Alles auswählen
property CustomFormZOrderCount: Integer read GetCustomFormZOrderCount;
property CustomFormsZOrdered[Index: Integer]: TCustomForm
read GetCustomFormsZOrdered; // lower index means on top
Winni
-
- Beiträge: 142
- Registriert: Sa 30. Jan 2010, 19:35
- OS, Lazarus, FPC: Linux64, Wiindows32, MacOS, Lazarus 1.8.2
- CPU-Target: xxBit
Re: ZOrder einer Form abfragen
OK, danke. Damit das Fenster selbst erfrägt, ob es innerhalb der Applikation zuoberst liegt, verwendet man also folgenden Vergleich:
Allerdings könnte dann immer noch ein Fenster eines anderen Programms drüber liegen. Wenn man zusätzlich den Focus abfrägt, dann wäre man schon relativ sicher, aber ganz sicher immer noch nicht.
Gäbe es auch eine Möglichkeit, nachzufragen, ob das Fenster komplett auf dem Bildschirm sichtbar ist und auch nicht ein Fenster von einem anderen Programm darüber liegt?
Ich habe für mein Programm eine Grafik-Beschleunigungsroutine eingebaut, die nur dann zum Einsatz kommen darf, wenn wirklich kein Fenster darüber liegt, weil sonst das fremde Fenster mitscrollt und neu gezeichnet wird.
Code: Alles auswählen
if Screen.CustomFormsZOrdered[0] = self then
{ich bin das oberste Fenster}
Gäbe es auch eine Möglichkeit, nachzufragen, ob das Fenster komplett auf dem Bildschirm sichtbar ist und auch nicht ein Fenster von einem anderen Programm darüber liegt?
Ich habe für mein Programm eine Grafik-Beschleunigungsroutine eingebaut, die nur dann zum Einsatz kommen darf, wenn wirklich kein Fenster darüber liegt, weil sonst das fremde Fenster mitscrollt und neu gezeichnet wird.
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: ZOrder einer Form abfragen
Hi!
TScreen hat auch noch
Mir ist allerdings nicht klar, ob die Reichweite für den gesamten Desktop gilt, oder nur für die eigene App.
Und falls immer noch ein fremdes Fenster scrollt, kannst Du das ja immer noch als Software-Gadget anbieten. Ist sowieso zu wenig Humor in der Software. Als ein Virus nix anderes tat, als die Y-Achse im Display zu flippen: alles auf dem Kopf....
Winni
TScreen hat auch noch
Code: Alles auswählen
property OnActiveFormChange: TNotifyEvent read FOnActiveFormChange
write FOnActiveFormChange;
Und falls immer noch ein fremdes Fenster scrollt, kannst Du das ja immer noch als Software-Gadget anbieten. Ist sowieso zu wenig Humor in der Software. Als ein Virus nix anderes tat, als die Y-Achse im Display zu flippen: alles auf dem Kopf....
Winni
-
- Beiträge: 582
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 3.8
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: ZOrder einer Form abfragen
Laut: http://docs.embarcadero.com/products/ra ... hange.html schon.Winni hat geschrieben: Sa 16. Mai 2020, 01:51 Mir ist allerdings nicht klar, ob die Reichweite für den gesamten Desktop gilt...
LG Maik
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 3.8 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)