Mahlzeit,
gegeben seien ein TLabel mit Align Top und eine beliebige andere Komponente (z.B. ein Panel oder ein TabControl) mit Align Client. Der Text des Labels wird zur Laufzeit gesetzt. Ich möchte erreichen, dass sich dieses je nach Text und Ausrichtung des Geräts dynamisch in der Höhe anpasst. AutoSize steht auf false, WordWrap auf true, momentan wird zu Testzwecken an verschiedenen Stellen (Events) der folgende Code durchlaufen.
Delphi-Quellcode:
procedure TfrmDingens.SetLabelHeight(const ALabel: TLabel);
var
Layout: TTextLayout;
begin
Canvas.BeginScene;
try
Layout := TTextLayoutManager.DefaultTextLayout.Create(ALabel.Canvas);
try
Layout.BeginUpdate;
try
Layout.TopLeft := PointF(0, 0);
Layout.MaxSize := PointF(ALabel.AbsoluteRect.Width, MAXINT);
Layout.Text := ALabel.Text;
Layout.WordWrap := ALabel.TextSettings.WordWrap;
Layout.HorizontalAlign := ALabel.TextSettings.HorzAlign;
Layout.VerticalAlign := ALabel.TextSettings.VertAlign;
Layout.Font.Assign(ALabel.TextSettings.Font);
Layout.RightToLeft := false;
finally
Layout.EndUpdate;
ALabel.Size.Height := ALabel.Margins.Height +
Layout.TextRect.Height;
end;
finally
Layout.Free;
end;
finally
Canvas.EndScene;
end;
end;
Unter Windows klappt das recht gut, z.B. im OnPainting des Formulars. Unter Android und iOS hingegen stimmt die Höhe überhaupt nicht. Bin ich völlig auf dem Holzweg, oder habe ich etwas übersehen?
Danke im Voraus.