(решено)Дано: 55555 <== итераций SynEdit.add - в чём секрет?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

(решено)Дано: 55555 <== итераций SynEdit.add - в чём секрет?

Сообщение vitaly_l »

Всем привет и хорошего дня.
Дан вот такой простой код:

Код: Выделить всё

var
  i:integer;
begin
  for i := 0 to 55555 do
    begin
      SynEdit.Lines.Add('// '+IntToStr(i));
    end;
end;     

заполняет очень-очень-очень долго.

Попробовал вот так:

Код: Выделить всё

var
  i:integer;
begin
  SynEdit.Visible:=false;
  SynEdit.Enabled:=false;
  Application.ProcessMessages;
  for i := 0 to 55555 do
    begin
      SynEdit.Lines.Add('// '+IntToStr(i));
    end;
  SynEdit.Visible:=true;
  SynEdit.Enabled:=true;
end;     

заполняет много быстрее, но всё равно долго.

Сделал вот так:

Код: Выделить всё

var
  i:integer;
  s:string;
begin
  SynEdit.Visible:=false;
  SynEdit.Enabled:=false;
  Application.ProcessMessages;
  for i := 0 to 55555 do
    begin
      s:=s+'// '+IntToStr(i)+#13;
    end;
  SynEdit.text := s;
  SynEdit.Visible:=true;
  SynEdit.Enabled:=true;
end; 

:arrow: Заполняет моментально.... :oops:

Вопрос: В чём секрет? Это баг или нужно чего-то отключить при SynEdit.add ?


.
Последний раз редактировалось vitaly_l 20.07.2015 18:27:14, всего редактировалось 1 раз.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Код: Выделить всё

    SynEdit1.BeginUpdate;
    for i := 0 to 55555 do
      begin
        SynEdit1.Lines.Add('// '+IntToStr(i));
      end;
    SynEdit1.EndUpdate;
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

resident писал(а):BeginUpdate

БОЛЬШУЩЕЕ (В СМЫСЛЕ ГРОМАДНОЕ) СПАСИБО!
Ответить