![]() |
Breite von Buttons in Fenster-Caption
Ich versuche seit einiger Zeit, herauszufinden, wie breit die Buttons in einer Window-Caption sind (Minimize-, Maximize-, CloseButton).
Mit
Delphi-Quellcode:
erhalte ich 15, tatsächlich sind die Buttons 21 Pixel breit.
GetSystemMetrics(SM_CXSMSIZE);
Ich vermute, dass sich die Erklärung in der OH "The width of small caption buttons, in pixels." auf Fenster mit Borderstyle bsSizeToolWin oder bsToolWindow bezieht. Aber auch da ist der CloseButton 13, nicht 15 Pixel breit. Ein weiterer Versuch mit
Delphi-Quellcode:
ergibt für die Buttons eine Breite von 25 Pixel.
var Info:TTitleBarInfoEx;
begin Info.cbSize:=SizeOf(Info); SendMessage(Handle,WM_GETTITLEBARINFOEX,0,Integer(@Info)); end; Zudem sind die in TTitleBarInfoEx nicht stimmig, weil sich die dort angegebenen Koordinaten überschneiden. Weiß jemand, wie man die Koordinaten der Buttons zuverlässig ermitteln kann?
Delphi-Quellcode:
PROCEDURE TMain.Test;
const MinimizeBtn=2; MaximizeBtn=3; HelpBtn=4; CloseBtn=5; Names:Array[2..5] of String=('MinimizeBtn','Maximizebtn','HelpBtn','CloseBtn'); var Info:TTitleBarInfoEx; BS:Integer; FUNCTION RectStr(Index:Integer):String; var R:TRect; begin R:=Info.rgrect[Index]; Result:='L:'+IntToStr(R.Left)+' T:'+IntToStr(R.Top)+ ' R:'+IntToStr(R.Right)+' B:'+IntToStr(R.Bottom)+ ' W:'+IntToStr(R.Width)+' H:'+IntToStr(R.Height)+ ' '+Names[Index]; end; begin Info.cbSize:=SizeOf(Info); SendMessage(Handle,WM_GETTITLEBARINFOEX,0,Integer(@Info)); BS:=GetSystemMetrics(SM_CXSMSIZE); ShowMessage(RectStr(MinimizeBtn)+#13+ RectStr(MaximizeBtn)+#13+ RectStr(CloseBtn)+#13+ 'BS:'+IntToStr(BS)+' SM_CXSMSIZE'); // --------------------------- // Calculator // --------------------------- (Tatsächlich ) // L:1098 T:101 R:1123 B:127 W:25 H:26 MinimizeBtn (L=1101 R=1122 W=21) // L:1121 T:101 R:1146 B:127 W:25 H:26 Maximizebtn (L=1122 R=1143 W=21) // L:1144 T:101 R:1169 B:127 W:25 H:26 CloseBtn (L=1145 R=1166 W=21) // BS:15 SM_CXSMSIZE // --------------------------- // OK // --------------------------- end; |
AW: Breite von Buttons in Fenster-Caption
Also ich bekomme, beispielhaft, eine Größe von 60 × 37 Pixel heraus. Bildschirmfoto gemacht, nachgemessen, stimmt.
Dann habe ich in den Projektoptionen spaßeshalber mal die "DPI Awareness" auf "Unaware" geschaltet. Das Programm sieht wieder schön verschwommen und matschig aus, und liefert jetzt auch viel kleinere Pixelgrößen. Daher meine Vermutung dass in deinem Projekt die DPI Awareness ausgeschaltet ist? PS: Windows 10 oder Windows 11? Unter letzterem habe ich schon öfter gesehen dass sich die System-Buttons überlappen oder unterschiedlich groß sind. Irre. |
AW: Breite von Buttons in Fenster-Caption
Zitat:
|
AW: Breite von Buttons in Fenster-Caption
Zitat:
Kann aber "DPI Awareness" in den Projektoptionen nicht finden. Mag an meinem System liegen (Windows 7, Delphi XE2). |
AW: Breite von Buttons in Fenster-Caption
Ich glaube vor über zehn Jahren war so etwas noch gar nicht erfunden 🤔
|
AW: Breite von Buttons in Fenster-Caption
Zitat:
|
AW: Breite von Buttons in Fenster-Caption
Eben mal nachgesehen: GetSystemMetricsForDPI gibt's nicht in D10.2, wohl aber in D10.4 :thumb:.
|
AW: Breite von Buttons in Fenster-Caption
Zitat:
![]() Aber Windows 10. |
AW: Breite von Buttons in Fenster-Caption
Zitat:
|
AW: Breite von Buttons in Fenster-Caption
Zitat:
Unter Windows 7 in der User32.dll gibt es diese Funktion GetSystemMetricsForDpi nicht. Unter Windows 10 hättest du dir die Funktion ansonsten selber für ältere Delphi Version schreiben können. Das meinte ich mit braucht man dafür Delphi. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 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