Fórum Ajuda na criação de componentes #196583

22/11/2003

0

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.


Centenaro

Centenaro

Responder

Posts

22/11/2003

Beppe

O básico seria isto:

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...


Responder

Gostei + 0

22/11/2003

Centenaro

Oi...

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.


Responder

Gostei + 0

23/11/2003

Fórum Vini

Oi... 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.


Qual foi a mensagem de erro?
Com ela fica mais fácil ajudar...


Responder

Gostei + 0

23/11/2003

Rafaelgm

Fiz algumas pequenas alterações no código, se o Ataliba não se importar: :)

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.


Responder

Gostei + 0

24/11/2003

Centenaro

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:


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!


Responder

Gostei + 0

24/11/2003

Rafael Heise

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.


Responder

Gostei + 0

24/11/2003

Smash

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:

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!


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


Responder

Gostei + 0

24/11/2003

Glauco Filoco

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.


Responder

Gostei + 0

24/11/2003

Marcelo Saviski

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]


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar