TreeView节点着色问题 我的软件中用TTreeView构建一棵树,其中二级节点数量较多,且存在多种状态,现在希望对每种状态使用一种颜色进行区分,以使用户在界面上可以对节点的状态一览无余,但我现在没有找到如何实现节点着色,因此请做过的大侠指点一二!我的环境是D7 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);var FRect: TRect; FColor: TColor;begin FRect := Node.DisplayRect(True); case Node.Level of 0: FColor := clYellow; 1: FColor := clRed; 2: FColor := clBlue; end; with Sender.Canvas do begin Pen.Color := clPurple; Brush.Color := FColor; Brush.Style := bsSolid; TextOut(FRect.Left + 2, FRect.Top + 2, Node.Text); end;end; budded的方法确实很好我想继续请教两个问题1.这个方法是响应什么事件,或者说什么时候被调用2.现在Tree中的所有节点都在一个数组中,包括需要现实的信息和状态,我希望通过遍历数组构造树的过程中,每添加一个节点就对其着色,另外我目前是使用自定义的一个函数Tree_Show在界面上画出这棵树,因为在我的应用中,这棵树的状态属于变化很频繁的,需要经常重画(当然树上的节点数目很少,一般一级节点1个,二级节点最多35个,效率不是问题) 哈,我已经查了一下资料,在每个Node被显示之前调用TreeView1CustomDrawItem事件响应函数,但如果我是在自定义的一个Tree_Show中使用For循环调用AddChild方法在树上添加节点,那么该事件的调用是在For循环内部,每次AddChild之后,还是在整棵树画出来之前呢?另此时TreeView1CustomDrawItem事件只知道该节点的信息,而FColor的获得取决于该节点的另外一个信息或者更准确地说:每个节点对应一个结构,该结构有两个元素,Discription元素为String类型,显示在树上,Flag元素为Integer类型,Flag决定颜色,Flag取0为黑色,取1为蓝色,取2为红色,此时如何把Flag信息带进TreeView1CustomDrawItem事件响应函数呢? 经过实验,我已经知道何时调用该方法了但还是不知道如何把Flag信息传进去做为确定文字色彩的依据另外,从实现来说,每个节点出现了一个底色框,这时我不需要的,我希望底色不变,仅仅是文字色彩变化 另外还请问一下,除了调色外,应该有办法改变文字的font和大小吧,该如何实现呢? Sender.Canvas这个属性下面有好多属性,去看一就有了。就Font属性的。 问题已经解决,只用了一句话Node.TreeView.Canvas.Font.Color:=FColor不过还是非常感谢Budded和oushengfen给我的启发,点数将立即奉献再次表示感谢 ReleaseCapture 问题一问 简单sql语句问题!!! 用RAVE制作报表,程序打包问题~ 如何实现代码备份SQL SERVER中的数据库? listview 关于网络数据传输,如何使一个线程暂停传输数据?suspend?或者说限速。 如何释放内存? 有泉州地区的程序员吗? 请问怎样在一个控件上用垂直字体输出文字? 小弟有一个问题 如何在硬盘上查找文件 dbgrid中怎么样不显示数值0
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
FRect: TRect;
FColor: TColor;
begin
FRect := Node.DisplayRect(True);
case Node.Level of
0: FColor := clYellow;
1: FColor := clRed;
2: FColor := clBlue;
end;
with Sender.Canvas do
begin
Pen.Color := clPurple;
Brush.Color := FColor;
Brush.Style := bsSolid;
TextOut(FRect.Left + 2, FRect.Top + 2, Node.Text);
end;
end;
我想继续请教两个问题
1.这个方法是响应什么事件,或者说什么时候被调用
2.现在Tree中的所有节点都在一个数组中,包括需要现实的信息和状态,我希望通过遍历数组构造树的过程中,每添加一个节点就对其着色,另外我目前是使用自定义的一个函数Tree_Show在界面上画出这棵树,因为在我的应用中,这棵树的状态属于变化很频繁的,需要经常重画(当然树上的节点数目很少,一般一级节点1个,二级节点最多35个,效率不是问题)
另此时TreeView1CustomDrawItem事件只知道该节点的信息,而FColor的获得取决于该节点的另外一个信息
或者更准确地说:每个节点对应一个结构,该结构有两个元素,Discription元素为String类型,显示在树上,Flag元素为Integer类型,Flag决定颜色,Flag取0为黑色,取1为蓝色,取2为红色,此时如何把Flag信息带进TreeView1CustomDrawItem事件响应函数呢?
但还是不知道如何把Flag信息传进去做为确定文字色彩的依据
另外,从实现来说,每个节点出现了一个底色框,这时我不需要的,我希望底色不变,仅仅是文字色彩变化
Node.TreeView.Canvas.Font.Color:=FColor
不过还是非常感谢Budded和oushengfen给我的启发,点数将立即奉献
再次表示感谢