AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Größe eines Label mit WordWrap richtig definieren

Größe eines Label mit WordWrap richtig definieren

Ein Thema von Helmi · begonnen am 26. Mai 2012 · letzter Beitrag vom 27. Mai 2012
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

Größe eines Label mit WordWrap richtig definieren

  Alt 26. Mai 2012, 20:00
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)
Miniaturansicht angehängter Grafiken
message.jpg  
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Größe eines Label mit WordWrap richtig definieren

  Alt 26. Mai 2012, 20:48
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Größe eines Label mit WordWrap richtig definieren

  Alt 26. Mai 2012, 20:54
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.
Ich werds ausprobieren!

Bezüglich AutoSize in Verbindung mit WordWrap sagt mir die Hilfe:

Zitat:
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.
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Größe eines Label mit WordWrap richtig definieren

  Alt 26. Mai 2012, 22:09
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
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Größe eines Label mit WordWrap richtig definieren

  Alt 26. Mai 2012, 22:24
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.

Geändert von Popov (26. Mai 2012 um 22:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Größe eines Label mit WordWrap richtig definieren

  Alt 26. Mai 2012, 23:05
Also ich habs jetzt.

Delphi-Quellcode:
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;
Somit bricht das Label ab einer bestimmten Breite um. Diese kann variabel sein.
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!
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (27. Mai 2012 um 01:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Größe eines Label mit WordWrap richtig definieren

  Alt 27. Mai 2012, 09:52
Und wie reagiert das Label und das Form jetzt, wenn du das Form vergrößerst oder verkleinerst?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Größe eines Label mit WordWrap richtig definieren

  Alt 27. Mai 2012, 10:00
Und wie reagiert das Label und das Form jetzt, wenn du das Form vergrößerst oder verkleinerst?
keine Ahnung

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
Angehängte Dateien
Dateityp: rar TEST-PROJEKT.rar (87,4 KB, 10x aufgerufen)
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Größe eines Label mit WordWrap richtig definieren

  Alt 27. Mai 2012, 10:27
Ein Label das sich dynamisch anpasst:

OI
Anchors = [akLeft, akTop, akRight]
Autosize = false;
WordWrap = true;


Delphi-Quellcode:
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;
Wenn das Label in einem Panel oder etwas Ähnlichem mit einem OnResize-Event liegt, dann sollte man natürlich diesen Event nehmen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Größe eines Label mit WordWrap richtig definieren

  Alt 27. Mai 2012, 10:35
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
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:53 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