我有一个从TImage派生的具有TGlowEffect的组件。我安装了它,它在表单上可见。我可以更改发光效果参数,但是当我运行程序时程序会崩溃Rad Studio?
这是我的代码。
type
TGlowImage = class( TImage )
private
FGlowEffect: TGlowEffect;
procedure SetGlowEffect( const Value : TGlowEffect );
protected
public
constructor Create( AOwner : TComponent); override;
destructor Destroy(); override;
published
property GlowEffect : TGlowEffect read FGlowEffect write SetGlowEffect;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents( 'SomeCompany', [TGlowImage] );
end;
{ TGlowImage }
constructor TGlowImage.Create( AOwner : TComponent );
begin
inherited;
FGlowEffect := TGlowEffect.Create( Self )
end;
destructor TGlowImage.Destroy();
begin
if( Assigned( FGlowEffect ) ) then
FreeAndNil( FGlowEffect );
inherited;
end;
procedure TGlowImage.SetGlowEffect( const Value : TGlowEffect );
begin
FGlowEffect.Assign( Value );
end;
我不知道我错过了什么,但一定很糟糕。
任何帮助将不胜感激。
答案 0 :(得分:1)
问题是,您无法将TGlowEffect分配给TGlowEffect。如果运行代码,您将获得EConvertError异常(TGlowEffect无法分配给TGlowEffect)。 我认为您只能使用标准TImage并将TGlowEffect添加为ChildComponent,或者您应该将TGlowEffect实现为readonly属性,以便您可以访问效果的属性。
TGlowImage=class(TImage)
private
FGlowEffect: TGlowEffect;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy(); override;
published
property GlowEffect: TGlowEffect read FGlowEffect;
end;
{ TGlowImage }
constructor TGlowImage.Create(AOwner: TComponent);
begin
inherited;
FGlowEffect:=TGlowEffect.Create(Self);
Self.AddObject(FGlowEffect);
end;
destructor TGlowImage.Destroy();
begin
FreeAndNil(FGlowEffect);
inherited;
end;