Wie zeichnet man das gestaltete Auswahlrechteck von TTreeView während AdvancedCustomDrawItem?

Ich mache SitteTTreeView Zeichnen von Grund auf neu mitOnAdvancedCustomDrawItem und ich frage mich, wie ich diese Auswahl und heißen Rechtecke im Hintergrund meiner vom Eigentümer gezogenen Objekte korrekt rendern kann. Sie sind im Vista / 7-Stil gestaltet, daher kann ich den Hintergrund nicht einfach einfarbig ausfüllen.

Ich habe versucht, meine Gegenstände zu zeichnencdPostPaint Bühne, aber wenn ich geheDefaultDraw := True beimcdPrePaint Bühne zur Auswahl Hintergrund zeichnen, erfolgt die komplette Standardzeichnung, einschließlich Text der Elemente.

procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages,
  DefaultDraw: Boolean);
begin
  case Stage of
    cdPreErase:
    begin
      DefaultDraw := True;
    end;

    cdPostErase:
    begin
      DefaultDraw := True;
    end;

    cdPrePaint:
    begin
      // I thought this will paint only the selected/hot backgrounds, 
      // however this will paint whole item, including text.
      DefaultDraw := True;
    end;

    cdPostPaint:
    begin
      DefaultDraw := False;

      // painting my owner-draw text
      // .........
    end;
  end;

  PaintImages := False;
end;

Antworten auf die Frage(1)

Ihre Antwort auf die Frage