AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Breite von Buttons in Fenster-Caption

Ein Thema von Amateurprofi · begonnen am 24. Mai 2022 · letzter Beitrag vom 24. Mai 2022
Antwort Antwort
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
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Breite von Buttons in Fenster-Caption

  Alt 24. Mai 2022, 07:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#3

AW: Breite von Buttons in Fenster-Caption

  Alt 24. Mai 2022, 09:32
Daher meine Vermutung dass in deinem Projekt die DPI Awareness ausgeschaltet ist?
Dafür gibt es ja auch GetSystemMetricsForDpi.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Amateurprofi

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

AW: Breite von Buttons in Fenster-Caption

  Alt 24. Mai 2022, 09:52
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.
Danke.
Kann aber "DPI Awareness" in den Projektoptionen nicht finden.
Mag an meinem System liegen (Windows 7, Delphi XE2).
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Breite von Buttons in Fenster-Caption

  Alt 24. Mai 2022, 09:54
Ich glaube vor über zehn Jahren war so etwas noch gar nicht erfunden 🤔
  Mit Zitat antworten Zitat
Amateurprofi

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

AW: Breite von Buttons in Fenster-Caption

  Alt 24. Mai 2022, 09:56
Daher meine Vermutung dass in deinem Projekt die DPI Awareness ausgeschaltet ist?
Dafür gibt es ja auch GetSystemMetricsForDpi.
Danke, scheint es bei mir nicht zu geben (Delphi XE2).
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Poelser

Registriert seit: 21. Apr 2008
Ort: Europa
145 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Breite von Buttons in Fenster-Caption

  Alt 24. Mai 2022, 10:15
Eben mal nachgesehen: GetSystemMetricsForDPI gibt's nicht in D10.2, wohl aber in D10.4 .
LG aus dem hohen Norden, Edmund

Geändert von Poelser (24. Mai 2022 um 10:16 Uhr) Grund: Wurstfinger gehabt...
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#8

AW: Breite von Buttons in Fenster-Caption

  Alt 24. Mai 2022, 10:47
Daher meine Vermutung dass in deinem Projekt die DPI Awareness ausgeschaltet ist?
Dafür gibt es ja auch GetSystemMetricsForDpi.
Danke, scheint es bei mir nicht zu geben (Delphi XE2).
Braucht man dafür Delphi? Sicherlich nicht!
Aber Windows 10.
  Mit Zitat antworten Zitat
Amateurprofi

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

AW: Breite von Buttons in Fenster-Caption

  Alt 24. Mai 2022, 18:14
Braucht man dafür Delphi? Sicherlich nicht!
Aber Windows 10.
Ich hab Windows 7.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#10

AW: Breite von Buttons in Fenster-Caption

  Alt 24. Mai 2022, 18:56
Braucht man dafür Delphi? Sicherlich nicht!
Aber Windows 10.
Ich hab Windows 7.
Dann hat es sich ja erübrigt.
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:
Minimum supported client Windows 10, version 1607 [desktop apps only]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz