Hola. Estoy intentando hacer un componente heredado del TShape en el que se pueda mostrar una imagen en el interior, en concreto un PNG transparente.
Pongo aquí el código:
Código:
unit RoundBtn;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Math;
type
TRoundBtn = class(TShape)
private
{ Private declarations }
FImagen: TPicture;
FColorActivo: TColor;
FColorInactivo: TColor;
procedure SetPicture(Value: TPicture);
protected
{ Protected declarations }
procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
public
{ Public declarations }
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property Picture: TPicture read FImagen write SetPicture;
property ColorActivo:TColor read FColorActivo write FColorActivo default clRed;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('PRUEBAS', [TRoundBtn]);
end;
{ TRoundBtn }
constructor TRoundBtn.Create(AOwner: TComponent);
begin
inherited Create(Aowner);
FColorActivo:=clRed;
Self.pen.Color:=clWhite;
self.Pen.Width:=3;
Self.pen.Style:=psSolid;
FColorInactivo:=self.pen.Color;
self.Shape:=stCircle;
self.Brush.Color:=clSilver;
self.Width:=65;
self.Height:=65;
// Creamos el componente de imagen
FImagen:=TPicture.Create;
end;
destructor TRoundBtn.Destroy;
begin
inherited;
FImagen.free;
end;
procedure TRoundBtn.SetPicture(Value: TPicture);
begin
FImagen.Assign(Value);
// Pintarla sobre el objeto
self.Canvas.StretchDraw(Self.GetClientRect,FImagen.Bitmap);
end;
procedure TRoundBtn.WMLButtonDown(var Message: TWMLButtonDown);
begin
self.Pen.Color:=FColorActivo;
inherited;
end;
procedure TRoundBtn.WMLButtonUp(var Message: TWMLButtonUp);
begin
self.pen.color:=FColorInactivo;
inherited;
end;
end.
Lo que no consigo hacer es que se vea la imagen una vez asignada a la propiedad FImagen. También supongo que al cambiar el tamaño del objeto debería repintarse. He probado con un TImage y tampoco lo consigo.
Lo que quiero es tener una especie botón redondo con una imagen dentro. Al pulsarla se cambia el borde de color (eso ya está incluido).
Gracias por la ayuda.