B
BlueWin
Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个极其简单的控件,只是在这个控件中动态创建了另一个控件:
源代码如下:
unit glMyAction;
interface
uses
Windows, Messages, SysUtils, Classes, Controls,ActnList;
type
gltest = class(TComponent)
private
MyAction:TAction;
FParent:TComponent;
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('SelfControl', [gltest]);
end;
{ gltest }
constructor gltest.Create(AOwner: TComponent);
begin
inherited;
fparent:=AOwner;
// if csDesigning in self.ComponentState then
// begin
Myaction:=TAction.Create(aowner);
^^^^^^^
{1}{这个参数一定要用Aowner,如果用Self就没问题了,但那不是我要的结果}
Myaction.Name:='aHookPlay';
{2}{Name一定要赋值!}
Myaction.Caption:='结束播音';
// end;
end;
destructor gltest.Destroy;
begin
if assigned(myaction) then
begin
// myaction.RemoveFreeNotification(FParent);
fparent.RemoveComponent(myaction);//
Myaction.Free;//
end;
inherited;
end;
end.
//——————————————————————————————————————
其中有三个要求是必须的:
1.控件只能继承自TComponent。(不要建议我用Actionlist,compantlist等)
2.创建的控件的Create参数必须如下:
Myaction:=TAction.Create(aowner);
^^^^^^^
{这个参数一定要用Aowner,如果用Self就没问题了,但那不是我要的结果}
3.创建的控件必须有Name,如下:
Myaction.Name:='aHookPlay';
{Name一定要赋值!}
出现的问题:
1.将控件加到Form中,运行,会出现“控件名aHookPlay已经存到”的错误。
2.如果把Create中注释行加上,则运行正常,但退出工程(Close All)时出错。(该错误
会导致Delphi无法正常关闭!调试前请保存有用的项目)。
请各位高手帮我指点一下错误,谢谢!!
源代码如下:
unit glMyAction;
interface
uses
Windows, Messages, SysUtils, Classes, Controls,ActnList;
type
gltest = class(TComponent)
private
MyAction:TAction;
FParent:TComponent;
protected
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('SelfControl', [gltest]);
end;
{ gltest }
constructor gltest.Create(AOwner: TComponent);
begin
inherited;
fparent:=AOwner;
// if csDesigning in self.ComponentState then
// begin
Myaction:=TAction.Create(aowner);
^^^^^^^
{1}{这个参数一定要用Aowner,如果用Self就没问题了,但那不是我要的结果}
Myaction.Name:='aHookPlay';
{2}{Name一定要赋值!}
Myaction.Caption:='结束播音';
// end;
end;
destructor gltest.Destroy;
begin
if assigned(myaction) then
begin
// myaction.RemoveFreeNotification(FParent);
fparent.RemoveComponent(myaction);//
Myaction.Free;//
end;
inherited;
end;
end.
//——————————————————————————————————————
其中有三个要求是必须的:
1.控件只能继承自TComponent。(不要建议我用Actionlist,compantlist等)
2.创建的控件的Create参数必须如下:
Myaction:=TAction.Create(aowner);
^^^^^^^
{这个参数一定要用Aowner,如果用Self就没问题了,但那不是我要的结果}
3.创建的控件必须有Name,如下:
Myaction.Name:='aHookPlay';
{Name一定要赋值!}
出现的问题:
1.将控件加到Form中,运行,会出现“控件名aHookPlay已经存到”的错误。
2.如果把Create中注释行加上,则运行正常,但退出工程(Close All)时出错。(该错误
会导致Delphi无法正常关闭!调试前请保存有用的项目)。
请各位高手帮我指点一下错误,谢谢!!