aa
    aa1    (aa1和c:\aa\aa1\2.exe 并联 )
    aa2    (aa1和c:\aa\aa2\abc.exe 并联 )
  bb
    bb1
    bb2
 
要把 以上信息添加到 treeview 中,但是只显示到aa1为止。  c:\aa\aa1\2.exe   需要添加进去,但不显示出来,以后点击 aa1 的时候 可以方便的取出 与他并联的 c:\aa\aa1\2.exe 信息。应该怎么做呀,我只知道在 listview中好处理 只显示2个Columns 就可以了。c:\aa\aa1\2.exe 加到item[1]中,但 在treeview改怎么做才好?

解决方案 »

  1.   

    有个笨办法:添加节点的时候将两个数据用特殊的符号隔开,比如8个空格之类的,如
    aa1        c:\aa\aa1\2.exe
    然后,在TreeView的OnCustomDrawItem事件中绘制节点的文本时,截取8个空格前的显示。
    在需要获取后面长数据的的时候,取选中节点的文本,然后取8个空格以后的就可以了。
      

  2.   

    不知道楼主明白我的意思没有。
    就是说,TreeView中每个节点的真实文本的格式类似:
    aa1        c:\aa\aa1\2.exe但是用自画代码以后,显示出来的只是前面的aa1。
      

  3.   

    利用指针
    //结构体
    type
      p = ^TPItem;
      TPItem = Record
        name: string;
        content: String;
      end;
    //写
    procedure TForm1.Button4Click(Sender: TObject);
    var
      itemp: P;
      node1: TTreeNode;
    begin
      new(itemP);
      itemP.name := 'aa1';
      itemP.content := 'c:\aa\aa1\2.exe';
      with treeview1.Items do
      begin
        Node1 := AddChild(nil,itemP.name);
        Node1.Data := itemP;
      end;
    end;
    //显示
    procedure TForm1.TreeView1Click(Sender: TObject);
    var
      itemp: P;
      node1: TTreenode;
    begin
      node1 := TreeView1.Selected;
      new(itemp);
      itemp := node1.Data;
      showmessage(itemp.name+'  '+itemp.content);
      dispose(itemp);
    end;
      

  4.   

    谢谢 zxf_feng(阿日) 我试试看。
      

  5.   

    郁闷,刚运行就出错,出现cpu调试窗口 去掉 
    利用指针
    //结构体
    type
      p = ^TPItem;
      TPItem = Record
        name: string;
        content: String;
      end;
    只会提示 P  未指定,不知道哪出错了。 delphi7 2000系统下。
      

  6.   

    结构体你定义在最上面:
    interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, Grids, DBGrids, ADODB, ComCtrls, RxGIF, ExtCtrls;// 定义在这里。
      

  7.   

    树只是用来显示,所以应自己维护一个树信息。TMyTreeNode=Class(TObjectList)
    private
    public
    published
      property Name:String ;
      property Caption:String;
      ..............
    end;就象上面这样将它的子节点都加入。这样很容易就实现一个通用的显示到树的类。
      

  8.   

    to  zxf_feng(阿日) 第1次点击 节点的时候,还使,但第2次点击改节点的时候,就会出错。
    把 dispose(itemp); 去掉,重复点击都没有问题。但是这样不释放在多次点击后会占用内存或者出错吗?
      

  9.   

    因为:dispose是释放指针。
    所以不用释放,当你程序退出后会自动释放掉的。