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