MethodAddress - descobrir se método existe

Delphi

14/07/2010

Boa tarde,   alguém sabe como obter o ponteiro de métodos nativos ? o código abaixo só funciona para métodos que eu crie, eu gostaria de obter o ponteiro de métodos existentes em edit, combobox, form etc   procedure TForm2.Button1Click(Sender: TObject);
var
   routine : TMethod ;
Begin    //routine.data:=pointer(edit1) ;
   //routine.Code:=edit1.MethodAddress('setfocus') ; // nome do metodo    // usando como acima, esta retornando NIL
   routine.data:=pointer(form2) ;
   routine.Code:=Form2.MethodAddress('teste') ; // nome do metodo
   if routine.Code <> nil then
      begin
      ShowMessage('OK');
      end; end;
Grato
Eric

Eric

Curtidas 0

Respostas

Marco Salles

Marco Salles

14/07/2010

pq vc nã uisa RTTI
GOSTEI 0
Eric

Eric

14/07/2010

Boa tarde Marco,   vou pesquisar sobre Runtime Type Information (RTTI), mas sabe como utilizo para o exemplo que descrevi ? achei um artigo aqui mas não me ajudou.
GOSTEI 0
Marco Salles

Marco Salles

14/07/2010

Examplo  
procedure TForm3.Button2Click(Sender: TObject);
var
  // uses RTTI Delphi 2010
  Ct:TRttiContext;
  Tipo:TRttiType;
  Met:TRttiMethod;
begin
Tipo:=CT.GetType(form3.ClassType);
  for Met in Tipo.GetMethods do
    if Met.Name = 'Edit1Exit' then  // Por exemplo testando se tem Evento OnExit do Edit 
       Showmessage('tem');
end;
GOSTEI 0
Eric

Eric

14/07/2010

Marco, obrigado novamente, mas estou usando Delphi 2009, ocorreu erros de sintaxe.   seguindo o caminho abaixo, sabe como eu continuo ? Count := GetPropList(edit1.ClassInfo, tkMethods, nil); // retornou 79
GOSTEI 0
Marco Salles

Marco Salles

14/07/2010

bem teria que rever meus bizuz antigos .. Agora é so Delphi2010   Mas antes desta engenhoca toda , pq que vc não coloca esses métodos na secção published Acho que da certo usando simplesmente seu codigo inicial    
GOSTEI 0
Pedro Saraiva.

Pedro Saraiva.

14/07/2010

Programa com códigos fontes? Ola pessoal, você programador que quer um aplicativo exemplo para fins comerciais, tenho uma dica, compre o WinPhar que vem com todos os códigos fontes e faça um programa baseado nele, sim ele também vêm com todos os componentes para instalar, voce além de ganhar um programa complidao, ganha tb os seus códigos fontes e seus componentes. O programa foi desenvolvido em Delphi 7 com banco de dados paradox, e custa apenas 20,00 reais
deem uma olhadinha ai no produto
http://produto.mercadolivre.com.br/MLB-149256966-winphar-2008-sistema-para-farmacias-e-drogarias-_JM
e ente em contato pelo e-mail pedroluissaraiva@yahoo.com.br.!
GOSTEI 0
Henrique Marti

Henrique Marti

14/07/2010

Sei que já faz uns anos que essa pergunta foi feita, mas vou responder para aqueles que enfrentarem esse problema:

Segundo a documentação (http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.TObject.MethodAddress) o método deve ser PUBLISHED para que o "MethodAddress" funcione.

Note: You can use MethodAddress for published methods only.

Testei no pré histórico DELPHI 7 e funcionou (a pesar da documentação que linkei ser no Delphi Tokyo)

Boa sorte aos aventureiros como eu!
GOSTEI 0
POSTAR