如何在不选择所有节点的情况下禁用 TreeView 控件?

How to disable a TreeView control without selecting all nodes?

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

这就是未应用主题时禁用控件的样子。您可以修改它而无需对项目绘图进行少量干预:

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'(我没有调查),因此代码测试是否启用了树视图。