怎么在随便哪个节点下面添加呢  或者说资源管理器的那个节点是怎么做的啊?

解决方案 »

  1.   

      哦 还有  treeview中的Indexof怎么用阿 .
      

  2.   

    先Add,然后MoveToIndexOf是返回子节点的索引。NodeA->IndexOf(NodeB); //返回NodeA子节点NodeB的索引,如果没有则返回-1
      

  3.   

    怎么知道Selected.Text的Item[?]值
      

  4.   

    Selected.Text何来Item?Selected.Index便是当前选中节点的索引。
      

  5.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      tnSel: TTreeNode ;
      tn: TTreeNode ;
      i : Integer ;
    begin
      tnSel := tv1.Selected ;//你要在那个节点加子节点就赋值给他
      i := tv1.Selected.Index ; //选中的Index  tn    := tv1.Items.Add(tnSel,'11111') ;  //同级节点
      tn    := tv1.Items.AddChild(tnsel,'1122222');//子节点
    end;
      

  6.   

    怎么得到上一节点的TXT阿 ..
      

  7.   

    type
      PTreeNode=^TreeNode;
      TreeNode=record
        ID:integer;
        Name:string;
        SqlText:string;
        ParentID:integer;
        end;//var
    //  SelectedNode:TTreeNode;procedure TFrame_DayreportTree.FillTree;
    var
      nData:PTreeNode;
      ss:TStringList;
      aNode,bNode,pNode:TTreeNode;
      i,idx:integer;
      strSQL:string;
    begin
      strSQL:='select * from  sqltext';
      DestroyTree(self);
      ADOQuery_Tree.close;
      ADOQuery_Tree.sql.Clear;
      ADOQuery_Tree.sql.Add(strSQL);
      ADOQuery_Tree.open;
      ADOQuery_Tree.first;
      ss:=TStringList.Create;
      for i:=0 to ADOQuery_Tree.recordcount-1 do
      begin
      //首先把数据库中的数据取出来构建一个一个数据结构
        new(nData);
        nData^.id:=ADOQuery_Tree.FieldByName('sid').AsInteger;
        nData^.ParentID:=ADOQuery_Tree.FieldByName('sparentid').AsInteger;
        nData^.name:=ADOQuery_Tree.FieldByName('sname').AsString;
        nData^.SqlText:=ADOQuery_Tree.FieldByName('stext').AsString;
       aNode:=TreeView_DayReportTree.Items.AddObject(nil,'('+intToStr(nData.id)+')'+nData.name,nData);
        ss.AddObject(inttostr(nData.id),aNode);
        ADOQuery_Tree.Next;
      end;
      nData:=nil;
      //下面的代码的作用是重新排列树结构,使父节点和子节点联系起来
      TreeView_DayReportTree.Items.BeginUpdate;
      aNode:=TreeView_DayReportTree.Items.GetFirstNode;
      while(not(aNode= nil)) do
      begin
        //ShowMessage(PtreeNode(aNode.Data)^.Name);
        idx:=PtreeNode(aNode.Data)^.ParentID;
        i:=ss.IndexOf(inttostr(idx));
        //ShowMessage(inttostr(i));
        if i=-1  then
        begin
          aNode.ImageIndex:=1;
          aNode.SelectedIndex :=2;
          aNode:=aNode.getNextSibling;
          continue;
        end 
        else
        begin
          //改变相应的图标
          pNode:=TTreeNode(ss.Objects[i]);
          pNode.ImageIndex:=1;
          pNode.SelectedIndex :=2;
          bNode:=aNode;
          bNode.SelectedIndex:=6;
          bNode.ImageIndex:=5;
          aNode:=aNode.getNextSibling;
          bNode.MoveTo(pNode,naAddChild);
        end;
      end;
      TreeView_DayReportTree.Items.EndUpdate;
      ss.Destroy; 
      ss:=nil;
    //  TreeView_DayReportTree.SetFocus;
    //  if SelectedNode<>nil then
    //    TreeView_DayReportTree.Selected:=SelectedNode;
    end;//销毁树,主要是销毁自己创建的树节点中的数据结构 procedure TFrame_DayreportTree.DestroyTree(Sender:TObject);
    var
      aNode:TTreeNode;
      pNode:PTreeNode;
    begin 
    //释放掉所有的DATA 
      aNode:=TreeView_DayReportTree.Items.GetFirstNode;
      while(aNode <> nil) do
      begin
        new(PNode);
        pNode:=PTreenode(aNode.Data);
        dispose(pNode);
        pNode:=nil;
        aNode:=aNode.GetNext;
      end;
      aNode:=nil;
      TreeView_DayReportTree.Items.Clear;
    end;参考一下吧,这是我程序里用的,其实也是从别的地方找来的。自己再加工一下。呵呵。