表中记录是这样的:
目录号    目录名     父目录号
0         所有文件     0
1         操作系统     0
2         数据结构     0
3          dos         1
4         windows      1
5         冒泡排序     2
想用treeview生成如下形式:所有文件
   操作系统
       dos
       windows
   数据结构
       冒泡排序
请问代码应该怎么写,谢谢了先!!!

解决方案 »

  1.   

    pmydata=^tmydata;
    tmydata=record
      id:integer;
      name:string;
      flag:boolean;
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      p:pmydata;
      node:ttreenode;
    begin
      new(p);
      p^.id:=0;
      p^.name:='所有文件';
      p^.flag:=false;
      node:=treeview1.items.add(nil,p^.name);
      node.data:=p;end;procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
      Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      tempnode:ttreenode;
      p:pmydata;
    begin
      if node.data<>nil then
      begin
        if not  pmydata(node.data)^.flag then
    begin
      adoquery1.close;
      adoquery1.sql.clear;
      adoquery1.sql.add('select A.目录号,A.目录名 FROM yourtable as A');
      adqquery1.sql.add('where A.父目录号='+quotedstr(pmydata(node.data)^.id);
      adoquery1.open;
      if adoquery1.recordcount>0 then
      begin
        adoquery1.first;
    while not adoquery1.eof do
    begin
      new(p);
      p^.id:=adoquery1.fieldbyname('目录号').asstring;
      p^.name:=adoquery1.fieldbyname('目录名').asstring;
      tempnode:=treeview1.items.addchild(node,p^.name);
      tempnode.data:=p;
      adoquery1.next;
    end;
      end;
           pmydata(node.data)^.flag:=true;
    end;
      end;
    end;
    利用treeview的oncustomdrawitem绘列表 ,这样可以更快!
      

  2.   

    对了,在oncustomdrawitem中少了一行代码!
    p^.id:=adoquery1.fieldbyname('目录号').asstring;
    p^.name:=adoquery1.fieldbyname('目录名').asstring;
    p^.flag:=false;//记住把这行也加进去
      

  3.   

    最后还要记住自己释放掉node.data所保留的指针啊
      

  4.   

    TO 回复人: huamanlouzcj() :
    最后还要记住自己释放掉node.data所保留的指针啊--------------------------------------------------
    在什么地方释放,释放的是哪一个啊?
      

  5.   

    在treeview 的ondeletion事件中
    begin
      dispose(node.Data);
      node.Data:=nil;
    end;