Еще выкладывать подобное?
12 проголосовавших
-
1. Еще выкладывать подобное?
-
Да
-
Нет0
-
- Пожалуйста, войдите или зарегистрируйтесь для возможности голосования в этом опросе.
-
Похожий контент
-
- 18 ответов
- 1 277 просмотров
-
- 7 ответов
- 1 503 просмотра
-
- 1 ответ
- 1 510 просмотров
-
- 3 ответа
- 1 863 просмотра
-
- 1 ответ
- 1 610 просмотров
-
- 3 ответа
- 1 972 просмотра
-
- 14 ответов
- 2 989 просмотров
-
- 0 ответов
- 1 137 просмотров
-
- 16 ответов
- 4 861 просмотр
-
- 1 ответ
- 2 279 просмотров
-
-
Последние посетители 0 пользователей онлайн
- Ни одного зарегистрированного пользователя не просматривает данную страницу
Вопрос
Error
*** Небольшой обмен опытом ***
Вижу что вопросы о размере текста довольно частые, поделюсь своими наработками.
function CalcTextSize(Text: string; Font: TFont; Size: Single = 0): TSizeF;
Функция для расчета размера прямоугольника, занимаемого однострочным текстом.
Параметры:
Исходный код:
uses System.Types, FMX.Types, FMX.Graphics, FMX.TextLayout, System.Math, System.SysUtils; function CalcTextSize(Text: string; Font: TFont; Size: Single = 0): TSizeF; var TextLayout: TTextLayout; begin TextLayout := TTextLayoutManager.DefaultTextLayout.Create; try TextLayout.BeginUpdate; try TextLayout.Text := Text; TextLayout.MaxSize := TPointF.Create(9999, 9999); TextLayout.Font.Assign(Font); if not SameValue(0, Size) then begin TextLayout.Font.Size := Size; end; TextLayout.WordWrap := False; TextLayout.Trimming := TTextTrimming.None; TextLayout.HorizontalAlign := TTextAlign.Leading; TextLayout.VerticalAlign := TTextAlign.Leading; finally TextLayout.EndUpdate; end; Result.Width := TextLayout.Width; Result.Height := TextLayout.Height; finally TextLayout.Free; end; end;
function FontSizeForBox(Text: string; Font: TFont; Width, Height: Single; MaxFontSize: Single = cMaxFontSize): Integer;
Функция возвращающая максимально возможный размер шрифта, для текста вписанного в заданный прямоугольник.
Параметры:
Исходный код:
uses System.Types, FMX.Types, FMX.Graphics, FMX.TextLayout, System.Math, System.SysUtils; const cMaxFontSize = 512; function FontSizeForBox(Text: string; Font: TFont; Width, Height: Single; MaxFontSize: Single = cMaxFontSize): Integer; var Size, Max, Min, MaxIterations: Integer; Current: TSizeF; begin Max := Trunc(MaxFontSize); Min := 0; MaxIterations := 20; repeat Size := (Max + Min) div 2; Current := CalcTextSize(Text, Font, Size); if ((Abs(Width - Current.Width) < 1) and (Width >= Current.Width)) and ((Abs(Height - Current.Height) < 1) and (Height >= Current.Height)) then break else if (Width < Current.Width) or (Height < Current.Height) then Max := Size else Min := Size; Dec(MaxIterations); until MaxIterations = 0; Result := Size; end;
---
Также данные функции можно найти в этом юните
Ссылка на комментарий
2 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.