| Exibir mensagem anterior :: Exibir próxima mensagem | 
	
	
		| Autor | Mensagem | 
	
		| rgtt1552 Novato
 
  
 
 Registrado: Quarta-Feira, 30 de Outubro de 2019
 Mensagens: 17
 
 
 | 
			
				|  Enviada: Ter Nov 05, 2019 12:33 pm    Assunto: Atribuir .onclick para criação em massa |   |  
				| 
 |  
				| Estou criando alguns Timages em massa, e gostaria de atribuir a cada um deles, um evento .onclick diferente. Gostaria que quando fosse clicado em algum deles, mostrasse uma mensagem salva em uma matriz. Como proceder? 
 O que tenho até agora é:
 procedure TForm1.Button3Click(Sender: TObject);
 Var
 Contador : integer;
 begin
 Setlength(minhasimagens,6);
 Setlength(meuslinks,6);
 For Contador := 0 To 5 Do
 Begin
 MinhasImagens[Contador]           := TImage.Create(Form1);
 MinhasImagens[Contador].Name      := 'image'    + IntToStr(Contador);
 MinhasImagens[Contador].Parent    := Form1;
 MinhasImagens[Contador].Top       := ((Contador + 1) * 200);
 MinhasImagens[Contador].Height       := 200;
 MinhasImagens[Contador].width       := 350;
 minhasimagens[contador].stretch:=true;
 meuslinks[contador]:='ttt'+inttostr(contador);
 minhasimagens[contador].onclick:=????
 MinhasImagens[Contador].picture.loadfromfile('C:\Users\X\A.jpg');
 
 End;
 end;
 
 end.
 O link está sendo salvo na matriz MeusLinks[contador].
 Lembrando que declarei o MeusImagens e MeusLinks lá em cima, no public.
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| natanbh1 Colaborador
 
  
 
 Registrado: Terça-Feira, 15 de Março de 2011
 Mensagens: 3093
 Localização: Belo Horizonte - MG
 
 | 
			
				|  Enviada: Ter Nov 05, 2019 3:01 pm    Assunto: |   |  
				| 
 |  
				| Crie uma procedure genérica para ser atribuída ao Onclick de cada TImage: 
 Declarando a procedure no Public:
 
 
  	  | Código: |  	  | public { Public declarations }
 meuslinks: array of string;
 minhasimagens: array of timage;
 procedure Mensagem(Sender: TObject); // procedure genérica
 end;
 | 
 
 Criando a procedure:
 
 
  	  | Código: |  	  | procedure TForm1.Mensagem(Sender: TObject); begin
 ShowMessage(meuslinks[TImage(Sender).Tag]);
 end;
 | 
 
 Código de criação das imagens:
 
 
  	  | Código: |  	  | var contador: Integer;
 begin
 Setlength(minhasimagens, 6);
 Setlength(meuslinks, 6);
 
 For Contador := 0 To 5 Do
 Begin
 minhasimagens[Contador] := timage.Create(Self);
 minhasimagens[Contador].Name := 'image' + IntToStr(Contador);
 minhasimagens[Contador].Parent := Self;
 minhasimagens[Contador].Top := ((Contador + 1) * 200);
 minhasimagens[Contador].Height := 200;
 minhasimagens[Contador].width := 350;
 minhasimagens[Contador].stretch := true;
 meuslinks[Contador] := 'ttt' + IntToStr(Contador);
 minhasimagens[Contador].onclick := Mensagem;
 minhasimagens[Contador].Tag:= Contador;
 minhasimagens[Contador].picture.loadfromfile('C:\Users\X\A.jpg');
 End;
 end;
 | 
 _________________
 ''A persistência é o caminho para o êxito.''
 Charlie Chaplin
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| rgtt1552 Novato
 
  
 
 Registrado: Quarta-Feira, 30 de Outubro de 2019
 Mensagens: 17
 
 
 | 
			
				|  Enviada: Ter Nov 05, 2019 5:04 pm    Assunto: |   |  
				| 
 |  
				| Perfeito. Exatamente como eu preciso. 
 Só uma dúvida. Fui fazer um teste com uma quantidade maior de imagens e até uma certa quantidade, o delphi insere normal. O restante ele acaba inserindo tudo embolado no topo do form.
 
 Teria uma opção de solucionar?
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| rgtt1552 Novato
 
  
 
 Registrado: Quarta-Feira, 30 de Outubro de 2019
 Mensagens: 17
 
 
 | 
			
				|  Enviada: Ter Nov 05, 2019 5:07 pm    Assunto: |   |  
				| 
 |  
				| Esquece. Eu só havia setado a matriz que busca a posição de inserção das fotos como 35 e inseri uma quantidade maior de fotos. |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		|  |