问个控件开发的属性问题。 ( 积分: 10 )

  • 主题发起人 主题发起人 mill666
  • 开始时间 开始时间
M

mill666

Unregistered / Unconfirmed
GUEST, unregistred user!
开发一个类为 A的控件,类A有多个属性,其中有一个属性B,属性B下又有多个子属性。其实就是说属性B是一个类,而不是简单的比如Integer型。
然后注册安装该控件。
想在object inspertor 里面改变 B的其中一个子属性,从而改变控件A。其实就象是TEdtit
控件,如果改变它的属性Tfont的size属性值,这个时候我们看到Edit控件的大小马上变了。
当然我的控件跟Tedit类没有关系,我只是想达到改变属性的子属性。

请问应当怎么做??
 
开发一个类为 A的控件,类A有多个属性,其中有一个属性B,属性B下又有多个子属性。其实就是说属性B是一个类,而不是简单的比如Integer型。
然后注册安装该控件。
想在object inspertor 里面改变 B的其中一个子属性,从而改变控件A。其实就象是TEdtit
控件,如果改变它的属性Tfont的size属性值,这个时候我们看到Edit控件的大小马上变了。
当然我的控件跟Tedit类没有关系,我只是想达到改变属性的子属性。

请问应当怎么做??
 
起初就创建哪个对象(属性)了. 从tcomponet或者其子类继承..
 
1.子属性的类从TPersistent继承。
2.在子属性的创建的时候,把主控件的参考或者句柄等东西传递过去,以便通信.或者也可以在子属性类声明相应的事件(最好是Private/Protected的),然后在创建之后由主控件赋值.
 
请问zjan521,怎么样才能把主控件的参考或者句柄等东西传递过去??
俺对控件的开发不熟悉,能否详细说明一下??
谢了先。
 
TYourComp=class;
Txx=class(TCollectionItem)
private
protected
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
published

end;

Txxs=class(TCollection)
private
function GetItems(Index: Integer): Txx;
procedure SetItems(Index: Integer; const Value: Txx);
public
constructor Create(AOwner: TYourComp);
destructor destroy;override;
property Items[Index: Integer]: Txx read GetItems write SetItems;default;
end;

TYourComp = class(TComponent)
private
Fxxs: Txxs;
procedure Setxxs(const Value: Txxs);
public
constructor create(AOwner:TComponent);override;
published
property xxs:Txxs read Fxxs write Setxxs;
end;
constructor Txx.Create(Collection: TCollection);
begin
inherited Create(Collection);
end;

destructor Txx.Destroy;
begin
inherited;
end;

function Txxs.GetItems(Index: Integer): Txx;
begin
Result := Txx(inherited GetItem(Index));
end;

procedure Txxs.SetItems(Index: Integer; const Value: Txx);
begin
inherited SetItem(Index, Value);
end;

constructor Txxs.create(AOwner: TYourComp);
begin
inherited Create(Txx);
end;

destructor Txxs.destroy;
begin
inherited;
end;

procedure TYourComp.Setxxs(const Value: Txxs);
begin
Fxxs := Value;
end;

constructor TYourcomp.create(AOwner: TComponent);
begin
inherited;
Fxxs:=Txxs.Create(self);
end;
 
后退
顶部