我在我的应用程序中使用VCL样式,特别是使用黑色和白色文本的“ Windows 10 dark”。然后,我有一个TTreeView
控件,它显示得很好。但是,当用户进入“编辑”模式时,我禁用了TTreeView
,而当禁用它时,它看起来非常难看,显示每个突出显示的节点。
如何使它在禁用时显示正常,而不突出显示所有节点,而仅突出显示当前选定的节点?
注意:我正在尝试避免自定义绘图。尽管这看起来是必要的行动方案,但我实际上并不是要提出这种超级复杂的解决方案,因此,虚拟树视图等替代方案不在图中。
编辑
我已经尝试实施推荐的“ 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
已禁用seFont
和seClient
。
Vcl.Styles.Hooks