Как остановить автоматическую прокрутку элемента управления Memo?

В Windows 7 элемент управления заметками (TMemo) будет автоматически прокручиваться после вставки текста (Memo.Lines.Add(Path);), чего я не хочу, потому что прокрутка выполняется мной.

Как остановить автоматическую прокрутку?


person HamiD    schedule 29.12.2012    source источник
comment
Когда заметка прокручивается автоматически?   -  person jachguate    schedule 30.12.2012
comment
при вставке данных. код: lstFiles.Lines.Add(Path);. lstFiles — это TMemo.   -  person HamiD    schedule 30.12.2012


Ответы (1)


Обычно при добавлении текста в элемент управления заметкой заметка прокручивается до конца вставленного текста. Чтобы предотвратить это, вызовите Lines.BeginUpdate перед добавлением текста, а затем вызовите EndUpdate:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.BeginUpdate;
  try
    Memo1.Lines.Add('...');
    Memo1.Lines.Add('...');
    ...
  finally
    Memo1.Lines.EndUpdate;
  end;
end;
person NGLN    schedule 20.03.2013
comment
Это работает нормально, но имеет нежелательный побочный эффект мерцания :-(. Установка свойства DoubleBuffered бесполезна. - person truthseeker; 16.01.2014
comment
Можете ли вы объяснить, почему это работает? В документации для System.Classes.TStrings.BeginUpdate говорится, что некоторые потомки TStrings используют эту информацию для выполнения определенных действий, таких как указание элементу управления перерисовывать, когда обновления завершены. - person DBedrenko; 29.07.2015
comment
@New Потому что TMemoStrings.SetUpdateState реализовано так, как есть. - person NGLN; 09.08.2015