怎样编写程序,使字段的字段能在Object inspector中编辑(50分)

  • 主题发起人 主题发起人 j5203
  • 开始时间 开始时间
J

j5203

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个控件A,A有一个字段B(B也是一个类),现在我想在A的
Object inspector中编辑B的一个字段,程序该怎样写?
(在不编写属性编辑器的情况下)
 
在published中加入就好了呀

published
property Action;
在Object inspector总就有
Action了
 
TB = class(XXX)
public
property B_set[Index: Integer]: TBItem read GetItem write SetItem; default;
end;
TA = class(TComponent)
private
FB:TB;
procedure SetB(value:TB);
published
property B: TB read TB write SetB;
end;
 
这样的话Object inspector中只能出现B属性,而出不了B_set属性.
 
我想你该把B也作为一个对象,在把B赋值给A好了
 
重要的是要在控件A的constructor中创建B这个属性的实例
看下面的例子(另:可以参看TLabeledEdit)

unit object1;

interface

uses
Windows, Messages, SysUtils, Classes;

type
TTest = class(TComponent)
private
F1: string;
F2: string;
protected

public

published
{ Published declarations }
property P1: string read F1 write f1;
property P2: string read F2 write f2;
end;


Tobject1 = class(TComponent)
private
{ Private declarations }
F1: string;
F2: string;
FObj: TTest;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent);override ;
published
{ Published declarations }
property P1: string read F1 write f2;
property P2: string read F2 write f2;
property PObj: TTest read FObj;
end;

procedure Register;

implementation

constructor Tobject1.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if Assigned(FObj) then exit;
FObj := TTest.Create(self);
FObj.Name := 'SubLabel';
SetSubComponent(True);
end;

procedure Register;
begin
RegisterComponents('test', [Tobject1]);
RegisterComponents('test', [TTest]);
end;

end.
 
关键是你的TB类的B_Set属性就该放在published段!
 
多人接受答案了。
 
后退
顶部