Ajuda na criação de componentes
Pessoal,
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.
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
Curtidas 0
Respostas
Beppe
22/11/2003
O básico seria isto:
Se precisar de mais ajuda é só falar...
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
Centenaro
22/11/2003
Oi...
Obrigado pela ajuda, mas não funcionou....Dá erro na linha
Mesmo assim, obrigado pela ajuda....vou continuar tentando, mas a coisa tá complicada.
Obrigado novamente.
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
Fórum Vini
22/11/2003
Oi...
Obrigado pela ajuda, mas não funcionou....Dá erro na linha
Mesmo assim, obrigado pela ajuda....vou continuar tentando, mas a coisa tá complicada.
Obrigado novamente.
inherited Create(AOwner);
Qual foi a mensagem de erro?
Com ela fica mais fácil ajudar...
GOSTEI 0
Rafaelgm
22/11/2003
Fiz algumas pequenas alterações no código, se o Ataliba não se importar: :)
Experimente agora. Aqui funcionou.
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
Centenaro
22/11/2003
Oi pessoal,
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:
E agora, o que faço?
Agradeço por toda a ajuda de vocês!
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
Rafael Heise
22/11/2003
Não adianta de nada existir a propriedade imagem onde você possa adicionar uma imagem, se você não desenhor essa mesma imagem no seu panel, ou não associar o desenho ao Image.
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.
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
Smash
22/11/2003
Oi pessoal,
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:
E agora, o que faço?
Agradeço por toda a ajuda de vocês!
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
Glauco Filoco
22/11/2003
Pessoal, boa tarde a todos,
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.
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
Marcelo Saviski
22/11/2003
Detalhes:
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]
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