Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Antworten
PeterS
Beiträge: 196
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von PeterS »

Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Moin,

das Thema "Windows Taskbar Höhe" ist eng verknüpft mit der Frage,
wie kann ich ein Fenster exakt auf dem Desktop positionieren.
Ohne daß der untere Rand des Fensters von der Windows Taskbar verdeckt wird.
Oder daß das Fenster noch eine Lücke läßt zur Windows Taskbar.

Für mich ist das wichtig weil eins meiner Programm zwei Child-Fenster hat,
die ich übereinander auf den Desktop positioniere, wenn man sie öffnet.
Da beide Fenster ein TAChart enthalten, möchte ich den maximalen Platz auf dem Desktop nutzen.

Mir war lange nicht ganz klar daß + warum die Variablen

Code: Alles auswählen

Self.Height
Self.ClientHeight
eines Fensters denselben Wert annehmen. Muss ich so hinnehmen, also muss ein "Workaround" her.
Die reale Höhe eines Fensters auf dem Desktop ist um etliche Pixel höher/größer als Self.Height.

Daher habe ich mir das ganze jetzt mal genau angeschaut und ein TestProjekt "RealWindowHeight" gebaut:
.
RealWindowHeight 01.png
RealWindowHeight 01.png (164.6 KiB) 299 mal betrachtet
Zuletzt geändert von PeterS am Sa 21. Mär 2026, 11:44, insgesamt 4-mal geändert.

PeterS
Beiträge: 196
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von PeterS »

Hier im Anhang ist mein Testprojekt.
Funktioniert mit Scaling 125% und mit normalen + bsDialog Fenstern.
Dateianhänge
RealWindowHeight 02.zip
(103.61 KiB) 6-mal heruntergeladen
Zuletzt geändert von PeterS am Sa 21. Mär 2026, 11:50, insgesamt 2-mal geändert.

PeterS
Beiträge: 196
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von PeterS »

Ärgerlich ist, daß bei 125%-Skalierung in Windows
die linken Fenster etliche Pixel weiter rechts stehen auf dem Desktop,
obwohl ich "Self.Left:= 0" vorgebe .. :(

Das scheint ein Windows-11-Problem zu sein.
Zuletzt geändert von PeterS am Sa 21. Mär 2026, 14:58, insgesamt 1-mal geändert.

PeterS
Beiträge: 196
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von PeterS »

Um die echte Höhe eines Fensters zu erreichen, benutze ich die folgende Funktion.
TargetHeight ist dabei die Höhe, die das Fenster tatsächlich haben soll.
Das Ergebnis der Funktion weise ich dann Self.Height zu.

Code: Alles auswählen

function GetWindowHeightValue( TargetHeight:integer; Form:TForm):integer;
begin
  result:= TargetHeight
           -LCLIntf.GetSystemMetrics( SM_CYCAPTION);

  if Form.BorderStyle = bsDialog
    then result:= result -LCLIntf.GetSystemMetrics( SM_CYFIXEDFRAME)
    else result:= result -LCLIntf.GetSystemMetrics( SM_CYSIZEFRAME);

  if assigned( Form.Menu)
    then result:= result -LCLIntf.GetSystemMetrics( SM_CYMENU);
end;
Da fehlen aber noch ein paar ungetestete "Form.BorderStyle" Varianten ..
Hat sich da schonmal jemand durchgekämpft ?

Soner
Beiträge: 782
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von Soner »

Screen.WorkAreaHeight und Screen.WorkAreaWidth is doch was du möchtest.
Wenn du dein Fenster übereinander haben möchtest, dann muss du einfach das tun:

Code: Alles auswählen

Fenster1.Top:=0; 
Fenster1.Height:=Screen.WorkAreaHeight div 2;
Fenster2.Top:=(Screen.WorkAreaHeight div 2)+1
Fenster2.Height:=Screen.WorkAreaHeight div 2;
Ich habe kontrolliert, Screen.WorkAreaHeight hat anderen Wert je nach Skalierung und ob Taskbar automatisch unsichtbar ist, was bei mir der Fall ist.

PeterS
Beiträge: 196
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von PeterS »

Hast Du Deinen Code getestet ?

Soner
Beiträge: 782
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von Soner »

PeterS hat geschrieben: Sa 21. Mär 2026, 12:33 Hast Du Deinen Code getestet ?
Ja, sonst hätte ich es nicht gepostet.

PeterS
Beiträge: 196
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von PeterS »

Soner hat geschrieben: Sa 21. Mär 2026, 12:41
PeterS hat geschrieben: Sa 21. Mär 2026, 12:33 Hast Du Deinen Code getestet ?
Ja, sonst hätte ich es nicht gepostet.
Wie verhält er sich wenn Du
- ein HauptMenü in die Form einbaust ?
- Scaling in Windows änderst ? (=> Anzeigeeinstellungen)
- FormStyle änderst ?

PeterS
Beiträge: 196
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von PeterS »

Ich habe mit Deinem Code zwei weitere Fenster eingebaut.
Sieht nicht gut aus.
.
FormNew.png
FormNew.png (185.61 KiB) 250 mal betrachtet
Dateianhänge
RealWindowHeight 03.zip
(105.18 KiB) 5-mal heruntergeladen

Soner
Beiträge: 782
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von Soner »

Ich habe oben geschrieben, nach dem ich Screen.WorkAreaHeight nach verschiedenen Situationen betrachtet habe (mit lazarus-programm) und davon ausging, dass es stimmen muss. Jetzt habe ich ein Beispiel gebaut und festgestellt dass es in LCL ein Fehler gibt. Die Titelzeile vom 2.Form wird vom 1. überdeckt und die linke Seite ist nicht richtig. Bei Skalierung noch deutlicher.
Dateianhänge
screenworkareaforms.zip
(94.71 KiB) 5-mal heruntergeladen

Soner
Beiträge: 782
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von Soner »

PeterS hat geschrieben: Sa 21. Mär 2026, 13:05 Ich habe mit Deinem Code zwei weitere Fenster eingebaut.
Sieht nicht gut aus.
.
FormNew.png
FormNews sehen genauso wie bei mein Beispiel aus. Wie ich oben erwähnt habe, ist das LCL-Fehler, irgendjemand hat "ClientHeight" genommen anstatt "Height". Wir müssen jetzt Fehler suchen und korrigieren.

PeterS
Beiträge: 196
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von PeterS »

Soner hat geschrieben: Sa 21. Mär 2026, 13:31 Wie ich oben erwähnt habe, ist das LCL-Fehler, irgendjemand hat "ClientHeight" genommen anstatt "Height".
Wir müssen jetzt Fehler suchen und korrigieren.
Okay, damit hatte ich nicht gerechnet, also daß in der LCL ein Fehler steckt.
Vielen Dank für die Info !
Soner hat geschrieben: Sa 21. Mär 2026, 12:25 Ich habe kontrolliert, Screen.WorkAreaHeight hat anderen Wert je nach Skalierung
und ob Taskbar automatisch unsichtbar ist, was bei mir der Fall ist.
Ja, das macht einen Unterschied. Ich mag es nicht wenn sich die Taskleiste automatisch ausblendet.
Bei mir ist die immer sichtbar.

Ein völlig anderes Thema ist, daß die MainForm in meinem Beispiel nicht "to Front" kommt.
Die sekundären Fenster liegen immer über der MainForm.
Da habe ich derzeit keine Ahnung, warum das passiert.
.
MainForm not on Top when active.png
MainForm not on Top when active.png (103.63 KiB) 213 mal betrachtet

Soner
Beiträge: 782
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Windows Taskbar Höhe / Fenster (Forms) exakt auf dem Desktop anordnen

Beitrag von Soner »

Ich habe mir das nochmal angeschaut, Height setzt ClientHeight, das sollte bei Formulare Titelzeile auch berücksichtigen, das ist ein Fehler das sollte man vielleicht melden.
Man kann MoveWindow von WinAPI bei OnShow verwenden. Windows 11 positioniert die Formulare nicht richtig, man hat auf der linken Seite und zwischen Formularen kleine Lücke, bei Windows 7 nicht.
Dateianhänge
screenworkareaforms2.zip
(49.18 KiB) 6-mal heruntergeladen

Antworten