如何使 TTreeView 在禁用时不突出显示所有节点?

How to make TTreeView not highlight all nodes when disabled?

我在我的应用程序中使用 VCL 样式,特别是使用 "Windows 10 dark",它是黑底白字。然后我有一个 TTreeView 控件,它显示得很好。但是,当用户进入 "Edit" 模式时,我禁用了 TTreeView,当它被禁用时,它看起来非常难看,显示每个节点都突出显示。

如何让它在禁用时显示正常,而不突出显示所有节点,而只突出显示当前选定的节点?[​​=19=]

注意:我试图避免自定义绘图。虽然这看起来是必要的操作过程,但我的目的并不是要使它成为某种超级复杂的解决方案,因此虚拟树视图等替代方案不在图片中。


编辑

我已经尝试实施推荐的“”,但无济于事。这是我添加的内容:

procedure TfrmTopics.TopicTreeAdvancedCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
  var PaintImages, DefaultDraw: Boolean);
begin
  inherited;
  if (not TopicTree.Enabled) and
    (GetWindowTheme(TopicTree.Handle) = 0) and (Stage = cdPrePaint) then
  begin
    DefaultDraw:= True; // False; //Tried both ways...
    TopicTree.Canvas.Brush.Color := TopicTree.Color;
    TopicTree.Canvas.Font.Color := clWhite; 
    TopicTree.Canvas.Pen.Color:= clWhite;
  end;
end;

它只绘制当前选定节点的文本 - 不绘制其余部分。我假设它与深色风格和压倒一切的颜色有关...

顺便说一句,TTreeView.StyleElements 禁用了 seFontseClient

使用 VCL Styles Utils 个组件来自:https://github.com/RRUZ/vcl-styles-utils

在您的项目中包含 Vcl.Styles.Hooks