可视控件的继承问题(50分)

  • 主题发起人 主题发起人 Adnil
  • 开始时间 开始时间
A

Adnil

Unregistered / Unconfirmed
GUEST, unregistred user!
可视控件的继承问题


TMyPanel = class(TPanel)
private
FEdit: TEdit;
public
property Edit: TEdit read FEdit write FEdit;

property BevelOuter default bvNone;
property BorderStyle default bsSingle;

constructor Create(AOwner: TComponent); override;
end;


procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Sample', [TMyPanel]);
end;

constructor TMyPanel.Create(AOwner: TComponent);
begin

inherited;

BevelOuter := bvNone;
BorderStyle := bsSingle;

FEdit := TEdit.Create(Self);
FEdit.Height := 16;
FEdit.Width := 60;
FEdit.Parent := Self;

end;



然后将控件注册,新建工程,拖入一个TMyPanel命名MyPanel1,发现两个错误:
1.属性编辑器中不能找到Edit;
2.查看Form1的dfm文件,发现BevelOuter属性和BorderStyle属性还是写入了,虽然已经设置了Default值
object MyPanel1: TMyPanel
Left = 128
Top = 96
Width = 80
Height = 20
BevelOuter = bvNone
BorderStyle = bsSingle
...
end

哪位朋友能帮我看看?如何解决这两个问题。非常感谢!
 
1. TEdit 当作property你怎么去设呀,如果真要设的话, constructor中为什么还要创建呢
你是不是只想设TEXT呀
2。就是那样的呀,dfm中记录属性值,并不管是否default.
 
agree with yaoluo,
 
上面两位的回答真让人失望,建议去看看Delphi的源代码。
 
FEdit是一个嵌入TMyPanel的控件,因此需要在构造函数中自动创建。
如果用户标记的控件属性与该属性的default值相同,则不写入dfm中,各位看看dfm的代码就知道了。
 
public-》改为 published

 
靠,真失败,原来是自己看晕了 :(

不过还是给分!
 
今天本来心情就不好,又被你嘲笑一番,真是很难受!

另:你的构件还有问题
property Edit: TEdit read FEdit write FEdit;
应该提供更详细的读写方法,而不是 “read FEdit write FEdit”,

还有应该提供注销方法
destructor TmyPanel.Destroy;
begin
inherited Destroy;
FEdit.Free;
end;

我也不多说了,我要回去了,明天再说。
 
想必改成published也有问题
 
后退
顶部