Se não for published, não dá pra recuperar o nome. Dá uma pesquisada sobre VMT (Virtual Method Table). O delphi armazena a quantidade de métodos virtuais e os ponteiros dos respectivos métodos nessa "tabela", mais o nome do método em si, só se estiver no published.
Na unit JclSysUtils.pas da JVCL tem os métodos: function GetVirtualMethodCount(AClass: TClass): Integer; function GetVirtualMethod(AClass: TClass; const Index: Integer): Pointer; Além desses, tem: type PMethodEntry = ^TMethodEntry; TMethodEntry = packed record EntrySize: Word; Address: Pointer; Name: ShortString; end; PMethodTable = ^TMethodTable; TMethodTable = packed record Count: Word; FirstEntry: TMethodEntry; {Entries: array [1..65534] of TMethodEntry;} end; function GetMethodTable(AClass: TClass): PMethodTable; function GetMethodEntry(MethodTable: PMethodTable; Index: Integer): PMethodEntry; Mais o PMethodTable, por onde é possível assessar o PMethodEntry.Name, só retorna os métodos published. Faça teste e procure sobre VMT(Virtual Method Table) Em 15 de julho de 2010 17:24, Sérgio T. Uetanabaro <s...@allbras.com.br>escreveu: > > > Uma coisa que o Marcos disse é verdade. Chamadas de funções dinâmicas > somente podem ser feitas em métodos PUBLISHED pois somente com esse > marcador > o compilador coloca na VMT da classe as informações do método. Soluções via > RTTI somente com published. > > []´s > > > Sergio Uetanabaro > > De: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br> [mailto: > delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br>] Em > nome de eric_developer > Enviada em: quinta-feira, 15 de julho de 2010 17:13 > > Para: delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br> > Assunto: Re: RES: RES: RES: [delphi-br] MethodAddress retornando NIL > > > Marcos, espero que esteja bem errado e dê para fazer o que preciso. > > Sugiro muito cuidado com certas afirmações "NÃO É POSSIVEL ...", mesmo se > for um expert, assim você automaticamente cria diversos limites a si mesmo. > Teve situações parecidas onde um colega pediu algo e outro muito experiente > e talentoso, afirmou o mesmo, e eu postei a solução (código) devidamente > testada. > > Devido a minha experiência, acho mais fácil sempre deduzir que é possível > mesmo ao que me seja totalmente alheio. Um colega disse ser possível, mas > não informou como rsrs passou uma tonelada de vídeos para download, vou ver > se encontro a resposta mágica. Um outro passou o código não posso testar no > D2009, porque é para Delphi 2010 rsrs > > Tedit(sender).setfocus ou semelhante, não é o que desejo, até já criei algo > parecido e vou substituir. > > Grato, > Eric Developer Systems > > --- Em delphi-br@yahoogrupos.com.br <delphi-br%40yahoogrupos.com.br><mailto: > delphi-br%40yahoogrupos.com.br <delphi-br%2540yahoogrupos.com.br>> > > , Marcos Douglas <m...@...> escreveu > > > > Olá Eric, > > Copiei abaixo, duas de suas mensagens: > > ... > > Primeiramente sua resposta: NÃO dá pra fazer. > > > >.... > > O Delphi possui uma linguagem FORTEMENTE TIPADA. Esse é um "pró" da > > linguagem, em vários problemas... mas também pode ser um "contra" > > quando você tenta fazer algoritmos com chamadas "abstratas" e/ou > > "dinâmicas". > > > > A única possibilidade de fazer o que você quer, é utilizando métodos > > published, que já foi muito comentado por várias pessoas aqui. Não dá > > pra fazer chamadas a métodos utilizando somente uma string > > representando seu nome; isso vai contra a filosofia da linguagem, > > contra a sua base e razão de existir. > > Você consegue fazer isso em outras linguagens (vc não falou de nenhuma > > em particular) como, por exemplo, em Java. No entanto, veja que esta > > prática "quebra" o encapsulamento (um dos pilares da OOP). O mesmo > > podemos dizer de Ruby, Python, etc... > > > > Cordialmente, > > MD > > > > [As partes desta mensagem que não continham texto foram removidas] > > > [As partes desta mensagem que não continham texto foram removidas] ------------------------------------ -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> <*> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages <*> Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html