7

In Windows 7, a memo control (TMemo) will scroll automatically after text is insterted (Memo.Lines.Add(Path);), which I do not want, because scrolling is done by myself.

How can I stop the automatic scrolling?

NGLN
  • 43,011
  • 8
  • 105
  • 200
HamiD
  • 197
  • 1
  • 2
  • 11

1 Answers1

9

Normally, adding text to a memo control scrolls the memo to the bottom of the inserted text. To prevent that, call Lines.BeginUpdate before adding text, and call EndUpdate afterwards:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.BeginUpdate;
  try
    Memo1.Lines.Add('...');
    Memo1.Lines.Add('...');
    ...
  finally
    Memo1.Lines.EndUpdate;
  end;
end;
NGLN
  • 43,011
  • 8
  • 105
  • 200
  • This functions OK but have undesired side effect of flickering :-(. Setting DoubleBuffered property is of no benefit. – truthseeker Jan 16 '14 at 12:28
  • Can you explain why this works? In the documentation for `System.Classes.TStrings.BeginUpdate` it says "Some descendants of TStrings use this information to perform certain actions, such as telling a control to repaint, when updates are complete." – DBedrenko Jul 29 '15 at 07:11
  • 1
    @New Because `TMemoStrings.SetUpdateState` is implemented the way it is. – NGLN Aug 09 '15 at 11:47