Se você não define um local apropriado para o método ou propriedade, ele será por default declarado como published, em se tratando de componentes. Por isso que o MethodAddress funcionou!
No caso de classes normais, sem serem descendentes de TPersistent ou TComponent, a declaração default é como public. Sds. De: delphi-br@yahoogrupos.com.br [mailto:delphi...@yahoogrupos.com.br] Em nome de jalosii Enviada em: quinta-feira, 15 de julho de 2010 08:02 Para: delphi-br@yahoogrupos.com.br Assunto: Re: RES: [delphi-br] MethodAddress retornando NIL Implementei sem problemas na semana passada em um sistema meu. Qual o real problema que vc está tendo? Sua procedure seria assim: unit Unit2; interface uses ...; type TForm2 = class(TForm) ... private procedure ExecMethod(NoObjecto: TObject; Nome_Metodo: String); ... var Form2: TForm2; type //tem que ser aqui, não sei explicar por que, mas se por acima do form no mesmo type causa erro TExec = procedure of object; ... procedure TForm2.ExecMethod(NoObjecto: TObject; Nome_Metodo: String); var Rotina: TMethod; Exec: TExec; begin Rotina.Data := Pointer(NoObjeto); Rotina.Code := NoObjeto.MethodAddress(Nome_Metodo);//Aqui que causa erro pra vc? if not Assigned(Rotina.Code) then exit; Exec := TExec(Rotina); Exec; end; ... O que eu percebi é se o método que vc quer chamar nã estiver nas declarações do FORM no lugar certo, o MethodAddress não encontra, tentei por em private e não achou, troquei o local da declaração pra acima do private e funcionou, no meu caso chamo uma procedure de outro form, pra que nesse não tenha acesso a banco de dados e está funcionando. Verifique teu código e se tiver mais erros nos avise pra ver se pudemos lhe ajudar. Alosi DigitalSystem Bento Gonçalves-RS eric_developer escreveu: > isso é muito diferente do que preciso, mesmo assim obrigado. > > --- Em delphi-br@yahoogrupos.com.br <mailto:delphi-br%40yahoogrupos.com.br> , Fabricio Colombo <fabricio.colombo....@...> escreveu > >> Para o método SetFocus, seria melhor vc chamar direto o método. Por exemplo, >> se vc estiver em um form, bastaria chamar >> >> Self.FocusControl(edit1) >> >> ou vc cria um método seu >> >> procedure TForm1.SetFocusComponent(AComponent: TComponent); >> begin >> if AComponent is TWinControl then >> TWinControl(AComponent).SetFocus; >> end; >> >> Que outros métodos vc precisa invocar? Praticamente todos os métodos comuns >> entre os componentes visuais, estão presentes em TControl e TWinControl, que >> são as classes base. >> >> >> >> Em 14 de julho de 2010 20:49, eric_developer >> <developer.syst...@...>escreveu: >> >> >>> executar métodos, irei passar para minha função, o objeto e a string com o >>> nome do método, exemplo: >>> >>> myCallMethod( edit1, 'SETFOCUS' ) ; >>> >>> --- Em delphi-br@yahoogrupos.com.br <mailto:delphi-br%40yahoogrupos.com.br> <delphi-br%40yahoogrupos.com.br>, >>> Fabricio Colombo <fabricio.colombo.mva@> escreveu >>> >>> >>>> O que vc está pretendendo fazer Eric? >>>> >>>> Em 14 de julho de 2010 16:02, Mário Guedes <jmarioguedes@>escreveu: >>>> >>>>> Eu fiz assim: >>>>> >>>>> >>>>> >>>>> >>> http://eugostododelphi.blogspot.com/2010/04/como-executar-um-metodo-pelo-nom e.html >>> >>>>> *José Mário Silva Guedes* >>>>> e-mail: jmarioguedes@ <jmarioguedes%40gmail.com> >>>>> >>>>> [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]