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.
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to