1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| {$REGION 'Calcul taille variable d''un item de TListview'}
// todo : à mettre dans une unité à part (réutilisation)
function GetTextHeight(const D: TListItemText; const Width: single; const Text: string): Integer;
var Layout: TTextLayout;
Hauteur : Single;
vFont : TFont;
begin
// Creer un TTextLayout pour obtenir les dimensions du texte
Layout := TTextLayoutManager.DefaultTextLayout.Create;
try
Layout.BeginUpdate;
try
// Initialiser le layout parameters avec ceux de l'élément (style)
Layout.Font.Assign(D.Font);
{$IFDEF ANDROID}
// bogue android, la taille de fonte par défaut (18) n'est pas toujours trouvée !
// à tester
if D.Font.IsSizeStored=false then Layout.Font.Size:=18; // D.Font.DefaultSize;
// if (D.Font=12) OR (D.Font=18) then Layout.Font.Size:=18;
{$ENDIF}
Layout.VerticalAlign := D.TextVertAlign;
Layout.HorizontalAlign := D.TextAlign;
Layout.WordWrap := D.WordWrap;
Layout.Trimming := D.Trimming;
Layout.MaxSize := TPointF.Create(Width, TTextLayout.MaxLayoutSize.Y);
Layout.Text := Text;
finally
Layout.EndUpdate;
end;
// nécessite un single
Hauteur:=Layout.Height;
// petit gap supplémentaire, la hauteur d'un 'm'
if D.Wordwrap then begin
Layout.Text := 'm';
Hauteur:=Hauteur+Layout.Height;
end;
Result := Round(Hauteur);
finally
Layout.Free;
end;
end;
{$ENDREGION} |
Partager