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