Pesquisar Função num form
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?
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
Curtidas 0
Respostas
Marco Salles
06/03/2009
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...)
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...)
GOSTEI 0
Wdrocha
06/03/2009
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 :
Espero q isso ajude tbm...
flw.
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.
GOSTEI 0
Marco Salles
06/03/2009
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]
GOSTEI 0
Wdrocha
06/03/2009
[quote:d0162012e8=´Marco Salles´]
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..
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..
GOSTEI 0