【问题标题】:Disable and change color of node in Treeview在 Treeview 中禁用和更改节点的颜色
【发布时间】:2016-09-23 06:44:53
【问题描述】:

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

假设我创建了简单的 treeview 结构,如下所示:

  • 父 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;

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

【问题讨论】:

  • 将节点的Enabled属性设置为False
  • @DavidHeffernan 我已经尝试过了,但不幸的是它不适用于我的情况。它什么都不做......
  • XP 可能吗? TVIS_EX_DISABLED 从 Vista 开始。或者也许没有运行时主题..
  • @astack - 您可以自己绘制项目。您可能应该找到为什么“启用”不起作用。您是否尝试过一个全新的项目?
  • 找到解决方法到底是什么?阴影的细微差别?自己绘制项目并以您想要的任何阴影或颜色绘制禁用的项目(Windows 使用用户应该已经熟悉的默认启用/禁用颜色)。启用工作正常;它会阻止选择并更改项目的阴影以显示它已禁用。

标签: delphi treeview nodes disabled-control


【解决方案1】:

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

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

要更改禁用节点文本的颜色,请使用OnCustomDrawItemevent:

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;

默认颜色设置:

禁用颜色 = cl3DLight:

普通文本颜色 = clGreen 和禁用颜色 = clRed

【讨论】:

  • 也许对启用的一些评论会很好。这样未来的读者就可以知道它确实有效。
  • 我完全按照你的方式做,它对我有用。首先,我在树视图中禁用了正确的节点,接下来我使用“OnCustomDrawItem”事件将此节点着色为灰色。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 2013-09-24
相关资源
最近更新 更多