表结构 parent_id, id ,name1.把上面的表内容显示到 treeview上.
2.父节点和子节点用不同的图标显示( imagelist1,imagelist2);
3.选中节点时,图标换成另外一个 该怎样做. 谢谢

解决方案 »

  1.   

    2.3.看看这个
    ImageIndex:不選中時圖標序號
    StateIndex﹕圖標序號始終不變
    SelectedIndex﹕選中時圖標序號
    第一个我也想知道。
      

  2.   

    给你一个例子:function GetNodeLevel(sFormat,sCode:string):integer;//获得节点层数var i,level,iLen:integer;begin   level:=-1 ;   iLen:=0;  if (sFormat<>'') and (sCode<>'') then    for i:=1 to Length(sFormat) do //分析编码格式,找出当前代码层次    begin     iLen:=iLen+StrToInt(sFormat[i]);   if Length(sCode)=iLen then    begin    level:=i;    break;   end;  end;  result:=level;end;procedure LoadTree(tree:TTreeview;treeDB:TDataSet;id,mc:string);//初始化树var   curID,nodeTxt:string;   level:integer;   mynode:array[0..3] of TTreenode;begin//初始化变量   //Screen.Cursor:=crHourGlass;   tree.Enabled:=True;   tree.Items.Clear;   level:=0 ;   tree.items.clear;//设置根节点   mynode[level]:=tree.items.add(Tree.Topitem,cTreeRootTxt);   mynode[level].ImageIndex:=1;//遍历数据表,利用编码字段记录排序规律,依次添加树节点     with treeDB do      begin      try      if not Active then open;        first;     while not Eof do       begin        curID:=trim(FieldByName(id).AsString);        nodeTxt:=curID+'-'+trim(FieldByName(mc).AsString);        level:=GetNodeLevel(cTreeCodeFormat,curID);//这里返回代码的层次数      if level>0 then        begin        //增加下一节点时,用添加子节点的方法可轻松实现节点间的层次关系        //注意:这里的父节点是用当前节点的上一级节点mynode[level-1]            mynode[level]:=tree.items.addchild(mynode[level-1],nodeTxt);            mynode[level].ImageIndex:=2;        end;           next;//下一条记录        end;        finally;            close;        End;        mynode[0].expand(False);        Screen.Cursor:=crDefault;    end;end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j:integer;
      s,s1:string;
      node,subnode:TTreeNode;
      m,n,m1,n1:integer;
    begin
      m1:=0;
      form1.TreeView1.Items.Clear;
      form1.Table1.Open;
      form1.Table1.First;
      i:=form1.Table1.RecordCount;
      if i>0 then
      begin
        for j:=0 to i-1 do
        begin
          s:=form1.Table1.FieldValues['pareant_id'];
          s1:=form1.Table1.FieldValues['id'];
          m:=form1.TreeView1.Items.Count;
          if m=0 then
          begin
            node:=form1.TreeView1.Items.Add(nil,s);
            subnode:=form1.TreeView1.Items.AddChild(node,s1);
          end
          else
          begin
            for n:=0 to m-1 do
            begin
              if form1.TreeView1.Items.Item[n].Text=s then
              begin
                m1:=m1+1;
                n1:=n;
              end;
            end;
            if m1=0 then
            begin
              node:=form1.TreeView1.Items.Add(nil,s);
              subnode:=form1.TreeView1.Items.AddChild(node,s1);
            end
            else
            begin
              subnode:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n1],s1);
            end;
          end;
          m1:=0;
          form1.Table1.Next;
        end;
      end;
    end;
      

  4.   

    那么上面的代码坐一下修改就可以了
    要设置treeview的images为imagelist1procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j:integer;
      s,s1:string;
      node,subnode:TTreeNode;
      m,n,m1,n1:integer;
    begin
      m1:=0;
      form1.TreeView1.Items.Clear;
      form1.Table1.Open;
      form1.Table1.First;
      i:=form1.Table1.RecordCount;
      if i>0 then
      begin
        for j:=0 to i-1 do
        begin
          s:=form1.Table1.FieldValues['pareant_id'];
          s1:=form1.Table1.FieldValues['id'];
          m:=form1.TreeView1.Items.Count;
          if m=0 then
          begin
            node:=form1.TreeView1.Items.Add(nil,s);
            node.ImageIndex:=0;——————————————————加上这一句
            subnode:=form1.TreeView1.Items.AddChild(node,s1);
            subnode.ImageIndex:=1;————————————————加上这一句
          end
          else
          begin
            for n:=0 to m-1 do
            begin
              if form1.TreeView1.Items.Item[n].Text=s then
              begin
                m1:=m1+1;
                n1:=n;
              end;
            end;
            if m1=0 then
            begin
              node:=form1.TreeView1.Items.Add(nil,s);
              subnode:=form1.TreeView1.Items.AddChild(node,s1);
            end
            else
            begin
              subnode:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n1],s1);
            end;
          end;
          m1:=0;
          form1.Table1.Next;
        end;
      end;
    end;
      

  5.   

    不好意思
    少加了三句
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j:integer;
      s,s1:string;
      node,subnode:TTreeNode;
      m,n,m1,n1:integer;
    begin
      m1:=0;
      form1.TreeView1.Items.Clear;
      form1.Table1.Open;
      form1.Table1.First;
      i:=form1.Table1.RecordCount;
      if i>0 then
      begin
        for j:=0 to i-1 do
        begin
          s:=form1.Table1.FieldValues['pareant_id'];
          s1:=form1.Table1.FieldValues['id'];
          m:=form1.TreeView1.Items.Count;
          if m=0 then
          begin
            node:=form1.TreeView1.Items.Add(nil,s);
            node.ImageIndex:=0;——————————————加上这句
            subnode:=form1.TreeView1.Items.AddChild(node,s1);
            subnode.ImageIndex:=1;——————————————加上这句
          end
          else
          begin
            for n:=0 to m-1 do
            begin
              if form1.TreeView1.Items.Item[n].Text=s then
              begin
                m1:=m1+1;
                n1:=n;
              end;
            end;
            if m1=0 then
            begin
              node:=form1.TreeView1.Items.Add(nil,s);
              node.ImageIndex:=0;——————————————加上这句
              subnode:=form1.TreeView1.Items.AddChild(node,s1);
              subnode.ImageIndex:=1;——————————————加上这句
            end
            else
            begin
              subnode:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n1],s1);
              subnode.ImageIndex:=1;——————————————加上这句
            end;
          end;
          m1:=0;
          form1.Table1.Next;
        end;
      end;
    end;
      

  6.   

    3.
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j:integer;
      s,s1:string;
      node,subnode:TTreeNode;
      m,n,m1,n1:integer;
    begin
      m1:=0;
      form1.TreeView1.Items.Clear;
      form1.Table1.Open;
      form1.Table1.First;
      i:=form1.Table1.RecordCount;
      if i>0 then
      begin
        for j:=0 to i-1 do
        begin
          s:=form1.Table1.FieldValues['pareant_id'];
          s1:=form1.Table1.FieldValues['id'];
          m:=form1.TreeView1.Items.Count;
          if m=0 then
          begin
            node:=form1.TreeView1.Items.Add(nil,s);
            node.ImageIndex:=0;
            node.SelectedIndex:=2;————————————加上这句
            subnode:=form1.TreeView1.Items.AddChild(node,s1);
            subnode.ImageIndex:=1;
            subnode.SelectedIndex:=3;————————————加上这句
          end
          else
          begin
            for n:=0 to m-1 do
            begin
              if form1.TreeView1.Items.Item[n].Text=s then
              begin
                m1:=m1+1;
                n1:=n;
              end;
            end;
            if m1=0 then
            begin
              node:=form1.TreeView1.Items.Add(nil,s);
              node.ImageIndex:=0;
              node.SelectedIndex:=2;————————————加上这句
              subnode:=form1.TreeView1.Items.AddChild(node,s1);
              subnode.ImageIndex:=1;
              subnode.SelectedIndex:=3;————————————加上这句
            end
            else
            begin
              subnode:=form1.TreeView1.Items.AddChild(form1.TreeView1.Items.Item[n1],s1);
              subnode.ImageIndex:=1;
              subnode.SelectedIndex:=3;————————————加上这句
            end;
          end;
          m1:=0;
          form1.Table1.Next;
        end;
      end;
    end;
      

  7.   

    顺便问一下,如何在节点上显示name的信息呀?
    谢谢了