Einzelnen Beitrag anzeigen

pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
309 Beiträge
 
Delphi 12 Athens
 
#65

Re: VirtualTreeView - Wer hat die Weiterentwicklung übernomm

  Alt 1. Apr 2009, 15:03
Zitat von madas:
Damit Ihr das Ganze auch mal nachvollziehen könnt, ist im Anhang ein kleines Testprojekt mit "nur" 10000 Knoten (Zeit für Resize wird gestoppt). Ist onBeforeCellPaint als Event registriert dann dauert das Optimieren einer Spalte (unter WinXp) knapp 8s . Ohne onBeforeCellPaint nur 300ms.
Ich habe mir den Quellcode des Beispieles mal angeschaut und folgende Frage zu meinem Verständnis:
Delphi-Quellcode:
procedure TForm1.VirtualStringTree1BeforeCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
  CachedShadowColor: TColor;
begin
  if (CellPaintMode = cpmPaint) then
  begin
    CachedShadowColor := TargetCanvas.Brush.Color;
    try
      if (Odd(Node.Index)) then
      begin
        TargetCanvas.Brush.Color := RGB(225, 225, 225);
        TargetCanvas.FillRect(CellRect);
      end;
    finally
      TargetCanvas.Brush.Color := CachedShadowColor;
    end;
  end;
  inherited;
end;
das wird von Euch nur dazu benutzt, um jede 2. Zeile anders einzufärben?

Wir machen das in einem anderen Event:
Delphi-Quellcode:
procedure TForm1.VST_HostListBeforeItemErase(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect;
  var ItemColor: TColor; var EraseAction: TItemEraseAction);
begin
  if Odd(Node.Index) then begin
    ItemColor := col_VST_Line2; // auch TColor($F4F2F2);
  end
  else begin
    ItemColor := col_VST_Line1;
  end;
  EraseAction := eaColor;
end;
und haben derartige Probleme mit Version 4.7.0 noch nicht beobachtet.

Gruß,
Christoph
  Mit Zitat antworten Zitat