看图
问题1.如何给节点添加图标(分选中和未选中两种图标)?最好是可以像添加节点那样,在设计时就搞定,而不需在代码中实现。2.如何实现选中行是整行选中,如上图所示。3.双击根结点,树在展开和收缩两种状态之间切换。最好是可以像添加节点那样,在设计时就搞定,而不需在代码中实现。目前只有这点儿分数了,暂时只能这么多分。

解决方案 »

  1.   

    不是不想写,是想看看到地cxDBTreeList跟TreeView在用法上有多大区别!
      

  2.   

    以前创建一个树都是用递归的方法操作数据表,最近发先cxDBTreeList在创建树时,可以通过数据绑定实现。TreeView的节点图标,可以在设计时指定imaglist来实现,但是试了好多次cxDBtreeList,都没能在设计时实现不知道是不是自己的方法有问题。
      

  3.   

    cxDBTreeList的object inspector中有好几个相关的image属性,设置后没起作用。
      

  4.   

    第二个功能我不知道不写代码能否实现,第一个和第三个是要自己写代码的,第一个的话:想想就应该明白,首先:你的节点数不确实,SO……那里记得并没有指定每个节点相应图标的IMAGEINDEX,所以可以推理出来是要写代码的。以后前这样的代码,如果要代码的话可以发个给你。第三个功能,因为手头没手装DEV很久了,也不是很清楚具体实现方式
      

  5.   

    我觉得,可以预留一个图片的imageindex的属性,虽然设计时节点树不确定,无法给买个节点指定相应的图标,但是控件可以在自己运行时,根据imageindex的值来提取对应图片给节点显示。不过cxDBTreeList没有这么做,而是提供了一个事件GetNodeImageIndex(Sender: TObject;ANode: TcxTreeListNode; AIndexType: TcxTreeListImageIndexType;var AIndex: TImageIndex);
    //anode为当前节点
    //AIndexType为图表类型
    //ImageIndex为图标索引
    begin
      if AIndexType=tlitImageIndex then
      begin
        AIndex :=0;
      end
      else if AIndexType=tlitSelectedIndex then
      begin
        AIndex :=1;
      end;
    end;2.选中行整行选中
    只需要将cxDBTreeListColumn的width加宽就可以实现这种效果。3.cxDBTressList控件本身就带有双击根结点,树在展开和收缩两种状态之间切换的功能。
      

  6.   


    1 procedure cxDBTreeList1GetNodeImageIndex(Sender:TcxCustomTreeList; ANode: TcxTreeListNode; AIndexType:
     2 
     3                TcxTreeListImageIndexType; var AIndex: TImageIndex);
     4 var
     5   i :Integer;
     6 begin
     7   //给树结点加上图标
     8   for i := 0 to ANode.ValueCount do
     9     begin
    10       if ANode.Level = 0 then
    11         begin
    12           ANode.ImageIndex := 0;
    13         end
    14       else
    15       if ANode.Level = 1 then
    16         begin
    17           ANode.ImageIndex := 2;
    18         end
    19       else
    20       if ANode.Level = 2 then
    21         begin
    22           ANode.ImageIndex := 1;
    23         end;
    24     end;
    25 end;