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/)
-   -   Delphi Label mit dynamischer Höhe, aber fester Breite? (https://www.delphipraxis.net/136002-label-mit-dynamischer-hoehe-aber-fester-breite.html)

xZise 21. Jun 2009 23:18


Label mit dynamischer Höhe, aber fester Breite?
 
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

omata 22. Jun 2009 00:33

Re: Label mit dynamischer Höhe, aber fester Breite?
 
Nimm doch ein Memo, schalte dort...
Delphi-Quellcode:
BorderStyle := bsNone;
Color := clBtnFace;
ReadOnly := true;
WordWrap := true;
...und dynamische Höhe: Anchors oder Align benutzen

alzaimar 22. Jun 2009 06:29

Re: Label mit dynamischer Höhe, aber fester Breite?
 
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;

himitsu 22. Jun 2009 08:48

Re: Label mit dynamischer Höhe, aber fester Breite?
 
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. :angel:

xZise 22. Jun 2009 08:56

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

ich vermute ich habe mich nicht klar genug ausgedrückt (.... das klingt irgendwie böse :mrgreen: ). 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

Lannes 22. Jun 2009 15:30

Re: Label mit dynamischer Höhe, aber fester Breite?
 
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;

Hawkeye219 22. Jun 2009 17:49

Re: Label mit dynamischer Höhe, aber fester Breite?
 
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

xZise 22. Jun 2009 23:30

Re: Label mit dynamischer Höhe, aber fester Breite?
 
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

xZise 16. Aug 2009 13:48

Re: Label mit dynamischer Höhe, aber fester Breite?
 
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:
Delphi-Quellcode:
L.AutoSize := False; L.AutoSize := True;
MfG
xZise


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