Нужно использовать TTextLayout для этого. Это будет быстрее, чем создавать TText, TLabel, которые по сути в конечном итоге используют тот же TTextLayout.
В приведенном ниже коде, нужно правильно задать требуемые настройки текста: шрифт, переносы, выравнивание и тд.
uses
FMX.TextLayout;
{$R *.fmx}
procedure TForm3.Button1Click(Sender: TObject);
var
TextLayout: TTextLayout;
begin
TextLayout := TTextLayoutManager.DefaultTextLayout.Create;
try
TextLayout.BeginUpdate;
try
TextLayout.Text := Text;
TextLayout.MaxSize := TPointF.Create(Width, 1000);
TextLayout.WordWrap := WordWrap;
TextLayout.Font := Font;
TextLayout.HorizontalAlign := TextAlign;
TextLayout.VerticalAlign := VertTextAlign;
finally
TextLayout.EndUpdate;
end;
// TextLayout.TextRect; <- Здесь будет размер текста
finally
TextLayout.Free;
end;
end;
Когда получите размер текста в TEdit, не забудьте, что нужно учесть размер рамки эдита и возможное наличие кнопок, что корректно задать ширину.
Обновлять ширину надо в события OnChange и OnChangeTrtacking, в зависимости от требуемой вам ситуации.