aNode := Items.AddChildObject(Node, DisplayList.Strings[I],
        pointer(strtoint(ChildList.Strings[I])));现在,我如何才能将值从Data中取出来呢? 原来是用的一个结构指针。

解决方案 »

  1.   

    我这有例子
    unit uNavigation;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, ActnList, StdCtrls, ExtCtrls, db, dbClient;
    type
      pUser = ^User;
      User = record
        SID: string;
        sName: string;
      end;
    type
      TfrmNavigation = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TreeView1: TTreeView;
        TreeView2: TTreeView;
        Splitter1: TSplitter;
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
        procedure FormCreate(Sender: TObject);
        procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
        procedure TreeView2Deletion(Sender: TObject; Node: TTreeNode);
        procedure TreeView1Deletion(Sender: TObject; Node: TTreeNode);
        procedure FormShow(Sender: TObject);
        procedure TreeView1Click(Sender: TObject);
      private
        curDepartmentNode: TTreeNode;
        curUserNode: TTreeNode;
        { Private declarations }
        procedure GetEmployee(Node: TTreeNode);
      public
        { Public declarations }
        function addNode(sid, sName: string): boolean;
        function getDepartment(var id, name: string): boolean;
      end;var
      frmNavigation: TfrmNavigation;implementationuses uMainForm, uMyPublic, uPublicDataModule;{$R *.dfm}function TfrmNavigation.addNode(sid, sName: string): boolean;
    var
      data: PUser;
      node: ttreenode;
    begin  result := false;
      new(data);
      data.SID := SID;
      data.sName := sName;
      node := treeview2.Items.AddChild(nil, sName);
      node.Data := Data;
      node.ImageIndex := 2;
      node.SelectedIndex := 3;
      result := true;
    end;procedure TfrmNavigation.FormCloseQuery(Sender: TObject;
      var CanClose: Boolean);
    begin
      CanClose := False;
    end;procedure TfrmNavigation.FormCreate(Sender: TObject);
    begin
      treeview1.Color := rgb(157, 185, 235);
      TreeView1.OnChange := nil;
      BuildTree(treeview1, dmpublic.cdsDepartment, 0, 1);
    end;procedure TfrmNavigation.GetEmployee(Node: TTreeNode);
    const
      strSQL = 'SELECT SID,eName FROM employeetbl where did=''%s''';
    var
      db: TClientDataSet;
      did: string;
    begin
      application.Hint := '正在获得当前部门的人员列表';  did := PDepartMent(Node.Data)^.ID;
      db := TClientDataSet.Create(self);
      db.RemoteServer := dmPublic.Connection;
      db.ProviderName := 'DataSetProvider';
      db.CommandText := Format(strSQL, [did]);
      db.Active := true;
      treeview2.Items.Clear;
      treeview2.Items.BeginUpdate;
      while not db.Eof do
      begin
        addNode(trim(db['sid']), trim(db['eName']));
        db.Next;
      end;
      application.Hint := '完毕';
      //application.
      treeview2.Items.EndUpdate;
      freeandnil(db);
      curUserNode := Treeview2.Items.GetFirstNode;
    end;procedure TfrmNavigation.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
    //  if node <> nil then
    end;procedure TfrmNavigation.TreeView2Deletion(Sender: TObject;
      Node: TTreeNode);
    begin
     // if node <> nil then
       // Dispose(pUser(Node.Data));
    end;procedure TfrmNavigation.TreeView1Deletion(Sender: TObject;
      Node: TTreeNode);
    begin
     // if node <> nil then
       // Dispose(PDepartMent(Node.Data));
    end;procedure TfrmNavigation.FormShow(Sender: TObject);
    begin
       //在这里应判断用户将来有权限的部门的第一个节点
      curDepartmentNode := Treeview1.Items.GetFirstNode;
      if curDepartmentNode <> nil then
        GetEmployee(curDepartmentNode);
      // showmessage(curnode.Text );
    //  TreeView1.OnChange := TreeView1Change;
    end;procedure TfrmNavigation.TreeView1Click(Sender: TObject);
    var
      node: TTreeNode;
    begin
      Node := Treeview1.Selected;
      if node = nil then exit;
      curDepartmentNode := node;
      GetEmployee(node);
    end;function TfrmNavigation.getDepartment(var id, name: string): boolean;
    begin
      result := false;
      if curDepartmentNode = nil then exit
      else
      begin
        id := PDepartMent(curDepartmentNode.Data)^.ID;
        name := curDepartmentNode.Text;
        result := true;
      end;end;end.
      

  2.   

    ShowMessage(IntToStr(Int(Tree.Selected.Data)))
      

  3.   

    var
      n : integer;
    begin n := Integer(aNode.Data); //n 就是你需要的值end;
      

  4.   


    procedure FillData(Item: TListItem; AData: Integer);var
        I: PInteger;
    begin
        New(I);
        I^ := AData;
        Item.Data := I;
    end;

    var
      item: TTreeNode;
      i: integer;
    begin
    i:=Integer(Item.data)^;
    end;
      

  5.   

    其实不是怎么存的问题,关键是已经用了pointer指针,存了数字,怎么取的问题。问题解决了。