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


Responder a