我的TreeView很整齐,所有的叶子都在第3层,我是想在窗体的OnShow事件中,让树状图全展开,然后对于所有的叶子,若满足某个条件(与数据库相关),则将其底纹的颜色改成黄色,若不满足这个条件则还是白色。注意,是对某几个满足条件的叶子节点的字符底纹颜色作改变,而不是整棵树!
  我是用了:
for i:=0 to TreeView1.Items.Count-1 do
  begin
    if TreeView1.Items.Item[i].Level=3 then
         begin
            if {该叶子节点满足某条件} then
                TreeView1.Items.Item[i].//到这里我是想输入.Canvas,但悬浮提示框里却没有,说明不对。不知道该怎样了。求高手指教!  在百度知道提问,只有一个人回答,而且给的答案是这个:..\Program Files\Borland\Delphi7\Demos\CustomDraw\ 
  我看了下这位六级的大神指明的这个示例程序——看不懂啊——我菜鸟一个啊!还求神们指点迷津啊——或者把这个示例代码给一些中文注释让大家都学习学习也可以啊~~~~~~~~~~~~跪求!!!

解决方案 »

  1.   

    //TreeView1的OnCustomDrawItem事件
    procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
      Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
      if (Node.Level = 3) {and (该叶子节点满足某条件)} then
        Sender.Canvas.Brush.Color := clGreen ;  DefaultDraw := True
    end;
      

  2.   


    嗯嗯,很好很强大,只不过没法自动刷新,本想在会改变结点满足条件的地方调用一下这个函数进行刷新,结果发现——我太菜了,函数参数都写不好,只好向了一个山寨法子:
      TreeView1.Selected.Parent.Collapse(True);
      TreeView1.Selected.Parent.Expand(True);