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

问题描述 投票:1回答:1

我在我的应用程序中使用VCL样式,特别是使用黑色和白色文本的“ Windows 10 dark”。然后,我有一个TTreeView控件,它显示得很好。但是,当用户进入“编辑”模式时,我禁用了TTreeView,而当禁用它时,它看起来非常难看,显示每个突出显示的节点。

enter image description here

如何使它在禁用时显示正常,而不突出显示所有节点,而仅突出显示当前选定的节点?

注意:我正在尝试避免自定义绘图。尽管这看起来是必要的行动方案,但我实际上并不是要提出这种超级复杂的解决方案,因此,虚拟树视图等替代方案不在图中。


编辑

enter image description here

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

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

delphi treeview vcl-styles
1个回答
2
投票
在项目中包含Vcl.Styles.Hooks
© www.soinside.com 2019 - 2024. All rights reserved.