将TGlowEffect添加到派生的firemonkey TImage组件

时间:2014-10-19 03:59:25

标签: delphi

我有一个从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;  

我不知道我错过了什么,但一定很糟糕。

任何帮助将不胜感激。

1 个答案:

答案 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;