首页 > 解决方案 > 如何在不选择所有节点的情况下禁用 TreeView 控件?

问题描述

我不知道这是一个错误还是什么,但如果我尝试禁用一个TTreeView控件,所有节点都会被选中(灰色)......可以做任何事情来禁用这个控件的输入而不更改选择? 当然,节点并没有真正被选中,它们只是在视觉上被选中,但这很烦人。

在此处输入图像描述

标签: delphicontrolsdelphi-2009

解决方案


这就是未应用主题时禁用控件的外观。您可以在几乎不干预项目绘图的情况下对其进行修改:

procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
  var PaintImages, DefaultDraw: Boolean);
begin
  if (not TreeView1.Enabled) and
      (GetWindowTheme(TreeView1.Handle) = 0) and (Stage = cdPrePaint) then begin
    TreeView1.Canvas.Brush.Color := clWindow; // or TreeView1.Color
    TreeView1.Canvas.Font.Color := clGrayText;
  end;
end;

不幸的是,State从不包括“cdsDisabled”或“cdsGrayed”(我没有调查),所以代码测试树视图是否启用。


推荐阅读