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

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

我不知道这是错误还是其他原因,但是如果我尝试禁用TTreeView控件,则所有节点都将被选中(显示为灰色)。可以执行任何操作来仅为此禁用输入吗?控制而不更改选择?当然,并没有真正选择节点,只是在视觉上选择了节点,但这很烦人。

enter image description here

delphi controls delphi-2009
1个回答
6
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.