应该定义为指针类型把
type
PQuestInfo = ^TQuestInfo

解决方案 »

  1.   

    当然不可以啦!
    应该是
    treeNode.Data:=Pointer(^QuestInfo)
    想一想:Pointer类型只有4个字节,而你的TQuestInfo有多大呢?当然不可以Type cast啦!
      

  2.   

    To:: zswang(伴水)(被黑中) 
    偶以为上个问题没提出,不好意思了。
      

  3.   

    To:ZeeGee(ZeeGee)所以我用pointer来转换啊。
      

  4.   

    如果定义 type
        PQuestInfo = ^TQuestInfo
    编译能通过,但是运行到atreenode.data := pndata时系统错误,提示invalid viarant type conversion 
      

  5.   

    To xzgyb(老达摩) 还是运行到atreenode.data := pointer(@QuestInfo) 时提示invalid viarant type conversion 
      

  6.   

    好使阿,不过我这个分配内存后没有释放,窗口销毁时应把它释放unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;type  PQuestInfo = ^TQuestInfo;
      TQuestInfo = record
        i: Integer;
        j: Integer;
      end;  TForm1 = class(TForm)
        TreeView1: TTreeView;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      Node: TTreeNode;
      P: PQuestInfo;
    begin
      GetMem(P, SizeOf(TQuestInfo));
      P.i := 20;
      P.j := 30;
      Node := TreeView1.Items.Add(nil, 's');
      Node.Data := P;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage(IntToStr(PQuestInfo(TreeView1.Items[0].Data).i));
    end;end.