Einzelnen Beitrag anzeigen

NICK447

Registriert seit: 28. Jan 2008
7 Beiträge
 
Delphi 7 Professional
 
#3

Re: Richedit schnell viele farbige Zeilen einfügen zu langsa

  Alt 15. Feb 2009, 08:34
moin moin SX2008,
ich habe heute morgen mal Tests mit jeweils 50.000 Zeilen gemacht.

Routine 1: 256 344 ticks ==> erst mal Strings reinkopieren dann Zeilen färben
Routine 2: 33.797 ticks ==> Rückwärts zählen letzte Zeile zuerst einfügen die EinfügePos bleibt immer auf 0
Routine 3: 56.078 ticks ==> Dein Vorschlag ohne lokale Tstrings

tja alles zu langsam z.B. Das erzeugen der Stringlist mit 50.0000 dauert nur ca. 2-3 sec.

Im Moment ist das noch keine Lösung

Grüsse Nick
Delphi-Quellcode:
procedure TFmain.TntButton_generate_ReportClick(Sender: TObject);
Var i,j,k,o : Integer;
    st1 : String;
    tick1,tick2 : Dword;
begin
  tick1 := GetTickCount;
  j := ListBox_HEX.Items.Count - 1;
  RichEdit1.Lines.BeginUpdate;
  RichEdit1.Lines := ListBox_HEX.Items;
  for i:= 0 to j do Begin
    with RichEdit1 do Begin
      SelStart := SendMessage(Handle, EM_LINEINDEX, i, 0);
      SelLength := Length(Lines[i]);
      SelAttributes.Color := TColor(ListBox_HEX.Items.Objects[i]);
    end;
  end;
  RichEdit1.Lines.EndUpdate;
  tick2 := GetTickCount;
  tick2 := tick2 - tick1;
  Fmain.Memo_Status.Lines.Add('Tick : ' + inttostr(Tick2));
end;

// Routine 2
procedure TFmain.TntButton_generate_ReportClick(Sender: TObject);
Var i,j,k,o : Integer;
    st1 : String;
    tick1,tick2 : Dword;
begin
  tick1 := GetTickCount;
  j := ListBox_HEX.Items.Count - 1;
  RichEdit1.Lines.BeginUpdate;
  for i:= j downto 0 do Begin
    with RichEdit1 do Begin
      st1 := ListBox_HEX.Items[i];
      SelStart := 0;
      SelAttributes.Color := TColor(ListBox_HEX.Items.Objects[i]);
      SelText := st1 + #13#10;
    end;
  end;
  RichEdit1.Lines.EndUpdate;
  tick2 := GetTickCount;
  tick2 := tick2 - tick1;
  Fmain.Memo_Status.Lines.Add('Tick : ' + inttostr(Tick2));
end;

// Routine 3

procedure TFmain.TntButton_generate_ReportClick(Sender: TObject);
Var i,j,k,o,ins_Pos : Integer;
    st1 : String;
    tick1,tick2 : Dword;
begin
  tick1 := GetTickCount;
  j := ListBox_HEX.Items.Count - 1;
  RichEdit1.Lines.BeginUpdate;
  for i:= 0 to j do Begin
    with RichEdit1 do Begin
      st1 := ListBox_HEX.Items[i];
      SelStart := ins_Pos;
      SelAttributes.Color := TColor(ListBox_HEX.Items.Objects[i]);
      SelText := st1 + #13#10;
      inc(ins_Pos,length(st1) + 2);
    end;
  end;
  RichEdit1.Lines.EndUpdate;
  tick2 := GetTickCount;
  tick2 := tick2 - tick1;
  Fmain.Memo_Status.Lines.Add('Tick : ' + inttostr(Tick2));
end;
  Mit Zitat antworten Zitat