kad
Дата: 31.01.2003 16:34:36
При загрузке из файла в TRichEdit необходимо, чтобы в зависимости от содержимого,
строки были раскрашены в соответствующие цвета.
Для этого накалякал процедуру загрузки из файла идентичую TStrings.LoadFromFile,
которая осуществляет следующую последовательность вызовов
TStrings.LoadFromFile -> TStrings.LoadFromStream -> TStrings.SetTextStr
В TStrings.SetTextStr осуществляется добавление строк в Lines.
В ней по содержимому строки устанавливется ее цвет.
Процедура TStrings.SetTextStr работает быстро,
а моя процедура - медленно. При чем ее замедляет не анализ строки и установка цвета,
а добавление строки.
Почему так происходит? И как ускорить?
Код моей процедуры:
procedure TfmMain.SetTextStr(const Value: string{содержимое файла представленное ввиде строки});
var
P, Start, P1: PChar;
S: string;
begin
RichEdit.Enabled := False;
RichEdit.Lines.BeginUpdate;
try
with RichEdit do
begin
Lines.Clear;
P := Pointer(Value);
if P <> nil then
while (P^ <> #0) do
begin
Start := P; // сохраняем указатель на начало строки
while not (P^ in [#0, #10, #13]) do // находим конец строки
begin
Inc(P);
end;
SetString(S, Start, P - Start); // получаем строку для добавления
//----------------------- этот кусок не замедляет, если его выкинуть работает всеравно медленно
SelStart; //
SelAttributes.Color := GetColor(s); // устанавливаем необходимый цвет строки
//-----------------------
Lines.Add(S); // добавляем строку !!!!! Вот это крепко замедляет
if P^ = #13 then Inc(P);
if P^ = #10 then Inc(P);
end;
end;
finally
red.Lines.EndUpdate;
red.Enabled := True;
end;
end;