Перейти к содержанию
Fire Monkey от А до Я
  • 0

Количество строк в Memo (Android)


Вопрос

Здравствуйте! Использую Delphi Rad Studio 10.4 для разработки приложения на Android. Необходимо подсчитать количество строк в Memo.  Например ввожу текст в Memo:

s:='Необходимо подсчитать количество строк в Memo';
Memo1.Lines.Add(s);

Memo имеет свойство Align: Client. А также WordWrap: True.

При изменении размера формы (уменьшение) текст переносится на новую строку. Но при этом, если считать количество строк через Memo1.Lines.Count количество строк не увеличивается. А всегда одна. По факту просто идет перенос первой строки (как текста) без создания новой строки что ли. Как посчитать количество строк??

Если писать приложение не как Multi-Device Application, а Windows VLC Application, то считает количество строк верно.

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Ну так количество строк то не меняется, меняется отображение этих строк. Код не мой

 

function MeasureTextHeight(const AFont: TFont; const AText: string): Single;
var
  LLayout: TTextLayout;
begin
  LLayout := TTextLayoutManager.DefaultTextLayout.Create;
  try
    LLayout.BeginUpdate;
    try
      LLayout.WordWrap := False;
      LLayout.Font.Assign(AFont);
      LLayout.Text := AText;
    finally
      LLayout.EndUpdate;
    end;
    Result := LLayout.TextHeight;
  finally
    LLayout.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  LTextHeight: Single;
  LLines: Integer;
begin
  LTextHeight := MeasureTextHeight(Memo1.TextSettings.Font, Memo1.Text);
  LLines := Round(Memo1.ContentBounds.Height / LTextHeight);
end;
Ссылка на комментарий
  • 0
4 часа назад, OnePeople сказал:

Ну так количество строк то не меняется, меняется отображение этих строк. Код не мой

 

function MeasureTextHeight(const AFont: TFont; const AText: string): Single;
var
  LLayout: TTextLayout;
begin
  LLayout := TTextLayoutManager.DefaultTextLayout.Create;
  try
    LLayout.BeginUpdate;
    try
      LLayout.WordWrap := False;
      LLayout.Font.Assign(AFont);
      LLayout.Text := AText;
    finally
      LLayout.EndUpdate;
    end;
    Result := LLayout.TextHeight;
  finally
    LLayout.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  LTextHeight: Single;
  LLines: Integer;
begin
  LTextHeight := MeasureTextHeight(Memo1.TextSettings.Font, Memo1.Text);
  LLines := Round(Memo1.ContentBounds.Height / LTextHeight);
end;

Спасибо. 

В Windows запускаю - работает. А на Android не хочет.

А в Label так можно сделать?

Изменено пользователем Андрей Быковский
Ссылка на комментарий
  • 0
В 26.03.2023 в 16:46, OnePeople сказал:

function MeasureTextHeight(const AFont: TFont; const AText: string): Single; var LLayout: TTextLayout; begin LLayout := TTextLayoutManager.DefaultTextLayout.Create; try LLayout.BeginUpdate; try LLayout.WordWrap := False; LLayout.Font.Assign(AFont); LLayout.Text := AText; finally LLayout.EndUpdate; end; Result := LLayout.TextHeight; finally LLayout.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var LTextHeight: Single; LLines: Integer; begin LTextHeight := MeasureTextHeight(Memo1.TextSettings.Font, Memo1.Text); LLines := Round(Memo1.ContentBounds.Height / LTextHeight); end;

В общем работает все. Но только через Button. А можно как-нибудь использовать без Button? Чтобы сразу выводилась цифра при открытии окна?

Ссылка на комментарий
  • 0
procedure TForm1.FormCreate(Sender: TObject);
var
  LTextHeight: Single;
  LLines: Integer;
begin
  LTextHeight := MeasureTextHeight(Memo1.TextSettings.Font, Memo1.Text);
  LLines := Round(Memo1.ContentBounds.Height / LTextHeight);
  ShowMessage('Количество строк: ' + IntToStr(LLines));
end;

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...