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 :-?

--


--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to