Chamada de Função a Partir de Uma String
22/09/2004
0
É 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
Posts
22/09/2004
Rafs
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;
27/09/2004
Galodoido
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.
27/09/2004
Thomaz_prg
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.
29/09/2004
Galodoido
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?
18/12/2004
Fórum Vini
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;
Clique aqui para fazer login e interagir na Comunidade :)