Adicionar propriedade num componente Timage
Bom dia
Estou precisando criar um componente herdado do TImage e adicionar nele as propriedades para conectar à um ImageList com opção de ImageIndex.
Alguem poderia me ajudar. Eu tinha um componente como esse para delphi 7 (AbfComponents), porém ele não é compativel com o xe2.
Obrigado Pessoal.
Estou precisando criar um componente herdado do TImage e adicionar nele as propriedades para conectar à um ImageList com opção de ImageIndex.
Alguem poderia me ajudar. Eu tinha um componente como esse para delphi 7 (AbfComponents), porém ele não é compativel com o xe2.
Obrigado Pessoal.
Bruno Bonato
Curtidas 0
Respostas
Leonardo Centenaro
16/01/2013
Acredito que é só adicionar as propriedades na seção published do componente que você esta herdando, e ai codificar, para ele setar a imagem referente ao indice da imageList.
GOSTEI 0
Bruno Bonato
16/01/2013
Amigo, Você poderia dar um exemplo de como setar.
Como eu faria.
Obrigado.
Como eu faria.
Obrigado.
GOSTEI 0
Rodolpho Silva
16/01/2013
TMinhaImg = class(TImage) private FMinhaProp: String; public published property MinhaProp: String read FMinhaProp write FMinhaProp; end;
GOSTEI 0
Bruno Bonato
16/01/2013
TMinhaImg = class(TImage) private FMinhaProp: String; public published property MinhaProp: String read FMinhaProp write FMinhaProp; end;
Obrigado Rodolfo
Só preciso saber como implementar as procedures.
Obrigado novamente
GOSTEI 0
Marco Salles
16/01/2013
Bom dia
Estou precisando criar um componente herdado do TImage e adicionar nele as propriedades para conectar à um ImageList com opção de ImageIndex.
Alguem poderia me ajudar. Eu tinha um componente como esse para delphi 7 (AbfComponents), porém ele não é compativel com o xe2.
Obrigado Pessoal.
Estou precisando criar um componente herdado do TImage e adicionar nele as propriedades para conectar à um ImageList com opção de ImageIndex.
Alguem poderia me ajudar. Eu tinha um componente como esse para delphi 7 (AbfComponents), porém ele não é compativel com o xe2.
Obrigado Pessoal.
Class helper não lhe serve ?? Vc esta criando um novo componente somente pq precisa de algumas funcionalidades , a Class Helph lhe permite estender a propriedades sem ter que criar um novo componente , sem ter que instalar pacotes , compilar .. enfim
claro que vc tera o mesmo problema em saber como implementar as procedures..
GOSTEI 0
Bruno Bonato
16/01/2013
Fiz um monte de pesquisas e até agora o codigo está assim como abaixo. Porém quando troco de um imageindex para outro ele não atualiza na hora, eu tenho que apertar com o mouse em cima do timage para ele atualizar. E as propriedades Strech e Transparent não estão funcionando. Alguem pode me dar uma mãozinha. Da uma olhada no codigo e ver o que eu errei.
Obrigado.
Obrigado.
unit ImageL;
interface
uses
Classes, Controls, Graphics, Vcl.ExtCtrls, Vcl.ImgList, System.Types, System.SysUtils;
type
TImageL = class(TImage)
private
{ Private declarations }
FImages: TCustomImageList;
FImageIndex: TImageIndex;
FImageChangeLink: TChangeLink;
procedure SetImages(const Value: TCustomImageList);
procedure SetImageIndex(const Value: TImageIndex);
procedure ImageListChange(Sender: TObject);
protected
{ Protected declarations }
procedure Paint; override;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property Images: TCustomImageList read FImages write SetImages;
property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1;
end;
procedure Register;
implementation
{ TMHLStaticTip }
procedure Register;
begin
RegisterComponents('Standard', [TImageL]);
end;
constructor TImageL.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FImageIndex := -1;
FImageChangeLink := TChangeLink.Create;
FImageChangeLink.OnChange := ImageListChange;
end;
destructor TImageL.Destroy;
begin
FreeAndNil(FImageChangeLink);
inherited Destroy;
end;
procedure TImageL.Paint;
var
Rect: TRect;
ImageWidth, ImageHeight: Integer;
ImageTop, ImageLeft: Integer;
begin
inherited;
Rect := ClientRect;
if Assigned(Images) and (FImageIndex >= 0) then
begin
ImageWidth := FImages.Width;
ImageHeight := FImages.Height;
ImageLeft := Rect.Left;
ImageTop := Rect.Top + ((Height - ImageHeight) div 2);
Images.Draw(Canvas, ImageLeft, ImageTop, FImageIndex);
end;
end;
procedure TImageL.SetImages(const Value: TCustomImageList);
begin
if Value <> FImages then
begin
if Assigned(FImages) then
begin
FImages.UnRegisterChanges(FImageChangeLink);
FImages.RemoveFreeNotification(Self);
end;
FImages := Value;
if Assigned(FImages) then
begin
FImages.RegisterChanges(FImageChangeLink);
FImages.FreeNotification(Self);
end;
Invalidate;
end;
end;
procedure TImageL.SetImageIndex(const Value: TImageIndex);
begin
if FImageIndex <> Value then
begin
FImageIndex := Value;
Invalidate;
end;
end;
procedure TImageL.ImageListChange(Sender: TObject);
begin
if Sender = Images then
Self.Paint;
end;
end.GOSTEI 0
Humberto Lazo
16/01/2013
Descobri que transparências só funcionam com BMP !
GOSTEI 0