如何使 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
禁用了 seFont
和 seClient
。
使用 VCL Styles Utils
个组件来自:https://github.com/RRUZ/vcl-styles-utils
在您的项目中包含 Vcl.Styles.Hooks
我在我的应用程序中使用 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
禁用了 seFont
和 seClient
。
使用 VCL Styles Utils
个组件来自:https://github.com/RRUZ/vcl-styles-utils
在您的项目中包含 Vcl.Styles.Hooks