Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Wie verhindert man das FocusRect bei einem TTreeNode?

  Alt 16. Apr 2006, 13:51
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.
  Mit Zitat antworten Zitat