Fórum Criação de Componente: Propriedade Picture #197144
26/11/2003
0
Raserafim
Curtir tópico
+ 0Posts
26/11/2003
Rafael Heise
Gostei + 0
26/11/2003
Beppe
Num painel que contém um TImage(como visto anteriormente), ele existe a imagem sozinho, e no Object Inspector o TImage aparece como uma referência. Mas para fazer como você quer, você também terá que mandar desenhar a imagem.
Use:
- TBitmap: para exibir só bitmaps;
- TIcon: para exibir ícones;
- TPicture: para exibir qualquer tipo de imagem registrada(bmp, jpeg, wmf, etc).
Digamos qu você escolha TPicture(e eu acho que devia). Você precisa ter alguns cuidados adicionais. Veja o código básico:
unit Unit1;
interface
uses
Classes, Graphics, ExtCtrls;
type
TDrawStyle = (dsDefault, dsTiled, dsStreched);
TPicturePanel = class(TPanel)
private
FPicture: TPicture;
FStyle: TDrawStyle;
procedure PictureChanged(Sender: TObject);
procedure SetPicture(const Value: TPicture);
procedure SetStyle(const Value: TDrawStyle);
protected
procedure Paint; override;
public
constructor Create(AOwner: TObject); override;
destructor Destroy; override;
published
property Picture: TPicture read FPicture write SetPicture;
property Style: TDrawStyle read FStyle write SetStyle;
end;
implementation
{ TPicturePanel }
constructor TPicturePanel.Create(AOwner: TObject);
begin
inherited;
FPicture := TPicture.Create;
FPicture.OnChange := PictureChanged;
end;
destructor TPicturePanel.Destroy;
begin
FPicture.Free;
inherited;
end;
procedure TPicturePanel.Paint;
begin
if Picture.Graphic <> nil then
case Style of
dsDefault: Canvas.Draw(BorderWidth, BorderWidth, Picture.Graphic);
dsTiled: TileImage(Canvas, BorderWidth, BorderWidth, Width - BorderWidth,
Height - BorderWidth, Picture.Graphic);
dsStreched: Canvas.StretchDraw(Rect(BorderWidth, BorderWidth, Width - BorderWidth,
Height - BorderWidth), Picture.Graphic);
end;
end;
procedure TPicturePanel.PictureChanged(Sender: TObject);
begin
Invalidate;
end;
procedure TPicturePanel.SetPicture(const Value: TPicture);
begin
FPicture.Assign(Value);
end;
procedure TPicturePanel.SetStyle(const Value: TDrawStyle);
begin
if Style <> Value then
begin
FStyle := Value;
Invalidate;
end;
end;
end.Gostei + 0
27/11/2003
Raserafim
Mas eu havia feito como disse o nosso colega zerneo, conforme eu tinha colocado em um outro tópico:
Criei um componente baseado em um TPanel, e acrescentei uma propriedade TBitmap. Quando coloco o componente no Form e vou na propriedade TBitmap e clico nos 3 pontinhos poara selecionar uma imagem aparece um erro após escolher a imagem:
Access violation at address 51002DA5 in module ‘dclusr60.bpl’. read of address 00000000.
Não basta apenas fazer isto para que eu pudesse atribuir uma imagem a propriedade?
Gostei + 0
27/11/2003
Beppe
...read of address 00000000... indica que você não criou o bitmap. Para poder dar um assign ou chamar qualquer método dele você precisar atribuir a ele uma nova instância de TBitmap.
Gostei + 0
28/11/2003
Raserafim
Gostei + 0
28/11/2003
Beppe
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)