![]() |
Größe eines Label mit WordWrap richtig definieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich hab grad ein kleines Problem. Anbei ein Bild einer Form. Dort ist ein Label names "Label_MSGText" drauf. Dieses Label bekommt programmseitig verschieden lange Texte, in verschiedenen Schriftgrößen und auch in verschiedenen Sprachen. Nun möchte ich dass sich die Breite der Form soweit verändert, bis entweder der Text zu Ende ist / des Label-Ende erreicht ist oder, wenn der Text länger ist, eine maximale Breite der Form erreicht wird und dann das Label mehrere Zeilen haben soll. Eigentlich ist das kein Problem mit den Property "AutoSize" und "WordWrap". Ich dachte auch noch, wenn ich Anchors auf akRight dass sich dann das Label mit vergrößert wenn ich die Form vergrößere. Aber irgendwie macht die das nicht wirklich. Ich wollt das zuvor so machen (Anchors = akRight nicht gesetzt): Ich lasse WordWrap ausgeschaltet, schreib dann den Text ins Label. Lese mir danach die Höhe und Breite des Labels aus. Wenn die Breite des Labels plus Left des Labels größer ist als die Breite der Form, dann wird die Form verbreitert. Ist die max. erlaubte Breite erreicht, so wird WordWrap des Labels eingeschaltet und die akt. Höhe des Labels ausgelesen. Um die Differenz der zuerst ermittelten Höhe und der akt. Höhe des Labels wird die Form erhöht. Somit habe ich immer die gleichen Abstände etc. Aber irgendwie scheint das Label es nicht zu wollen, dass man WordWrap ein- und ausschaltet und reagiert dementsprechend nicht (mehr) darauf. Jetzt meine Frage: Wie könnte ich das am Besten hinbekommen? (Die Progressbar und das gelbe Image mal aussen vor lassen) |
AW: Größe eines Label mit WordWrap richtig definieren
Wenn das Label sich mit der Form vergrößern soll, musst du den Anchor left und right einschalten und AutoSize ausschalten. WordWrap korrespondiert wohl auch nicht so gut mit AutoSize.
|
AW: Größe eines Label mit WordWrap richtig definieren
Zitat:
Bezüglich AutoSize in Verbindung mit WordWrap sagt mir die Hilfe: Zitat:
|
AW: Größe eines Label mit WordWrap richtig definieren
Anscheinend hat WordWrap ein Problem mit AutoSize in Verbindung mit Anchors.
Setze ich Anchors auf akRight und AutoSize auf true, wird die Breite des Labels auf die aktuellen Textbreite gesetzt. Durch akRight kann ich per Maus die Breite des Labels manuell verändern. Schreibe ich dann einen Text ins Label der länger ist wird durch WordWrap zwar der Text umgebrochen, aber nur nach der alten Breite, wie sie zum Designzeitpunkt war |
AW: Größe eines Label mit WordWrap richtig definieren
Mach es einfach, nimm TPanel, stell es auf die gewünschte Breite und Höhe, füge TLabel rein, stelle es auf alClient und WordWrap, schon verteilt sich der Text.
Edit: Ok, immer vorher die Problemstellung lesen. Sorry, du willst was anderes. |
AW: Größe eines Label mit WordWrap richtig definieren
Also ich habs jetzt.
Delphi-Quellcode:
Somit bricht das Label ab einer bestimmten Breite um. Diese kann variabel sein.
procedure TForm2.Button1Click(Sender: TObject);
begin Label_MSGText.Caption := ''; ShowMessage(IntToStr(Label_MSGText.Height)); Label_MSGText.WordWrap := false; Label_MSGText.Constraints.MaxWidth := Form2.Width - Label_MSGText.Left - 50; Label_MSGText.Caption := Edit1.Text; Label_MSGText.WordWrap := true; ShowMessage(IntToStr(Label_MSGText.Height)); end; Bei Anchors sind nur noch akLeft und akTop, also die Standard-Einstellungen aktiv. Warum man das so kompliziert machen muss kann ich leider nicht sagen. [Edit] AutoSize kann in OI fix auf true gesetzt werden und braucht nicht mit WordWrap im Code mit ein- und ausgeschaltet werden! |
AW: Größe eines Label mit WordWrap richtig definieren
Und wie reagiert das Label und das Form jetzt, wenn du das Form vergrößerst oder verkleinerst?
|
AW: Größe eines Label mit WordWrap richtig definieren
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Nein, also wenn ich den Code mehrmals ausführe mit anderen Breiten der Form, dann wird das Label dementsprechend angepasst. Ich hab mal mein Testprojekt angehängt. Einfach die Form verbreitern/verschmälern und erneut den Button drücken |
AW: Größe eines Label mit WordWrap richtig definieren
Ein Label das sich dynamisch anpasst:
OI Anchors = [akLeft, akTop, akRight] Autosize = false; WordWrap = true;
Delphi-Quellcode:
Wenn das Label in einem Panel oder etwas Ähnlichem mit einem OnResize-Event liegt, dann sollte man natürlich diesen Event nehmen.
procedure SetLabelCaption(ALabel: TLabel; const AValue: string);
begin ALabel.Caption := AValue; ALabel.AutoSize := true; ALabel.AutoSize := false; end; procedure ResizeLabel(ALabel: TLabel); var W: Integer; begin W := ALabel.Width; ALabel.AutoSize := true; ALabel.AutoSize := false; ALabel.Width := W; end; procedure TForm140.Button1Click(Sender: TObject); begin SetLabelCaption(Label1, Edit1.Text); end; procedure TForm140.FormResize(Sender: TObject); begin ResizeLabel(Label1); end; |
AW: Größe eines Label mit WordWrap richtig definieren
schaut interessant aus - nur meiner Anforderungen waren etwas anders.
Ich lasse zuerst WordWrap ausgeschaltet und schreibe dann den Text ins Label. Ist dann das Label zu breit für die Form wird die Form so lange verbreitert bis entweder das Label nun reinpasst oder bis eine zuvor vorgegebene maximale Breite der Form erreicht wurde. Ist dies geschehen, so muss sich das Label von der Höhe her anpassen. Also WordWrap wird wieder eingeschaltet und die sich daraus neu ergebende Höhe ausgelesen. Um die Differenz der aktuellen Höhe des Labels zur alten Höhe des Labels wird die Form erhöht. Somit beinflussen sich die Form und das Label gegenseitig, je nach Anforderung |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:42 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