我做了一个程序,其中的一部分是要把对象的记录存到列表中,我使用的列表是TStringList,当我用记录类型(record)做的时候能正常运行,程序代码如下:
type 
   PIDName=^TIDName;
   TIDName=record;
         ID:string;
         Name:string;
   end;
procedure createA;
var :
     MyList:TstringList;
     Data:PIDName;
     i:integer;
begin
     new (Data)
     Data^ID:=IntToStr(1);
     Data^Name:='黎明';
     MyList.AddObject(Data^Name,Pointer(Data));
      new (Data)
     Data^ID:=IntToStr(2);
     Data^Name:='刘德华';
     MyList.Move(1,0);
     MyList.AddObject(Data^Name,Pointer(Data));
     for i:=0 to MyList.cout-1 do 
     showmessage(PIDName(MyList.Object[i])^.ID);
end;
但是我把记录类型换成对象的时候却不行,代码如下(问题就在这里,编译正常,运行却有错误):
type 
   PTreeNumber=^TBasicTree//TBasicTree是我定义的一个类
var 
   PNumber:PTreeNumber;
procedure CreateA;
    MyList:TStringList.create;
    PNumber^.stringID=1;        //stringID,stringName为我定义的字段
    PNumber^.StringName:='黎明';  
    MyList.AddObject(PNumber^.stringName,Pointer(PNumber);
    showmessage(PTreeNumber(MyList.Object[0]^.StringID);
我想让我的第二段代码实现象第一段代码一样的功能,必须要用对象的方式实现,各位大哥,救命啊!!谢谢!!谢谢!!
 

解决方案 »

  1.   

    不明白你想干什么啊?为什么不用writecomponent?这个现成的操作方法很好用啊?
      

  2.   

    var
      MyList:TStringList;
      Number:TBasicTree;procedure TForm1.CreateA;
    begin    MyList:=TStringList.create;
        Number:=TBasicTree.create;//不管怎么写,这句都是你需要的。    Number.stringID=1;        
        Number.StringName:='黎明';
        MyList.AddObject(Number.stringName,Number);
        showmessage(TBasicTree(MyList.Object[0]).StringID);
    end;
      

  3.   

    用指针太麻烦,不如这样写简单明了
    TMyClass=Class
      private  public  published
        Property Name:String Read FName Write FName;
    end;
    var
      TempList:TList;
      MyClass:TMyClass;
    begin
      TempList:=TList.Create;
      MyClass:=TMyClass.Create;
      TempList.Add(MyClass);
    end;end;
      

  4.   

    是类的话就不用这样定义了
    //type 
    //   PTreeNumber=^TBasicTree//TBasicTree是我定义的一个类
    var 
       Number:TBasicTree;//这已经是一个指针了
    procedure CreateA;
        MyList:TStringList.create;
        Number:=TBasicTree.Create;
        Number.stringID=1;        //stringID,stringName为我定义的字段
        Number.StringName:='黎明';  
        MyList.AddObject(Number.stringName,Pointer(Number);
        showmessage(TBasicTree(MyList.Object[0]).StringID);
    //改为以上的就是了