Não sei como vc ainda não se acostumou após tantos anos, Rubem...

Mesmo não sendo quem perguntou, OBRIGADO MAIS UMA VEZ!

Atte,
Ricardo.
 

1) Evite escrever suas mensagens usando somente LETRAS MAIÚSCULAS.

2) Revise o texto de sua mensagem. Uma mensagem bem escrita é melhor 
compreendida.

3) Vamos ajudar o Grupo e o Yahoo! Apague o conteúdo irrelevante!

--- Em ter, 13/7/10, cartouchebr <djpardalro...@hotmail.com> escreveu:

De: cartouchebr <djpardalro...@hotmail.com>
Assunto: Re: RES: [delphi-br] Como atribuir instruções a eventos em tempo de 
execução ?
Para: delphi-br@yahoogrupos.com.br
Data: Terça-feira, 13 de Julho de 2010, 12:29







 



  


    
      
      
      De nada, lista! Sempre às ordens, viu?   :(



(Ô povo sem noção! Nem ao menos agradece!)



Sds.



--- Em delphi-br@yahoogrupos.com.br, Rubem Rocha <rubem.ro...@...> escreveu

>

> "Ah, mas e se eu não tiver um método de objeto e sim uma rotina `solta', que

> não está declarada em um objeto, mas que eu queira atribuí-la a um evento?

> Como eu faço?"

> 

>  

> 

> Assim perguntaria um hipotético participante da lista. Também tem jeito sim.

> Existe uma estrutura chamada TMethod que pode representa os

> dados(argumentos) e código de um método. Com essa estrutura, é possível

> manipular eventos de forma a ser possível atribuir rotinas `soltas' de

> objetos a eventos. Vamos a um exemplo.

> 

>  

> 

> Supondo que queremos atribuir uma rotina `solta' a um botão que iremos criar

> para um formulário, de forma análoga ao exemplo fornecido pelo Eric. Usando

> a estrutura TMethod faríamos assim:

> 

>  

> 

> procedure MostraMensagem(Data: Pointer; Sender: TObject);

> 

> begin

> 

>   ShowMessage(`Evento atribuído em tempo de execução.');

> 

> end;

> 

>  

> 

> procedure MeuBotao(UmForm: TForm);

> 

> var

> 

>   Botao: TButton;

> 

>   Evento: TNotifyEvent;

> 

> begin

> 

>   Botao := TButton.Create(UmForm);

> 

>   with Botao do

> 

>   begin

> 

>     Parent := UmForm;

> 

>     SetBounds(10, UmForm.Height - Botao.Height - 40, 60, Botao.Height);

> 

>     Caption := `Close';

> 

>   end;

> 

>   TMethod(Evento).Code := @MostraMensagem;

> 

>   TMethod(Evento).Data := Botao;

> 

>   Botao.OnClick := Evento;

> 

> end;

> 

>  

> 

> (Referência: http://www.delphi3000.com/articles/article_3335.asp)

> 

>  

> 

> É importante prestar atenção para a assinatura da rotina `solta'. Ela recebe

> dois argumentos, um que consiste num dado referente à instância que irá

> chamar o código do evento, e outro que é faz parte da assinatura do evento.

> Ou seja, para atribuir rotinas `soltas' a um evento, ainda assim estas devem

> possuir a assinatura do evento precedida de um ponteiro para a instância de

> objeto que será indicada na chamada ao evento.

> 

>  

> 

> Sds.

> 

>  

> 

>  

> 

> De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em

> nome de Rubem Rocha

> Enviada em: segunda-feira, 12 de julho de 2010 11:44

> Para: delphi-br@yahoogrupos.com.br

> Assunto: RES: [delphi-br] Como atribuir instruções a eventos em tempo de

> execução ?

> Prioridade: Alta

> 

>  

> 

>   

> 

> Na verdade não seria atribuição de instruções a eventos, mas atribuições de

> métodos a eventos. Isso é simples de se fazer. Basta que o método possua uma

> assinatura igual a que é requerida pelo evento. Por exemplo, o evento

> OnClick de um botão é definido como um ponteiro para um método de um objeto

> que deve possuir como parâmetro um elemento do tipo TObject, conforme é

> definido no help da seguinte maneira:

> 

> type TNotifyEvent = procedure (Sender: TObject) of object;

> 

> (Fonte: help do Delphi)

> 

> Sabendo disto, você só pode atribuir diretamente a um evento um método de

> objeto que tenha a mesma assinatura requerida pelo evento. Não se pode

> simplesmente atribuir um ShowMessage(). Mesmo com a possibilidade existente

> na linguagem Delphi do RAD Studio 2010 de permitir atribuição anônima de

> eventos, os mesmos devem obedecer a assinatura do evento.

> 

> Portanto, colega Eric, você tem que criar um método de objeto com a

> assinatura do evento para que o mesmo possa ser atribuído diretamente a ele.

> 

> Exemplo:

> 

> { Método criado com assinatura requerida pelo evento OnClick }

> 

> procedure <ObjetoQualquer>.MostraMensagem(Sender: TObject);

> 

> begin

> 

> ShowMessage(`Evento atribuído em run-time');

> 

> end;

> 

> procedure MeuBotao(UmForm: TForm);

> 

> begin

> 

> with TButton.Create(UmForm) do

> 

> begin

> 

> Parent := UmForm;

> 

> Width := 60;

> 

> Left := 10;

> 

> Top := oFrm.Height - oBtn.Height - 40;

> 

> Caption := 'Close';

> 

> OnClick := <ObjetoQualquer>.MostraMensagem;

> 

> end; 

> 

> end;

> 

> Sds.

> 

> De: delphi-br@yahoogrupos.com.br <mailto:delphi-br%40yahoogrupos.com.br>

> [mailto:delphi-br@yahoogrupos.com.br <mailto:delphi-br%40yahoogrupos.com.br>

> ] Em

> nome de Anderson Junior

> Enviada em: domingo, 11 de julho de 2010 20:22

> Para: delphi-br@yahoogrupos.com.br <mailto:delphi-br%40yahoogrupos.com.br> ;

> memsystems-pas...@... <mailto:memsystems-pascal%40yahoo.com> 

> Assunto: Re: [delphi-br] Como atribuir instruções a eventos em tempo de

> execução ?

> 

> boa noite, vc conegui resolver seu problema com "Como atribuir 

> instruções a eventos em tempo de execução ?"

> 

> Em 19/01/2010 02:48, developer.systems escreveu:

> >

> > Boa noite a todos !

> >

> > Tenho uma função que cria o botão tem tempo de execução, mas como 

> > atribuir em tempo de execução, uma função/procedure ao evento onClick ?

> >

> > procedure MeuBotao( oFrm: TForm ) ;

> > var oBtn: TButton ;

> >

> > begin

> > oBtn:=TButton.Create(oFrm);

> > oBtn.Parent:=oFrm;

> > oBtn.Width:=60;

> > oBtn.Left:=10;

> > oBtn.Top:=oFrm.Height-oBtn.Height-40;

> > oBtn.Caption:='Close';

> > //oBtn.onClick ???? Neste evento, atribuir por exemplo: ShowMessage( 

> > 'MyButton RunTime and onClick' ) ;

> >

> > end;

> >

> > Virtualmente/Regards

> > Eric

> > Developer.Systems

> > São Paulo - Brasil

> >

> >

> > 

> 

> [As partes desta mensagem que não continham texto foram removidas]

> 

> [As partes desta mensagem que não continham texto foram removidas]

> 

> 

> 

> 

> 

> [As partes desta mensagem que não continham texto foram removidas]

>





    
     

    
    


 



  






      

[As partes desta mensagem que não continham texto foram removidas]

Responder a