小弟对指针的操作很茫然!!

解决方案 »

  1.   

    给你写了一个demounit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;type
      PTest = ^Test;
      Test = record
        id:Integer;
      end;  TForm1 = class(TForm)
        TreeView1: TTreeView;
        procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      Node:TTreeNode;
      p:PTest;
    begin
      Node:=self.TreeView1.GetNodeAt(x,y);
      if Node = nil then exit;
      if Node.Data = nil then exit;
      p:=Node.Data;
      showmessage(IntToStr(p^.id));
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      p:PTest;
      Node:TTreeNode;
    begin
      Node:=TreeView1.Items.AddChild(nil,'123');
      new(p);
      p^.id:=1;
      Node.Data:=p;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    var
      IntI:Integer;
    begin
      for IntI:=TreeView1.Items.Count-1 downto 0 do
      begin
        Dispose( self.TreeView1.Items[IntI].Data );
      end;
    end;end.
      

  2.   

    p := Treeview.Items.Item[i].data
      

  3.   

    每个树节点(TTreeNode)都有一个Data属性(Pointer类型),有点像Tag一样,想怎么用就怎么用。不过有一点要注意,可能需要在适当的时候(比如FormDestroy)释放掉Data,否则会造成内存泄露。
      

  4.   

    Data属性所指向的空间, 建议在TreeView的OnDeletion事件处理代码中进行释放。这样,节点删除操作时就不需要另外再加释放内存的处理代码了。
    procedure Form1.TreeView1Deletion(Sender: TObject; Item: TListItem);
    begin
      if Item.Data <> nil then
      begin
        Dispose(Item.Data);
        Item.Data := nil;
      end;
    end;