AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Tatsächliche Rahmenbreite von Komponenten herausfinden?
Thema durchsuchen
Ansicht
Themen-Optionen

Tatsächliche Rahmenbreite von Komponenten herausfinden?

Ein Thema von Keks · begonnen am 22. Feb 2014 · letzter Beitrag vom 23. Feb 2014
Antwort Antwort
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#1

Tatsächliche Rahmenbreite von Komponenten herausfinden?

  Alt 22. Feb 2014, 22:41
Gibt es eine Möglichkeit, die tatsächliche Rahmenbreite von z.B. einer GroupBox herauszufinden? Mit der klassichen Darstellung sind das 2px, in Windows 7 ists aber nur 1px.
Ich dachte, ich komme vielleicht über ClientRect dran, aber das liefert (zumindest bei einer GroupBox) die gleiche Breite wie die Breite der Komponente (.Width = .ClientRect.Right).
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: Tatsächliche Rahmenbreite von Komponenten herausfinden?

  Alt 22. Feb 2014, 23:49
Hallo,

Zitat:
Gibt es eine Möglichkeit, die tatsächliche Rahmenbreite von z.B. einer GroupBox herauszufinden? Mit der klassichen Darstellung sind [...]
Was meinst Du mit "tatsächlicher Rahmenbreite"? Ich vermute mal Du beziehst Dich auf irgendwelche Systemeinstellungen. Die kannst Du im Einzelfall über GetSystemMetrics auslesen - ein Schau in die OH macht da schon schlau.

Vielleicht hilft sofort:
ShowMessage(IntToStr (GetSystemMetrics (SM_CXBORDER)));

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#3

AW: Tatsächliche Rahmenbreite von Komponenten herausfinden?

  Alt 23. Feb 2014, 00:33
Ich versuche, das Problem mal mit einem vereinfachten Beispiel (damit man die Pixel besser sehen kann, in vergrößerter Form) zu visualisieren:


Als ich die Frage gestellt habe, bin ich davon ausgegangen, dass in Windows 7 mit Themes die Rahmenbreite nur 1px breit ist (siehe Groupbox1 oben). Erst als ich dieses Beispiel zusammengestellt habe, ist mir aufgefallen, dass es dort nur so aussah, weil es auf einem Tab lag und sich weiße Schatierung aufgehoben hat (siehe Groupbox2 oben). Das verkompliziert die Sache eigentlich nur noch...

Button1 ist mit Left:=0 und Width:=Groupbox1.Width platziert und erfüllt in dem Theme-Style genau meine Anforderung: Er reicht pixelgenau vom linken Rahmen bis zum rechten Rahmen. (Wäre der Hintergrund allerdings nicht weiß, wäre die Positionierung dann doch falsch, weil der Button links einen Pixel vom weißen Rahmen verdecken würde - trifft in meinem Fall aber nicht zu.)

Das ursprüngliche Problem ist nun, dass es "ohne" Themes (Screenshot von XP mit Classic Theme) nun ganz anders aussieht. Der Button müsste mit Left:=2 und Width:=Groupbox1.Width-4 positioniert werden, um so auszusehen, als würde es genau vom linken zum rechten Rahmen reichen.

Natürlich kann ich diese Abweichung hardcoden, aber zum einen ist das unschön und zum anderen weiß ich ja gar nicht, ob das mit anderen Themes nicht vielleicht noch ganz anders aussieht. Eigentlich versuche ich nur eine Möglichkeit zu finden den Innenbereich einer GroupBox pixelgenau bestimmen zu können. Jetzt bin ich aber leider recht ratlos.

Edit: GetSystemMetrics(SM_CXBORDER) liefert bei mir auf beiden Systemen "1". Schade, genausowas bräuchte ich eigentlich.
Miniaturansicht angehängter Grafiken
rahmenbreite.png  
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#4

AW: Tatsächliche Rahmenbreite von Komponenten herausfinden?

  Alt 23. Feb 2014, 01:14
Vielleicht isses SM_CXEDGE? Sonst schau mal bei MSDN-Library durchsuchenGetSystemMetrics vorbei, evtl. findest du was passendes.

MfG Dalai
  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 07:39 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