Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Valdiney F. Lima

Evento OnClick em imagem criada dinamicamente.

Recommended Posts

Eu tenho uma imagem que é criada dinamicamente. Segue abaixo o codigo:

Image1 := TImage.Create(Self);Image1.Parent := Panel;Image1.Top	 := 5;Image1.Left	:= 24;Image1.AutoSize := true;Image1.Picture.LoadFromFile('c:\LiGi\imagens\ico_tela.bmp');Image1.Hint := 'Abrir esta ficha';Image1.ShowHint := true;Image1.OnClick := ClickDinamico('Teste de click');
Se vocês repararem no fim do código, tem um evento OnClick que chama um procedimento chamado ClickDinamico('Teste de click');

 

Porém não funciona!

 

Esse é o procedimento do ClickDinamico();

procedure TfrmPesquisar.ClickDinamico(rotulo: string);

begin

ShowMessage( rotulo );

end;

O procedimento foi declarado em TYPE e mesmo assim não funcionou.

 

Essa é a imagem do erro ao compilar

Imagem Postada

 

 

O que está errado?

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa declarar de forma diferente, assim:

 

procedure TForm1.ClickDinamico(Sender: TObject);beginShowMessage('Teste de click');end;

E atribuir assim:

 

Image1.OnClick :=ClickDinamico;

Ficando:

 

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons, ExtCtrls;type  TForm1 = class(TForm)	BitBtn1: TBitBtn;	Panel: TPanel;	Image1: TImage;	procedure BitBtn1Click(Sender: TObject);  private	{ Private declarations }  public	{ Public declarations }	procedure ClickDinamico(Sender: TObject);  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);var	Image1 : TImage;beginImage1 := TImage.Create(Self);Image1.Parent := Panel;Image1.Top	 := 5;Image1.Left	:= 24;Image1.AutoSize := true;Image1.Picture.LoadFromFile('c:\LiGi\imagens\ico_tela.bmp');Image1.Hint := 'Abrir esta ficha';Image1.ShowHint := true;Image1.OnClick :=ClickDinamico;end;procedure TForm1.ClickDinamico(Sender: TObject);beginShowMessage('Teste de click');end;end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O evento que você quer configurar não pode utilizar a procedure q você criou pois o evento onClick existe uma procedure do tipo TNotifyEvent que tem esta configuração:

 

procedure exemplo(sender : TObject);

 

nenhum outro tipo de procedure pode ser atribuída.

 

eu sugiro você criar uma procedure do tipo TNotifyEvent e nela executar o onShow. caso seja necessário o texto, crie uma nova classe dentro do form que descenda do objeto TImage e adicione a propriedade que deseja, no caso rotulo, e nesta procedure passar esta propriedade como parametro.

 

 

espero ter ajudado

 

falow http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu sugiro você criar uma procedure do tipo TNotifyEvent e nela executar o onShow. caso seja necessário o texto, crie uma nova classe dentro do form que descenda do objeto TImage e adicione a propriedade que deseja, no caso rotulo, e nesta procedure passar esta propriedade como parametro.

Teria como você me ajudar com algum exemplo? Pois eu vou precisar passar alguns parametros. Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, cada imagem vai ter que apresentar uma mensagem diferente. A imagem é um ícone que tem em uma Grid, ou seja, para cada registro do banco de dados é criado um ICONE que ao clicar deve mostrar dois textos... os quais eu pego do banco de dados.Exemplo;imagem 1 = ClickDinamico('5','casa');imagem 2 = ClickDinamico('15','casa');imagem 3 = ClickDinamico('8','apartamento');imagem 4 = ClickDinamico('19','escritorio');Compreendem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma usando somente as propriedades do TImage seria usando o Hint e a Tag, fazendo:

 

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons, ExtCtrls;type  TForm1 = class(TForm)	BitBtn1: TBitBtn;	Panel: TPanel;	procedure BitBtn1Click(Sender: TObject);  private	{ Private declarations }  public	{ Public declarations }	procedure ClickDinamico(Sender: TObject);  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);var	Image1 : TImage;beginImage1:=TImage.Create(Self);Image1.Parent:=Panel;Image1.Top:=5;Image1.Left:=24;Image1.AutoSize:=True;Image1.Picture.LoadFromFile('c:\LiGi\imagens\ico_tela.bmp');Image1.Tag:=5;Image1.Hint:='Casa';Image1.OnClick:=ClickDinamico;end;procedure TForm1.ClickDinamico(Sender: TObject);beginShowMessage((Sender as TImage).Hint + #13 + IntToStr((Sender as TImage).Tag));end;end.

No caso no Hint para a sua string, e na Tag o número.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma usando somente as propriedades do TImage seria usando o Hint e a Tag, fazendo:

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons, ExtCtrls;type  TForm1 = class(TForm)	BitBtn1: TBitBtn;	Panel: TPanel;	procedure BitBtn1Click(Sender: TObject);  private	{ Private declarations }  public	{ Public declarations }	procedure ClickDinamico(Sender: TObject);  end;var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);var	Image1 : TImage;beginImage1:=TImage.Create(Self);Image1.Parent:=Panel;Image1.Top:=5;Image1.Left:=24;Image1.AutoSize:=True;Image1.Picture.LoadFromFile('c:\LiGi\imagens\ico_tela.bmp');Image1.Tag:=5;Image1.Hint:='Casa';Image1.OnClick:=ClickDinamico;end;procedure TForm1.ClickDinamico(Sender: TObject);beginShowMessage((Sender as TImage).Hint + #13 + IntToStr((Sender as TImage).Tag));end;end.
No caso no Hint para a sua string, e na Tag o número.
Valeu aí Márcio!Desta forma deu certo.Abração.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O evento OnClick da imagem, chama o precedimento abaixo que por vez abre uma tela.

 

procedure TfrmPesquisar.ClickDinamico(Sender: TObject);begin	frmVisualizaImovel := TfrmVisualizaImovel.Create(application);	frmVisualizaImovel.idImovel := (Sender as TImage).Tag;	frmVisualizaImovel.Show;end;

Bom, na tela acima frmVisualizaImovel tem uma variavel do tipo integer declarada em public. Quando eu clico na imagem, ele não envia o valor para a variavel no outro formulário.

 

 

Abaixo o código da tela frmVisualizaImovel

unit uVisualizaImovel;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ExtCtrls, XPMan, StdCtrls, GIFImage, DB, ZAbstractRODataset,  ZAbstractDataset, ZDataset;type  TfrmVisualizaImovel = class(TForm)	ScrollBox1: TScrollBox;	Image1: TImage;	Image2: TImage;	Image3: TImage;	Image4: TImage;	Image5: TImage;	Image6: TImage;	Image7: TImage;	Image8: TImage;	Image9: TImage;	Image10: TImage;	Image11: TImage;	Image12: TImage;	Image13: TImage;	Panel1: TPanel;	XPManifest1: TXPManifest;	GroupBox1: TGroupBox;	GroupBox2: TGroupBox;	GroupBox3: TGroupBox;	GroupBox4: TGroupBox;	GroupBox5: TGroupBox;	GroupBox6: TGroupBox;	GroupBox7: TGroupBox;	GroupBox8: TGroupBox;	GroupBox10: TGroupBox;	GroupBox11: TGroupBox;	GroupBox9: TGroupBox;	GroupBox12: TGroupBox;	GroupBox13: TGroupBox;	Image14: TImage;	GroupBox14: TGroupBox;	GroupBox15: TGroupBox;	GroupBox16: TGroupBox;	GroupBox17: TGroupBox;	GroupBox18: TGroupBox;	Label1: TLabel;	Label2: TLabel;	Label3: TLabel;	Label4: TLabel;	Label5: TLabel;	Label6: TLabel;	Label7: TLabel;	Label8: TLabel;	Label9: TLabel;	Label10: TLabel;	Label11: TLabel;	Label12: TLabel;	Label13: TLabel;	Label14: TLabel;	Label15: TLabel;	Label16: TLabel;	Label17: TLabel;	Label18: TLabel;	Label19: TLabel;	RadioButton1: TRadioButton;	RadioButton2: TRadioButton;	Button1: TButton;	Button2: TButton;	Button3: TButton;	Shape1: TShape;	Shape2: TShape;	Label20: TLabel;	ZQuery1: TZQuery;	procedure Button3Click(Sender: TObject);	procedure FormShow(Sender: TObject);	procedure FormClose(Sender: TObject; var Action: TCloseAction);  private	  public	idImovel: integer;  end;var  frmVisualizaImovel: TfrmVisualizaImovel;implementationuses uBancoDeDados, uConexao;{$R *.dfm}procedure TfrmVisualizaImovel.Button3Click(Sender: TObject);begin  Close;end;procedure TfrmVisualizaImovel.FormShow(Sender: TObject);var  sql: string;begin  ScrollBox1.VertScrollBar.Position := 0;  if conecta(true) then  begin	ShowMessage( IntToStr(idImovel) );	ZQuery1.Active := false;	ZQuery1.SQL.Clear;	sql := 'SELECT *FROM tb_imovel WHERE id="'+ IntToStr(idImovel) +'"';	ZQuery1.SQL.Add( sql );	ZQuery1.Open;	ShowMessage( ZQuery1.FieldByName('edificio').AsString );	ShowMessage( sql );  end;  conecta(false);end;procedure TfrmVisualizaImovel.FormClose(Sender: TObject;  var Action: TCloseAction);begin  Action   := caFree;  frmVisualizaImovel := nil;end;end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.