Ich verwende derzeit OnCustomDrawItem um einen andersfarbigen Balken für selektierte Knoten zu zeichnen. Dabei bin ich auf verschiedene Probleme gestoßen. Wenn ich z.B. das NodeRect verwende das über die gesamte Client-Breite vom TreeView geht (also GetNodeRect(FALSE) ) und dabei ShowLines vom TreeView TRUE ist, übermalt das System den von mir gezeichneten Hintergrund im Bereich der Linien. Also hab ich die Linien eben abgeschaltet, ebenso die Node-Buttons.
Das FocusRect ist jetzt das letzte Problem. Scheinbar wird das erst gezeichnet wenn OnCustomDrawItem schon abgearbeitet ist.
Delphi-Quellcode:
procedure TForm1.treProductsCustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
Rect1, Rect2: TRect;
BackColor: TColor;
begin
if Node.StateIndex = 3 then begin
BackColor:= $00DCC2B9;
Rect1:= Node.DisplayRect(TRUE);
Rect2:= Node.DisplayRect(FALSE);
Rect1.Right:= Rect2.Right;
Rect1.Left:= Rect1.Left - 34;
with treProducts.Canvas do begin
Brush.Color:= BackColor;
FillRect(Rect2);
end;
end;
end;
Das Hintergrund-Rechteck rücke ich deswegen um 34 Pixel nach links weil ich Images und StateImages für jeden Node verwende. Der Hintergrundbalken soll die beiden Images noch mit umfassen.