我正在TTreeView使用OnAdvancedCustomDrawItem事件从头开始自定义绘图,我想知道如何在我的所有者绘制项目的背景中正确渲染这些选择和热矩形?它们是Vista/7风格,所以我不能简单地用一些纯色填充背景.

我试图在cdPostPaint舞台上绘制我的项目,但是如果我DefaultDraw := True在cdPrePaint舞台上离开以绘制选择背景,则会发生完整的默认绘图,包括项目文本.
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
// ......... …Run Code Online (Sandbox Code Playgroud)