Tv_Tree.Items.AddChildObject(NodeP, '用户:', PStr);
想在增加树结点"用户:"在此结点下的指针指向一个记录型的数据
记录型的结构如下:
USER: RECORD
USENAME:STRING;
USEID:STRING;
USEAGE:STRING;
USESEX:STRING;
END;userinf: user

解决方案 »

  1.   

    哪个能给我点指针方面的资料(Delphi)谢谢了,
      

  2.   

    代码片段,希望对你有所帮助:
    type
      Psid = ^TNodeData;
      TNodeData = record
        ID: integer;
        sNo, sEn: string;
    end;
    ...
    procedure TfrmStainfo.DrawTree;
    var
      aqM01, aqM02: TADOQuery;
      i, j: integer;
      Nodeo, Nodep: TTreeNode;
      sid: Psid;
    begin
      tvPer.Items.Clear;
      aqM01 := TADOQuery.Create(nil);
      with aqM01 do
      begin
        Connection := dmper.acPer;
        Sql.Clear;
        SQL.Text := 'select dep from dept order by ornum';
        Open;
      end;
      aqM02 := TADOQuery.Create(nil);
      aqM02.Connection := dmper.acper;
      if not aqM01.Eof then
      begin
        tvPer.AutoExpand := true;
        tvPer.ReadOnly := true;
        Nodeo := tvPer.Items.AddFirst(nil, '公司机构');
        for i := 0 to aqM01.RecordCount - 1 do
        begin
          Nodep := tvPer.Items.AddChild(Nodeo, aqM01.FieldByName('dep').Asstring);
          with aqM02 do
          begin
            Close;
            SQL.Clear;
            SQL.Text := 'select id, stano, name, ename from stainfo where dep =' + QuotedStr(aqM01.FieldByName('dep').AsString) + ' order by name';
            Open;
          end;
          if not aqM02.Eof then
            for j := 0 to aqM02.RecordCount - 1 do
            begin
              New(sid);
              sid^.ID := StrToInt(aqM02.FieldByName('id').AsString);
              sid^.sNo := aqM02.FieldByName('stano').AsString;
              sid^.sEn := aqM02.FieldByName('ename').AsString;
              tvPer.Items.AddChildObject(Nodep, aqM02.FieldByName('name').AsString, sid);
              aqM02.Next;
            end;
          aqM01.Next;
        end;
      end
      else
      begin
        tvPer.Items.AddFirst(nil, '请先添加部门!');
        SetBtnState(false);
      end;
      aqM02.Close;
      FreeAndNil(aqM02);
      aqM01.Close;
      FreeAndNil(aqM01);
      if tvPer.Enabled then
        tvPer.SetFocus;  for i := 0 to tvPer.Items.Count - 1 do
        if tvPer.Items[i].Data <> nil then
        begin
          tvPer.Selected := tvPer.Items[i];
          Break;
        end;
    end;
    ...
    procedure FindTree(aNo: string);
    var
      i: Integer;
    begin
      for i := 0 to tvPer.Items.Count - 1 do
        if tvPer.Items[i].Data <> nil then
          if Psid(tvPer.Items[i].Data)^.sNo = aNo then
          begin
            tvPer.Items[i].Selected := true;
            tvPer.Setfocus;
            Break;
          end;
    end;
    ...
    程序:http://www.xmflyfish.com/awind/apermis.exe
    源码:http://www.xmflyfish.com/awind/permis.rar
      

  3.   

    type
      PMyRecord = ^MyRecord;
      MyRecord = record
               ID : integer;
               name:string;
               ParentID : integer;
               end;//end of recordvar
      p : PMyRecord;
    begin
      ...
      new(p);
      p.ID := ADOQuery1.FieldByName('ID').AsInteger;
      p.name := ADOQuery1.FieldByName('部门名称').AsString;
      p.ParentID := ADOQuery1.FieldByName('上级部门ID').AsInteger;
      TreeView1.Items.AddChildObject(Node,p.name,p);
      //dispose(p);//一定要去掉这条语句,不然的话,Treeview中的Data也被dispose掉了。
      ...
    end;//use PMyRecord(Treeview1.Selected.Data).name