Chamada de Função a Partir de Uma String
Olá pessoal!
É possível fazer uma chamada à uma função a partir de uma string?
Como por exemplo: Tenho em uma tabela qualquer o nome da função, e dentro da aplicação o sistema faz a chamada da função armazenada no registro.
D já, valeu!
É possível fazer uma chamada à uma função a partir de uma string?
Como por exemplo: Tenho em uma tabela qualquer o nome da função, e dentro da aplicação o sistema faz a chamada da função armazenada no registro.
D já, valeu!
Galodoido
Curtidas 0
Respostas
Rafs
22/09/2004
Será necessário que você faça a comparação do registro com o nome da função. Assim:
function PrimeiraFunction(FVariavel: TTipoVariavel): TTipoRetorno; function SegundaFunction(FVariavel: TTipoVariavel): TTipoRetorno; ... ... ... begin if TTable.FieldByName(´Funcao´).AsString = ´PrimeiraFunction´ then Retorno := PrimeiraFunction(variável) else if TTable.FieldByName(´Funcao´).AsString = ´SegundaFunction´ then Retorno := SegundaFunction(variável); end;
GOSTEI 0
Galodoido
22/09/2004
Então...
Não é possível chamá-la diretamente pela string, sem fazer comparativos?
Ex.: retorno := Query1.fieldbyname(´funcao´).AsString;
Caso saiba d+ alguma coisa, e puder ajudar ficarei agradecido.
Não é possível chamá-la diretamente pela string, sem fazer comparativos?
Ex.: retorno := Query1.fieldbyname(´funcao´).AsString;
Caso saiba d+ alguma coisa, e puder ajudar ficarei agradecido.
GOSTEI 0
Thomaz_prg
22/09/2004
Dá pra vc fazer o seguinte:
Colocar todas as funções que você pode usar em uma actionList e, chamar a função que vc precisa, usando as strings mesmo.
Por exemplo:
Na sua actionList vc incluiu 2 actions com os respectivos names: cadFuncionario, cadCliente.
No evento OnExcute de cadFuncionario você coloca:
procedure TForm1.cadFuncionarioExecute( Sender:TObject );
Begin;
frmFuncionario.Showmodal;
End;
Vamos supor que na tela vc tenha um edit chamado edtFuncao e um botão chamado btExecutar.
No evento onClick ne btExecutar faça:
procedure TForm1.btExecutarClick( Sender:TOBject );
var o:TObject;
begin
if edtFuncao.Text = ´´ then exit; //sai fora se nao digitou
//procura pelo componente
o:=FindComponent( edtFuncao.text );
if o = NIL then
showmessage(´Comando e/ou Funcao nao existe!´)
else
if (o is TAction) then (o as TAction).Execute;
End;
É que um Taction é tratado como um componente, então você pode fazer uma procura pelo mesmo.
Colocar todas as funções que você pode usar em uma actionList e, chamar a função que vc precisa, usando as strings mesmo.
Por exemplo:
Na sua actionList vc incluiu 2 actions com os respectivos names: cadFuncionario, cadCliente.
No evento OnExcute de cadFuncionario você coloca:
procedure TForm1.cadFuncionarioExecute( Sender:TObject );
Begin;
frmFuncionario.Showmodal;
End;
Vamos supor que na tela vc tenha um edit chamado edtFuncao e um botão chamado btExecutar.
No evento onClick ne btExecutar faça:
procedure TForm1.btExecutarClick( Sender:TOBject );
var o:TObject;
begin
if edtFuncao.Text = ´´ then exit; //sai fora se nao digitou
//procura pelo componente
o:=FindComponent( edtFuncao.text );
if o = NIL then
showmessage(´Comando e/ou Funcao nao existe!´)
else
if (o is TAction) then (o as TAction).Execute;
End;
É que um Taction é tratado como um componente, então você pode fazer uma procura pelo mesmo.
GOSTEI 0
Galodoido
22/09/2004
Valeu Pessoal,
Vcs ajudaram bastante!... :lol:
Vcs ajudaram bastante!... :lol:
GOSTEI 0
Galodoido
22/09/2004
Bom...thomaz_prg
Eu fiz os testes com funções simples, como emitir uma mensagem na tela por exemplo.
Até aí...tudo bem! Mas logo que inseri as funções verdadeiras, ou seja minhas funções de impressão ele funciona com várias chamadas e em seguida quando vou fechar o furmulário ele apresenta o erro de Violação.
Sabe o que poderia ser isto?
Vc disse que ele é como se fosse um componente, será que tenho que destruí-lo?
Eu fiz os testes com funções simples, como emitir uma mensagem na tela por exemplo.
Até aí...tudo bem! Mas logo que inseri as funções verdadeiras, ou seja minhas funções de impressão ele funciona com várias chamadas e em seguida quando vou fechar o furmulário ele apresenta o erro de Violação.
Sabe o que poderia ser isto?
Vc disse que ele é como se fosse um componente, será que tenho que destruí-lo?
GOSTEI 0
Fórum Vini
22/09/2004
Olá,
vou ´ressuscitar´ o tópico apenas para colocar uma dica, que talvez possa ser útil para outras pessoas.
Como chamar funções pelo nome: http://jansfreeware.com/articles/delphi-call-by-name.html
Lembrando que a função deve ser published, pois só assim há RTTI gerada para ela, sendo possível chamar o método MethodAddress :wink:
T+,
Vinicius;
vou ´ressuscitar´ o tópico apenas para colocar uma dica, que talvez possa ser útil para outras pessoas.
Como chamar funções pelo nome: http://jansfreeware.com/articles/delphi-call-by-name.html
Lembrando que a função deve ser published, pois só assim há RTTI gerada para ela, sendo possível chamar o método MethodAddress :wink:
T+,
Vinicius;
GOSTEI 0