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;