Fórum Pesquisar Função num form #368875

06/03/2009

0

Como faço para pesquisar se determinada função está definida num form?
Exemplo: Tenho um form fmModelo e nele possui uma função fEditaDado.
Como faço, no form fmMenu, para saber se a função fEditaDado está definida em fmModelo?


Crpavao

Crpavao

Responder

Posts

07/03/2009

Marco Salles

Para que que vc que isto se em designed Time , o proprio compilador
ja te avisa e te mostra tudo

Vc pode usar RTTI , para acessar , Alterar etcc..as Property em Rum Time mas so para as propriedades Publicadas

Acho que o que vc esta querendo talves possa ser resolvido com
Tecnicas de Orientação a Objeto ( Polimofirmos , Herança etc...)


Responder

Gostei + 0

09/03/2009

Wdrocha

Você tbm pode usar a função MethodAdress que retorna um ponteiro para a função espeficificada.

Com esta função vc pode verificar se a mesma existe em determinado form.

Segue um exemplo de como usá-la :

Function ExisteFuncao (MetodoName : String) : Boolean;
Var Funcao : TnotifyEvent;
   Begin

       Result := False;

       TMethod (Funcao).Code := MethodAddress(MetodoName);//Retorna um ponteiro para o método caso o mesmo exista;

           TMethod (Funcao).Data := Self;

           If TMethod (Funcao).Code <> Nil Then

                  Result := True;//Encontrou o método

   End;



Espero q isso ajude tbm...


flw.


Responder

Gostei + 0

09/03/2009

Marco Salles

Você tbm pode usar a função MethodAdress que retorna um ponteiro para a função espeficificada. 


mas internamente ela usa RTTI tb.. Essas ´funçoes´ tem que ser published

Quer dizer , so vai funcionar para funçoes definidas em PublisHed , Fora
desse escopo de visibilidade , [b:d4f8c10eae]eu particularmente não conheço[/b:d4f8c10eae]

Gostaria muito que alguem apresenta-sse algo Inovador nesse quesito

Exemplo:

Crie Dois Forms

No Form2 Defina :

type TForm2 = class(TForm) Button1: TButton; procedure Button1ClickA(Sender: TObject); private procedure OK; { Private declarations } public procedure VisibilidadePublica; { Public declarations } published procedure VisibilidadePublished; end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1ClickA(Sender: TObject); begin Showmessage(´foi´); end; procedure TForm2.VisibilidadePublica; begin showmessage(´não enxerga´); end; procedure TForm2.VisibilidadePublished; begin showmessage(´Enxerga´); end; end.


No form1 defina uses a Unit do Form2

Defina o Método

Function ExisteFuncao (const MetodoName:String;formulario:Tform) : Boolean;
  Var Funcao : TnotifyEvent;
   Begin
     Result := False;
     TMethod (Funcao).Code := formulario.MethodAddress(MetodoName);
     If TMethod (Funcao).Code <> Nil Then
       Result := True;//Encontrou o método
   End;


e num Botão OnClick Faça :

procedure TForm1.Button1Click(Sender: TObject);
Var
Funcao : TnotifyEvent;
MetodoName:String;
begin
MetodoName:=´VisibilidadePublished´;
if ExisteFuncao(MetodoName,form2) then
   Showmessage(´O Método <´+MetodoName+´> Achei pq é published´)
else
  Showmessage(´O Método <´+MetodoName+´> Não achei mas pode existir em Outro Escopo´);

MetodoName:=´VisibilidadePublica´;
if ExisteFuncao(MetodoName,form2) then
   Showmessage(´O Método <´+MetodoName+´> Achei pq é published´)
else
  Showmessage(´O Método <´+MetodoName+´> Não achei mas pode existir em Outro Escop0´);
end;


[b:d4f8c10eae]Teste para ver as consequencias !!!!!!!![/b:d4f8c10eae]


Responder

Gostei + 0

09/03/2009

Wdrocha

[quote:d0162012e8=´Marco Salles´]
Você tbm pode usar a função MethodAdress que retorna um ponteiro para a função espeficificada. 


mas internamente ela usa RTTI tb.. Essas ´funçoes´ tem que ser published

Quer dizer , so vai funcionar para funçoes definidas em PublisHed , Fora
desse escopo de visibilidade , [b:d0162012e8]eu particularmente não conheço[/b:d0162012e8]

[/quote:d0162012e8]

Bem colocado MarcoSalles, eu qdo eu preciso de algo assim...

não preciso procurar em vários forms....Geralmente uso qdo estou trab com Serialização de Objetos.....

Por exemplo, qdo preciso mudar o layout do meu form ou parte dele...

salvo os objetos em um arquivo e deixo escrevos os eventos OnClick no meu form que receberá estes objetos....


qdo carrego o layout apenas procuro pelo evento dos objetos e os atribuo dinamicamente.


o tópido está ficando interessante...

flw..


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar