在 Treeview 中禁用和更改节点的颜色
Disable and change color of node in Treeview
我正在寻找禁用适当节点的方法。
假设我创建了简单的 treeview 结构,如下所示:
- Parent 1 (禁用)
- Parent 2
- Child 1
- Child 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;
可以,因为我不能点击这个节点,但问题是在 'disabling' 节点之后, Parent 1
和 Child 1
节点的颜色是和其他的一样。有没有办法改变这个节点的颜色(灰色)?或者您知道另一种禁用 TTreeView 组件中节点的方法吗?
要禁用节点,请将其 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;
默认颜色设置:
禁用颜色 = cl3DLight
:
正常文本颜色 = clGreen
和禁用颜色 = clRed
:
我正在寻找禁用适当节点的方法。
假设我创建了简单的 treeview 结构,如下所示:
- Parent 1 (禁用)
- Parent 2
- Child 1
- Child 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;
可以,因为我不能点击这个节点,但问题是在 'disabling' 节点之后, Parent 1
和 Child 1
节点的颜色是和其他的一样。有没有办法改变这个节点的颜色(灰色)?或者您知道另一种禁用 TTreeView 组件中节点的方法吗?
要禁用节点,请将其 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;
默认颜色设置:
禁用颜色 = cl3DLight
:
正常文本颜色 = clGreen
和禁用颜色 = clRed
: