Как нарисовать стилизованный прямоугольник выбора TTreeView во время AdvancedCustomDrawItem?

Я делаю пользовательский TTreeViewрисунок с нуля, используя событие OnAdvancedCustomDrawItem, и мне интересно, как правильно отображать эти выделения и горячие прямоугольники на фоне моего владельца- рисовать предметы? Они выполнены в стиле Vista/7, поэтому я не могу просто заполнить фон одним сплошным цветом.

enter image description here

Я попытался отрисовать свои элементы на этапе 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;
8
задан Deduplicator 27 June 2016 в 02:12
поделиться