请问谁可以共享一下 treeview逐级展开的代码给我看看?谢谢了。

解决方案 »

  1.   

    treeview逐级展开,没清楚你要实现的是什么。
    是要动画式的一级级打开吗?
      

  2.   

    不是。每次只展开下一级节点,不是一次都吧所有节点加入。这样节省时间。
    另外,在vb中,treeview的每个节点都有自己的唯一标志,可以存在key里面。Delphi的treeview怎么没有这个属性?
      

  3.   


    procedure TfrmDDraw030000.tvSubTreeExpanding(Sender: TObject;
      Node: TTreeNode; var AllowExpansion: Boolean);
    begin
    //加节点代码 
    end;
      

  4.   

    在vb中,treeview的每个节点都有自己的唯一标志,可以存在key里面。Delphi的treeview怎么没有这个属性?data属性是干什么的?
      

  5.   

    procedure TFrm_main.TreeView1Click(Sender: TObject);
    var
      i:integer;
    begin
      i:=0;
      if TreeView1.Selected.Level=0 then
      with Frm_DM.Q_tree2 do
      begin
        Frm_DM.Q_tree2.Close;
        Frm_DM.Q_tree2.Sql.Clear;
        Frm_DM.Q_tree2.SQL.Add('select *  from h_code_tree where sysname=:sysname');
        Frm_DM.Q_tree2.SQL.Add(' and id in(select id from h_limit  where menu=''1'' and flag=:flag)');
        Frm_DM.Q_tree2.ParamByName('sysname').AsString:=TreeView1.Selected.Text;
        Frm_DM.Q_tree2.ParamByName('flag').AsString:=Frm_login.p_userflag;
        Frm_DM.Q_tree2.Open;
        ListView1.Clear;
      end;
      if TreeView1.Selected.Level=1 then
      with Frm_DM.Q_tree2 do
      begin
        Frm_DM.Q_tree2.Close;
        Frm_DM.Q_tree2.Sql.Clear;
        Frm_DM.Q_tree2.SQL.Add('select *  from h_code_tree where menuname=:menuname');
        Frm_DM.Q_tree2.SQL.Add(' and id in(select id from h_limit  where menu=''1'' and flag=:flag)');
        Frm_DM.Q_tree2.ParamByName('menuname').AsString:=TreeView1.Selected.Text;
        Frm_DM.Q_tree2.ParamByName('flag').AsString:=Frm_login.p_userflag;
        Frm_DM.Q_tree2.Open;
        ListView1.Clear;
      end;
      while not Frm_DM.Q_tree2.Eof do
      begin
        list1:=ListView1.Items.Add;
        list1.ImageIndex:=i;
        list1.Caption:=Frm_DM.Q_tree2.FieldByName('meno').AsString;
        Frm_DM.Q_tree2.Next;
        inc(i);
      end;
    end;
      

  6.   

    用指针就是了、、
    AddChildObject()
      

  7.   

    以前处理过这个问题的.
    把地区用TreeView显示出来.有3000多个..
    要是开始时全创建至少要5秒.
    所以只能当点中其中某个节点展开时再创建子节点.
    不知楼主是否要实现这样的功能?
    在刚开始创建时要判断一下.该节点下面是否要放子节点.把+号显示出来
    还有.在展开时要判断一下其下面是否已经有子节点了.再次展开时会重复的创建.
      

  8.   


    type  PRec = ^TRec;
      TRec = record
        ID: string; //工程编号
        Name: string; //工程名称
        C_id: string; //合同编号
        C_Name: string; //合同名称
        Flag: ShortInt; //1 工程节点;0合同节点;
        ////////////////////////////lah  2004-06-28
        Money_dec: ShortInt; //  金额小数位数
        op_flow: string; //  程序业务流程
        Gq: Integer; //  工期
        GqName: string;
        GqBegDate: TDateTime; //当前工期开始时间
        GqEndDate: TDateTime; //  工期结束时间
        IsPayment: Boolean; //  是否支付
        Js_xx: string; //结算信息
        Flag_w: boolean; //千分位标志
        { TODO : sun 05-04-13 }
        C_Bdmc: string; //标段名称
      end;
    var
      ptr: Prec;
      NewNode: TTreeNode;
    begin
      TreeView.Items.Clear;
      new(ptr);
      ptr^.ID := htbh;
      Ptr^.Name := htName;
      Ptr^.Flag := 2;
      NewNode := TreeView.Items.AddObject(nil, Ptr^.Name, ptr);
      NewNode.ImageIndex := 3;
      NewNode.SelectedIndex := 3;
      

  9.   

    出现下面的错误,还是不行啊?type
        TRecUnit=record
        unitID:string;
        unitName:string;
        end;procedure TGBRMSQZCT.BizFormCreate(Sender: TObject);
    ///////////////////////////////////////////////////////////////
    // 功能描述:
    //     显示单位编码树和人员名单,其中单位树只显示跟节点和第一层子节点
    // 输入:
    // 输出:
    // 编写人:
    // 编写时间:
    //////////////////////////////////////////////////////////////
    var
    rootUnit:string;
    myUnit:Trecunit;
    begin   rootUnit:='';   //保存跟节点的单位编码值
       with datasetbroker1 do
       begin
       dataset.Active := true;    //打开数据集
       while not (dataset.eof) do
       begin
            if  DataSet.FieldByName('parent1').AsString ='-1' then
                //根节点
                begin
                node1:=treeunit.Items.Add (nil,dataset.fieldbyname('name').AsString );
                //rootUnit:=dataset.fieldbyname('unitid').asstring;
                new(Trecunit);
                Trecunit^.Unitid:=rootunit; // ERROR:Unexpected token: Trecunit
                Trecunit^.unitname:=dataset.fieldbyname('name').asstring;// ERROR:Unexpected token: Trecunit
                node1.data:=^Trecunit;// ERROR:Unexpected token: Trecunit
                dataset.Next;
                end
            else
               begin            if dataset.FieldByName('parent').AsString=rootUnit  then
                     begin
                     //第一层子节点
                     treeUnit.Items.AddChild (node1,dataset.fieldbyname('name').asstring);
                     dataset.next;
                     end
                else
                    dataset.Next ;            end;
       end;
       end;
    end;
      

  10.   

    改成type
       RecUnit=^TRecUnit;
        TRecUnit=record
        unitID:string;
        unitName:string;
        end;