如何定义com的属性为对象数组(100分)

  • 主题发起人 主题发起人 牛龙
  • 开始时间 开始时间

牛龙

Unregistered / Unconfirmed
GUEST, unregistred user!
比如
a.b[1].c
b是a的属性,c是对象b[1]的属性,如何做?
象listview的item似的
谢谢
 
定义b是a的子类,c是b的子类就可使用此方法。
 
tb=class(TCollectionItem)//must be Tcollectionitem
private
Fc: Tc;
procedure Setc(Value: Tc);
protected
function GetDisplayName: string; override;//need override
procedure SetIndex(Value: Integer); override;//must override
public
constructor Create(Collection: TCollection); override;//must
destructor Destroy; override;//must
procedure Assign(Source: TPersistent); override;//must
published
property c: Tc read Fc write Setc ;
end;

Tbs = class(TCollection)//must be Tcollection
private
FOwner: Ta;
function GetItem(Index: Integer): Tb;
procedure SetItem(Index: Integer; Value: Tb);
procedure Updatebs;
protected
function GetOwner: TPersistent; override;
procedure Update(Item: TCollectionItem); override;
public
constructor Create(AOwner: Ta);
function Add: Tb;
property Owner: Ta read FOwner;
property Items[Index: Integer]: Tb read GetItem write SetItem; ;
end;
ta=class(twincontrol)
private
fbs:tbs;
public
property bs[Index: Integer]: Tb read GetbFromIndex;
published
property bs: Tbs read Fbs write Setbs;
end;
then you can use a.bs[0].c
最好详细看一下tcustomlistview的source.
 
我做的是COM控件,这样行吗?
 
如果你控件的继承于Twincontrol,那么你用Delphi写的vcl控件都可以转化为
activex控件
 
com控件和vcl调用是一样的:-)
 
谁能给我提供这么一个简单的例子?万分感谢
 
com? olevarant array? I just want it!
 
这是ADO的例子:
_Collection = interface(IDispatch)
['{00000512-0000-0010-8000-00AA006D2EA4}']
function Get_Count: Integer; safecall;
function _NewEnum: IUnknown; safecall;
procedure Refresh; safecall;
property Count: Integer read Get_Count;
end;

Properties = interface(_Collection)
['{00000504-0000-0010-8000-00AA006D2EA4}']
function Get_Item(Index: OleVariant): Property_; safecall;
property Item[Index: OleVariant]: Property_ read Get_Item; default;
end;
 
COM我可真不懂,
有哪位大侠多给讲点。
 
哈哈,程云等我把手头这本书写完,你就知道如何用Delphi写COM的对象数组了
 
多人接受答案了。
 
后退
顶部