J
j5203
Unregistered / Unconfirmed
GUEST, unregistred user!
元件的Create过程只进行了把元件的有序字段设为0,字符串字段设为空,等等简单的操作
(如果在Create过程里只写一句showmessage(name)就可以看出来)。那么,当我们把一个
元件从元件选项板上选中并放到一个Form上时(此时dfm文件也还没有创建),元件的某些
默认属性(比如Name属性)是怎么被赋初值的呢?
为了试验,我在Create过程除了inherited外只写了一句showmessage(name),在Loaded过程
中除了inherited外也只写了一句showmessage(name+'Loaded'),当我把一个元件从元件选
项板上选中并放到一个Form上时,第一个showmessage执行了,但结果表示出name是'',
而loaded中的showmessage根本就没有执行。这也就是说明元件的初值既不是在create过程
赋的,也不是在loaded过程赋的。
这就是那个元件的代码:
unit NewTest;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Dialogs;
type
TNewTest = class(TCustomControl)
private
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent);override;
procedure Loaded;override;
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Ke', [TNewTest]);
end;
{ TNewTest }
constructor TNewTest.Create(AOwner: TComponent);
begin
inherited;
showmessage(Name);
end;
procedure TNewTest.Loaded;
begin
inherited;
showmessage(name + 'Loaded');
end;
end.
(如果在Create过程里只写一句showmessage(name)就可以看出来)。那么,当我们把一个
元件从元件选项板上选中并放到一个Form上时(此时dfm文件也还没有创建),元件的某些
默认属性(比如Name属性)是怎么被赋初值的呢?
为了试验,我在Create过程除了inherited外只写了一句showmessage(name),在Loaded过程
中除了inherited外也只写了一句showmessage(name+'Loaded'),当我把一个元件从元件选
项板上选中并放到一个Form上时,第一个showmessage执行了,但结果表示出name是'',
而loaded中的showmessage根本就没有执行。这也就是说明元件的初值既不是在create过程
赋的,也不是在loaded过程赋的。
这就是那个元件的代码:
unit NewTest;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, Dialogs;
type
TNewTest = class(TCustomControl)
private
{ Private declarations }
protected
{ Protected declarations }
public
constructor Create(AOwner: TComponent);override;
procedure Loaded;override;
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Ke', [TNewTest]);
end;
{ TNewTest }
constructor TNewTest.Create(AOwner: TComponent);
begin
inherited;
showmessage(Name);
end;
procedure TNewTest.Loaded;
begin
inherited;
showmessage(name + 'Loaded');
end;
end.