请高手指教
   treeview控件,如何从数据库中一个表中一个字段的所有值(string),取出,
建立一棵数,数的结点即为表中一列的每一个值。并且每个结点对应一个窗体,当
鼠标点到某个结点的时候,在一个botton中实现对应窗体的弹出。
如果 可能的话。能不能  将窗体在点到时候才动态创建!!!
   请各位高手指点!!谢谢!!!!

解决方案 »

  1.   

    for i:=0 to AdoTable.recordcount-1
    begin
      treeview1.items.add(nil,AdoTable1.fieldbyname('a').asstring);
      adotable1.next;
    end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
     TreeHitTest:THitTests;
    begin
      TreeHitTest:=Treeview1.GetHitTestInfoAt(x,y);
      if ssLeft in Shift  then
      begin
       if (htOnLabel in TreeHitTest) then showmessage('ok');//按在Label上
      end;
    end;
      

  2.   

    给个我写的生成树的函数
    id name  parent
    1   中国   0
    2   浙江   1
    3   湖南   1
    4   美国   0
    5   杭州   2
    ........
    //parent为0表示为根结点function  TForm1.Get_node(parent:integer):TTreeNode;
    var
      root,temp:TTreeNode;
      i:integer;
    begin
            ado.Close;
            ado.SQL.Clear;
            ado.SQL.Add('select parent from menu where id='+IntToStr(parent)); //求要添加的结点的父结点的parent
            ado.Open;
            i:=ado.Fields.Fields[0].AsInteger;
            ado.Close;
            if i=0 then root:=TreeView1.TopItem    //为parent为0的结点
            else
            begin
                    temp:=Get_node(i);
                    root:=temp.getFirstChild;        //取首个子结点
            end;
            ado.SQL.Clear;
            ado.SQL.Add('select id from menu where parent='+IntToStr(i)+' order by id');
            ado.Open;
            ado.First;
            while not ado.Eof do//比较兄弟,求出所求父结点
            begin
                    if ado.Fields.Fields[0].AsInteger=parent then
                            break;
                    root:=root.GetNextChild(root);
                    ado.Next;
            end;
            ado.Close;
            result:=root;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
        nod1,nod2:TTreeNode;
    begin
            TreeView1.Items.Clear;
            ADOQuery1.First;
            ADOQuery1.DisableControls;
            while not ADOQuery1.Eof do
            begin
                    if ADOQuery1.FieldByName('parent').AsInteger=0 then
                            nod1:=TreeView1.Items.Add(nil,adoQuery1.FieldValues['name'])
                    else
                    begin
                            nod2:=Get_node(adoquery1.FieldValues['parent']);   //递归求父结点
                            nod1:=TreeView1.Items.AddChild(nod2,adoquery1.FieldValues['name']);
                    end;
                    ADOQuery1.Next;
            end;
            ADOQuery1.EnableControls;
    end;