Как узнать, отображает ли TMemo последнюю строку?

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Как узнать, отображает ли TMemo последнюю строку?

Сообщение Lifter » 05.08.2019 11:11:41

Мне надо выводить лог в Memo, и если видна последняя строка, чтобы новый текст добавлялся с прокруткой всего текста в конец (нормальное поведение TMemo). А если последние строки не видны (например, юзер сдвинул ScrollBar вверх и просматривает предыдущие сообщения), то текст чтобы добавлялся в TMemo, но окно не прокручивалось.
Для отключения прокрутки окна вывод сделал так:
Код: Выделить всё
if ( <видна последняя строка> ) then
  Memo1.Lines.Add(s)  // текст прокручивается
else
begin
  Memo1.BeginUpdate;
  Memo1.Lines.Add(s);  // текст не прокручивается при добавлении
  Memo1.EndUpdate;
end;

Как задать условие?

==============================
И еще вопрос, чтобы не заводить отдельную тему. Как переименовать ноду в TXMLDocument?
Код: Выделить всё
procedure TForm1.RenameNode(var node:TDOMNode);
var
  s : WideString;
begin
  s := WideString(InputBox('Имя ноды', 'Введите новое имя ноды', ''));
  if isCorrectName(s) then
    node.NodeName := s;  // компилятор ругается - "Error: No member is provided to access property" (свойство NodeName только на чтение)
end;
Lifter
новенький
 
Сообщения: 16
Зарегистрирован: 19.04.2012 02:17:24

Re: Как узнать, отображает ли TMemo последнюю строку?

Сообщение iskander » 25.08.2019 13:46:14

Насчет последней строки в TMemo, по идее должна работать функция:
Код: Выделить всё
function IsLastLineVisible(aMemo: TMemo): Boolean;
begin
  if aMemo.Lines.Count < 1 then
    exit(False);
  Result := aMemo.VertScrollBar.ScrollPos + aMemo.VertScrollBar.Page > aMemo.VertScrollBar.Range;
end;
iskander
постоялец
 
Сообщения: 229
Зарегистрирован: 08.01.2012 18:43:34


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru