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