Я делаю пользовательский 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
// .........
end;
end;
PaintImages := False;
end;