Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#1

Breite von Buttons in Fenster-Caption

  Alt 24. Mai 2022, 00:54
Ich versuche seit einiger Zeit, herauszufinden, wie breit die Buttons in einer Window-Caption sind (Minimize-, Maximize-, CloseButton).
Mit GetSystemMetrics(SM_CXSMSIZE); erhalte ich 15, tatsächlich sind die Buttons 21 Pixel breit.
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:
var Info:TTitleBarInfoEx;
begin
   Info.cbSize:=SizeOf(Info);
   SendMessage(Handle,WM_GETTITLEBARINFOEX,0,Integer(@Info));
end;
ergibt für die Buttons eine Breite von 25 Pixel.
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;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat