起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 1062|回复: 24

【搞定】[问题]怎样用TOBJECTLIST实现自定义的对象列表**

[复制链接]
发表于 2007-2-5 17:35:18 | 显示全部楼层 |阅读模式
平台里有一个TTASKS的类,继承于TOBJECTLIST类,里边存放的就是ttask类,现在想实现存放自已定义的类的实例,怎么实现
我现在实现的类里存放了自己定义的类,但在调用时还是指向了OBJECT属性,所以每次使用时都要强制转化类,请教解决办法,怎样能做了和TTASKS类一样
谢谢
回复

使用道具 举报

发表于 2007-2-5 17:44:14 | 显示全部楼层
封装一个取对象的方法,该方法返回你需要的特定对象。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-5 17:57:48 | 显示全部楼层
二楼说得不错,可不知道怎样实现
我已经将类的ITEMS属性设成我需要存放的类型,在其它地方调用时还是指向了OBJECT的属性,在类本身的代码里调用已经指向了我需要的类型
回复 支持 反对

使用道具 举报

发表于 2007-2-5 18:16:32 | 显示全部楼层
定义自己的对象时候,用
TMyObject = class(TObject)
不要用
TMyObject = class

虽然在Delphi中,这两种写法是一样的,但是在平台上就不一样了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-6 09:11:44 | 显示全部楼层
这是我的定义,可还是实现不了]
TSPGZ = class(Tobject)
    private
    FRulesID:string;
    FAppRollbackR:string;
    FAppFinishR:string;
    FAppConclusionR:string;
    FAppName:string;
    procedure getappset(guid:string);
    public
    SPRY: TSPRYs;
    constructor Create(guid:string);
    property RulesID: string read FRulesID ;
    property AppRollbackR: string read FAppRollbackR ;
    property AppFinishR: string read FAppFinishR ;
    property AppConclusionR: string read FAppConclusionR ;
    property AppName: string read FAppName ;
   end;
    TSPRY = class(Tobject)
    private
    FRulesID,FAppmanID:string;
    FAppmanName,FAppmanNo:string;
    FAppTime,FAppmanOrder:integer;
    procedure getspryset(guid:string);
    public
    constructor Create(guid:string);
    property RulesID: string read FRulesID ;
    property AppmanID: string read FAppmanID ;
    property AppmanName: string read FAppmanName ;
    property AppmanOrder: integer read FAppmanOrder ;
    property AppmanNo: string read FAppmanNo ;
    property AppTime: integer read FAppTime ;
    end;
   TSPRYs = class(Tobjectlist)
   private

   public
   //constructor TSPRYs;Overload ;
   constructor Create(guid:string);
    Property Items[Index : Integer]: TSPRY   ;
   end;
implementation
回复 支持 反对

使用道具 举报

发表于 2007-2-6 09:30:44 | 显示全部楼层
有什么问题,请楼主明示
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-6 09:34:54 | 显示全部楼层
重新定义了一下,在本程序中调用ITEMS已经对了,但在其它程序中调用ITEMS还是指向了OBJECT,并没有指向自定义的类对象
type
  TSPGZLDY = class(TBizLibrary)
  private
    {private declarations}
  public
    {public declarations}

  end;
  TSPGZ = class(Tobject)
    private
    FRulesID:string;
    FAppRollbackR:string;
    FAppFinishR:string;
    FAppConclusionR:string;
    FAppName:string;
    fspry:tsprys;
    procedure getappset(guid:string);
    public

    constructor Create(guid:string);
    property SPRY: TSPRYs read fspry;
    property RulesID: string read FRulesID ;
    property AppRollbackR: string read FAppRollbackR ;
    property AppFinishR: string read FAppFinishR ;
    property AppConclusionR: string read FAppConclusionR ;
    property AppName: string read FAppName ;
   end;
    TSPRY = class(Tobject)
    private
    FRulesID,FAppmanID:string;
    FAppmanName,FAppmanNo:string;
    FAppTime,FAppmanOrder:integer;
    procedure getspryset(guid:string);
    public
    constructor Create(guid:string);
    property RulesID: string read FRulesID ;
    property AppmanID: string read FAppmanID ;
    property AppmanName: string read FAppmanName ;
    property AppmanOrder: integer read FAppmanOrder ;
    property AppmanNo: string read FAppmanNo ;
    property AppTime: integer read FAppTime ;
    end;
   TSPRYs = class(Tobjectlist)
   private

   public
   //constructor TSPRYs;Overload ;
   constructor Create(guid:string);
    Property Items[Index : Integer]: TSPRY   ;
   end;
implementation
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-6 09:37:25 | 显示全部楼层
还是只能如下调用
var
t:SPGZLDY.TSPGZ;
i:integer;
begin

   t:=SPGZLDY.TSPGZ.Create ('22CBE609FED84DF5A2FE48B0ABDF8E1F');
   //dialogs.ShowMessage (t.AppConclusionR +#13+t.AppFinishR +#13+t.AppRollbackR );
   // dialogs.ShowMessage (business.System.SysUtils.IntToStr (t.SPRY.Count) );
     for  i:=0 to t.SPRY.Count -1 do
    begin
    dialogs.ShowMessage((t.SPRY.Items as SPGZLDY.TSPRY).AppmanName);
    dialogs.ShowMessage((t.SPRY.Items as SPGZLDY.TSPRY).AppmanID );
    dialogs.ShowMessage((t.SPRY.Items as SPGZLDY.TSPRY).AppmanNo );
    end;
只能强制转化类型,能不能直接指向我定义的类型对象
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-6 09:40:58 | 显示全部楼层
会不会是这部分定义有问题
TSPRYs = class(Tobjectlist)
   private

   public
   //constructor TSPRYs;Overload ;
   constructor Create(guid:string);
    Property Items[Index : Integer]: TSPRY   ;
我从帮助上找到的不能用,这是我自己定义的
在帮助上ITEMS属性需要OVERLOAD
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-6 09:57:36 | 显示全部楼层
这样定义编绎不过,
TSPRYs = class(Tobjectlist)
   private
   FSPRY:tspry;
   public
   //constructor TSPRYs;Overload ;
   constructor Create(guid:string);
    Property Items[Index : Integer]: Tspry   read FSPRY ;
   end;
提示
[错误]Biz:\ZWXT\LCHJKZ\SPGZLDY.Library.pas(56, 46): Incompatible types
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2024-12-24 21:43 , Processed in 0.039038 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表