AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Label mit dynamischer Höhe, aber fester Breite?
Thema durchsuchen
Ansicht
Themen-Optionen

Label mit dynamischer Höhe, aber fester Breite?

Ein Thema von xZise · begonnen am 21. Jun 2009 · letzter Beitrag vom 16. Aug 2009
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

Label mit dynamischer Höhe, aber fester Breite?

  Alt 21. Jun 2009, 23:18
Hallo ihr,
wie kriegt ihr es hin, dass ein Label eine feste Breite, aber je nach Inhalt eine dynamische Größe hat?
Ich habe AutoSize und WordWrap auf True. Wenn ich dann nach setzen des Textes die Breite Setze funktioniert es fast. Weil bei mir wird er zwar mehrzeilig, aber hat ... mehr als die doppelte Höhe als eigentlich notwendig. Wobei manchmal (nicht genau getestet wann), geht es.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Label mit dynamischer Höhe, aber fester Breite?

  Alt 22. Jun 2009, 00:33
Nimm doch ein Memo, schalte dort...
Delphi-Quellcode:
BorderStyle := bsNone;
Color := clBtnFace;
ReadOnly := true;
WordWrap := true;
...und dynamische Höhe: Anchors oder Align benutzen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Label mit dynamischer Höhe, aber fester Breite?

  Alt 22. Jun 2009, 06:29
Delphi-Quellcode:
Function MeasureTextHeight (Const s: String; aLabel : TLabel; aMaxWidth : Integer) : Integer;
Var
  p : TPanel;
  l : TLabel;
Begin
  p := TPanel.create(Nil);
  l := TLabel.create(Nil);
  Try
    with P do begin
      Width := aMaxWidth;
      Height := 1024;
    end;
    with l do begin
      Parent := P;
      Font.Assign (aLabel.Font);
      Align := alTop;
      WordWrap := True;
      Caption := s;
    end;
    Result := l.Height;
  Finally
    l.free;
    p.free;
  End
End;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#4

Re: Label mit dynamischer Höhe, aber fester Breite?

  Alt 22. Jun 2009, 08:48
ich hatte es mir einfach gemacht, nur mir war die Gesamthöhe des Labels egal

WordWrap = True
AutoSize = False

dann einfach so breit machen, wie gewünscht,
die Höhe so wählen, daß alle zu erwartenden Zeilen reinpassen

und nun einfach nur noch fleißig Text zuweisen und sonst nix mehr ändern.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Label mit dynamischer Höhe, aber fester Breite?

  Alt 22. Jun 2009, 08:56
Hallo,

ich vermute ich habe mich nicht klar genug ausgedrückt (.... das klingt irgendwie böse ). Aber ich habe einen Text mit unbestimmter Länge und eine Breite und will jetzt einfach nur wissen, wie hoch das Label dafür sein muss Und alzaimars Lösung sieht gut aus. Ich teste die gleich mal.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: Label mit dynamischer Höhe, aber fester Breite?

  Alt 22. Jun 2009, 15:30
Hallo,

eine andere Möglichkeit:
Delphi-Quellcode:
function SetLabelHeight(aLabel: TLabel): Integer;
var bmp : TBitMap;
    aRect : TRect;
begin
  bmp := TBitMap.Create;
  try
  bmp.Canvas.Font.assign(aLabel.Font);
  aRect := Rect(0,0,aLabel.Width,0);
  DrawText(bmp.Canvas.Handle, PChar(aLabel.Caption), Length(aLabel.Caption),
           aRect, DT_WORDBREAK or DT_CALCRECT);
  Result := aRect.Bottom + 2;
  finally
    bmp.Free;
  end;
end;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Label mit dynamischer Höhe, aber fester Breite?

  Alt 22. Jun 2009, 17:49
Hallo Fabian,

setze einfach - bei aktiviertem AutoSize und WordWrap - Constraints.MinWidth und Constraints.MaxWidth des Labels auf den gewünschten Wert. Damit ersparst du dir jegliche Berechnung der Höhe.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Label mit dynamischer Höhe, aber fester Breite?

  Alt 22. Jun 2009, 23:30
Hallo Hawkeye219,
aber damit habe ich ja nicht das Problem behoben, dass mein Panel mit dem Label immer noch sich an die Höhe anpassen muss.

Ich mach das jetzt erstmal über Constraints.MaxWidth. Vielleicht klappt es ja damit.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Label mit dynamischer Höhe, aber fester Breite?

  Alt 16. Aug 2009, 13:48
Hallo ihr,
so ich glaube ich habe alles wunderbar eingerichtet, das Problem ist aber, dass ich noch AdjustBounds aufrufen müsste?

Also es ginge über:
L.AutoSize := False; L.AutoSize := True; MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 08:32 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