禁用并更改 Treeview 中节点的颜色

ast*_*ack 3 delphi treeview nodes disabled-control

我正在寻找禁用适当节点的方法。

假设我创建了如下简单的树视图结构:

  • 父级 1 (禁用)
  • 家长2
    • 儿童 1
    • 儿童 2 (禁用)

到目前为止,我已经找到了解决方法,但仍然效果不佳。我使用OnChanging事件处理程序:

procedure TForm1.TreeViewChanging(Sender: TObject; Node: TTreeNode;
  var AllowChange: Boolean); 
begin
   if (Node.Text = 'Parent 1') or (Node.Text = 'Child 1') then
      AllowChange := False;
end;
Run Code Online (Sandbox Code Playgroud)

它有效,因为我无法单击该节点,但问题是,以这种方式“禁用”节点后,Parent 1Child 1节点的颜色与其他节点相同。有什么办法可以改变这个节点的颜色(灰色)吗?或者也许您知道禁用 TTreeView 组件中的节点的另一种方法?

Tom*_*erg 5

要禁用节点,请将其Enabled属性设置为False。禁用的项目以灰色显示。

要更改节点文本的正常颜色,请更改TTreeView.Font.Color.

要更改禁用节点文本的颜色,请使用以下OnCustomDrawItem事件:

procedure TForm2.TreeView1CustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
  if cdsDisabled in state then
    Sender.Canvas.Font.Color := clRed; //cl3DLight;
end;
Run Code Online (Sandbox Code Playgroud)

默认颜色设置:

在此输入图像描述

禁用颜色 = cl3DLight:

在此输入图像描述

正常文本颜色 =clGreen和禁用颜色 = clRed

在此输入图像描述

  • 也许对 Enabled 进行一些评论会很好。这样未来的读者就知道它确实有效。 (2认同)