Fórum Ajuda na criação de componentes #196583
22/11/2003
0
Sou iniciante em Delphi, porém programo em VB há mais de três anos.
Preciso criar um componente, usando um Panel com um Image dentro dele.
Não tenho a menor idéia de como fazer isso, então, peço a ajuda dos amigos.
Agradeço a atenção.
Centenaro
Curtir tópico
+ 0Posts
22/11/2003
Beppe
unit Unit1;
interface
uses
Controls, ExtCtrls;
type
TImagePanel = class(TPanel)
private
FImage: TImage;
public
constructor Create(AOwner: TObject);
destructor Destroy;
property Image: TImage read FImage;
end;
implementation
{ TImagePanel }
constructor TImagePanel.Create(AOwner: TObject);
begin
inherited Create(AOwner);
FImage := TImage.Create;
FImage.Parent := Self;
// configura as propriedades iniciais do panel e do image
end;
destructor TImagePanel.Destroy;
begin
FImage.Free;
inherited Destroy;
end;
end.Se precisar de mais ajuda é só falar...
Gostei + 0
22/11/2003
Centenaro
Obrigado pela ajuda, mas não funcionou....Dá erro na linha
inherited Create(AOwner);
Mesmo assim, obrigado pela ajuda....vou continuar tentando, mas a coisa tá complicada.
Obrigado novamente.
Gostei + 0
23/11/2003
Fórum Vini
inherited Create(AOwner);
Qual foi a mensagem de erro?
Com ela fica mais fácil ajudar...
Gostei + 0
23/11/2003
Rafaelgm
unit Unit1;
interface
uses
Controls, ExtCtrls;
type
TImagePanel = class(TPanel)
private
FImage: TImage;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Image: TImage read FImage;
end;
implementation
{ TImagePanel }
constructor TImagePanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FImage := TImage.Create(Self);
FImage.Parent := Self;
// configura as propriedades iniciais do panel e do image
end;
destructor TImagePanel.Destroy;
begin
FImage.Free;
inherited Destroy;
end;
end.Experimente agora. Aqui funcionou.
Gostei + 0
24/11/2003
Centenaro
Adicionando em uses a unit ´Classes´, consegui compilar e instalar. Agora, o problema é o seguinte: como usar? Primeiro, porque ele não aparece na barra de componentes e segundo, que usando o seguinte código, não aconteceu nada:
var btn : timagepanel; begin btn := timagepanel.create(self); btn.Top := 10; btn.Left := 100; btn.Width:=100; btn.Height := 50; btn.Visible := true; end;
E agora, o que faço?
Agradeço por toda a ajuda de vocês!
Gostei + 0
24/11/2003
Rafael Heise
Então, vamos fazer diferente!
Ao invés de TImage use TBitmap.
Então o próprio delphi já vai colocar pra você o botão para você escolher a imagem. Dai no Protected, você sobreescreve a procedure Paint
(procedure Paint; override;) para então você desenhar a imagem onde você quiser.
Bom, se você você, colocaria duas propriedade, uma do tipo TImageList, e outra integer para ser o Index. E então buscaria do ImageList a imagem, porque imagina se você quer vários panels com a mesma imagem. Associar todas as imagens ia dar uma trabalheira. E depois, se mais tarde viesse a mudar a imagem. Já pensou mudar para todos os panels da sua aplicação? Com o imagelist, você muda em apenas um lugar! Então, é isso ae!
espero ter ajudado.
Gostei + 0
24/11/2003
Smash
var btn : timagepanel; begin btn := timagepanel.create(self); btn.Top := 10; btn.Left := 100; btn.Width:=100; btn.Height := 50; btn.Visible := true; end;
Isso ta certo, mas faltou uma parte importante:
var btn : timagepanel; begin btn := timagepanel.create(self); btn.Top := 10; btn.Left := 100; btn.Width:=100; btn.Height := 50; btn.Parent := Self; end;
O Parent é o controle dentro do qual o seu objeto será exibido, e sem ele não vai funcionar a exibição. Não confundir com Owner, que é o responsável pela destruição do objeto da memória
Ah, o visible ja vem como padrão true. Não precisa mexer nele.
Quanto a aparecer na barra de componentes, isso ai já é outra história, não é necessario mas se vc quer mesmo, procura no help pela [b:026028e8a4]procedure Register[/b:026028e8a4]
[]´s smash
Gostei + 0
24/11/2003
Glauco Filoco
Tive algumas idéias e resolvi sugerir um icremento no componente,
aproveitando para tirar a dúvida que foi colocada de como fazer o
componente aparecer na palheta do Delphi:
Tudo o que eu acrescentei, deixei um comentário na linha de cima:
unit Unit1;
interface
uses
Controls, ExtCtrls;
type
TImagePanel = class(TPanel)
private
FImage: TImage;
// abaixo declarei uma rotina que será um método do componente
// o qual possibilitará que o usuário carregue uma imagem
procedure LoadImage(str_image : string);
public
constructor Create(AOwner: TObject);
destructor Destroy;
// abaixo a declaração da procedure de Registro do componente no Delphi
procedure Register;
published
// aqui na cláusula PUBLISHED, você coloca todas as pro-
// priedades que você deseja que apareçam para o usuário
// configurar na tela (através da janela Object Inspector)
property Image: TImage read FImage;
end;
implementation
{ TImagePanel }
constructor TImagePanel.Create(AOwner: TObject);
begin
inherited Create(AOwner);
FImage := TImage.Create;
FImage.Parent := Self;
FImage.Top := 10;
FImage.Top := 10;
FImage.Left := 100;
FImage.Width:=100;
FImage.Height := 50;
FImage.Visible := true;
FImage.Parent := self;
// a propriedade stretch é para adequar o tamanho imagem, de acordo
// com o espaço delimitado pelo componente
FImage.Stretch := true;
end;
destructor TImagePanel.Destroy;
begin
FImage.Free;
inherited Destroy;
end;
procedure TImagePanel.LoadImage(str_image: string);
begin
// para dar a opção ao usuário de inserir uma imagem no
// componente, desde que o formato dela seja compatível, é claro
if (str_image <> ´´) then
FImage.Picture.LoadFromFile(str_image);
end;
procedure TImagePanel.Register;
begin
// para criar, por exemplo, uma palheta chamada ´Novos´ e
// colocar dentro dela o componente que está sendo criado.
RegisterComponents(´Novos´, [TImagePanel]);
end;
end.
Gostei + 0
24/11/2003
Marcelo Saviski
property Image: TImage read FImage write FImage; {para o usuario poder escolher a imagem, se vc não quiser deixar o usuario escolher a imagem então deixa como ta}
constructor Create(AOwner: TObject); [b:250d172744]override;[/b:250d172744]
destructor Destroy; [b:250d172744]override;[/b:250d172744]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)