[Lazarus] TMemo flicker

Michael Van Canneyt michael at freepascal.org
Tue Apr 30 11:52:59 CEST 2013



On Tue, 30 Apr 2013, José Mejuto wrote:

> El 30/04/2013 10:31, Michael Van Canneyt escribió:
>
>>> Your solution of course is mutch faster but I thought seeing the
>>> progress is important for Jürgen.
>> In that case the beginupdate/endupdate is a total waste of CPU.
>> 
>
> Hello,
>
> The problem is that the behavior changes with the use of begin/end update, at 
> least on Windows platform. Run attached code to test. Just create a form and 
> add a button and a Memo and link the button OnClick with this code (better 
> visible with a quite big Memo):
>
> -------------------------------
>
> procedure TForm1.Button1Click(Sender: TObject);
> const
>  TestMode=3; //CHANGE to 1..3 to run different tests
> var
>   i: integer;
> begin
>  for i := 1 to 40 do begin
>    Memo1.Lines.add('Some lines at the beginning to watch the up/down flicker 
> effect.');
>  end;
>  if TestMode=1 then begin
>    for i := 1 to 1000 do begin
>      Memo1.Lines[Memo1.lines.Count-1]:='#### '+IntToStr(i);
>    end;
>  end else if TestMode=2 then begin
>    for i := 1 to 1000 do begin
>      Memo1.Lines.BeginUpdate;
>      Memo1.Lines[Memo1.lines.Count-1]:='#### '+IntToStr(i);
>      Memo1.Lines.EndUpdate;
>    end;
>  end else if TestMode=3 then begin
>    for i := 1 to 1000 do begin
>      Memo1.Lines.BeginUpdate;
>      Memo1.Lines[Memo1.lines.Count-1]:='#### '+IntToStr(i);
>      Memo1.Lines.EndUpdate;
>      Application.ProcessMessages;
>    end;
>  end;
> end;
> --------------------------------
>
> If Begin/End update is being used the vertical scroll bar position is not 
> updated, I do not know if this is expected :-?

This i cannot say.

What I can say is that, given the purpose of beginupdate/endupdate,
in the above code, using beginupdate/endupdate is totally pointless.

Not to mention that you should always use try/finally with beginupdate/endupdate

BeginUpdate;
try
   // Do your thing
finally
   EndUpdate;
end;

Michael.


More information about the Lazarus mailing list