Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Label Ausrichtung und Autosize Problem (https://www.delphipraxis.net/216564-label-ausrichtung-und-autosize-problem.html)

TurboMagic 18. Jan 2025 17:15

Label Ausrichtung und Autosize Problem
 
Hallo,

gegeben ist ein Panel (dynamisch erzeugt) auf dem ein TVirtualImage und ein Label auch
dynamisch drauf sollen. Erzeugen klappt auch grundsätzlich, nur hat das Label ein Problem.

Das Label soll fast so breit wie das Panel sein und der Text im Label zentriert. Der Text
kann aber merzeilig werden.

Daher WordWrap auf true.
Setze ich AutoSzie auf true klappt es mit dem mehrzeiligen text, aber linksbündig statt
zentriert. Setze ich es auf false klappt es mit der Zentrierung aber es ist nicht mehr
automatisch mehrzeilig.

Delphi-Quellcode:
  MyLabel             := TLabel.Create(Panel);
  MyLabel.Parent      := Panel;
  MyLabel.Font.Size   := 14;
  MyLabel.Top         := Image.Top + Image.Height + 3;
  MyLabel.Left        := 3;
  MyLabel.Width       := Panel.Width - LabelPay.Left - 3;
  MyLabel.AutoSize    := false; //true;
  MyLabel.Alignment   := TAlignment.taCenter;
  MyLabel.WordWrap    := true;
  MyLabel.Caption     := 'Mein Text';
Die F1 Hilfe sagt übrigens das dazu, aber nichts über Align in dem Zusammenhang:

Zitat:

Legt fest, ob die Größe des Steuerelements automatisch an die Größe des enthaltenen Textes angepasst wird.

Mit AutoSize können Sie den Client-Bereich des Steuerelements automatisch an die Höhe und die Breite des
angezeigten Textes anpassen. Wenn AutoSize False ist, hat die Beschriftung eine feste Größe. Ist AutoSize
True, bewirkt jede Änderung am Text eine Anpassung der Beschriftungsgröße. Die Anpassung erfolgt auch, wenn
sich die Eigenschaft Font ändert.

Wenn WordWrap den Wert True hat, ist die Breite des Steuerelements fest. Ist AutoSize ebenfalls True, bewirken
Änderungen am Text, dass das Steuerelement in der Höhe angepasst wird. Wenn AutoSize True ist und WordWrap False,
wird die Höhe des Steuerelements von der Schriftart vorgegeben, und Änderungen am Text bewirken eine Breitenänderung.
Das passt für mich irgendwie noch nicht zusammen.

Delphi.Narium 18. Jan 2025 17:23

AW: Label Ausrichtung und Autosize Problem
 
AutoSize heißt doch (so wie ich es verstehe), dass Breite und Höhe automatisch bestimmt werden. Damit wird die Breite des Labels immer so sein, dass der Text so gerade eben da rein passt.
Gibt dem Label mal 'ne andere Farbe, um zu sehen, wie breit es bei AutoSize = true "wirklich" ist. Ist es so breit wie Du vermutest oder "nur" so breit, dass der Text gerade reinpasst. Bei 'nem Label in der Farbe des darunterliegenden Panels sieht man nicht unbedingt, wenn sich die Breite des Labels ändert.

TurboMagic 18. Jan 2025 17:26

AW: Label Ausrichtung und Autosize Problem
 
Danke mal für den Tipp.
Klappt nur noch nicht trotz dem:

Delphi-Quellcode:
MyLabel.StyleElements := [];
MyLabel.Color := clGreen;
Und eigentlich ist der Windows Stil aktiv.
Aber ich mach da jetzt erstmal Pause.

Uwe Raabe 18. Jan 2025 17:48

AW: Label Ausrichtung und Autosize Problem
 
Bei einzeiligem Text passt AutoSize und taCenter nicht zusammen, da die Breite des Labels dann nicht mehr konstant ist und an den Text angepasst wird. Da sich aber die Position nicht ändert wirkt das wie taLeft.

Du musst also mindestens zwei Zeilen haben, damit der Text auch zentriert wird. Gegebenenfalls musst du diese beiden Fälle separat bei der Zuweisung behandeln und bei 1-zeilig AutoSize nach der Height-Berechnung wieder abschalten und Width auf den gewünschten Wert setzen.

Alternativ kannst du eventuell das Label alTop in ein Panel setzen.

TurboMagic 18. Jan 2025 21:36

AW: Label Ausrichtung und Autosize Problem
 
Hallo,

was würden wir nur ohne Uwe machen? :-)
Danke für die Idee mit dem Panel. Das funktioniert, auch wenn es insgesammt
etwas aufwendig beim OnCLick Handling ist, aber ich hab's inzwischen funktionierend.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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