Passando função como parametro
Como faco para passar uma funcao ou procedure como parametro?
Ex:
procedure teste (funcao);
begin
...
//Aqui estaria chamando a funcao que passei como parametro
funcao
...
end;
Ex:
procedure teste (funcao);
begin
...
//Aqui estaria chamando a funcao que passei como parametro
funcao
...
end;
Delphiz
Curtidas 0
Respostas
Luciano Pimenta®
18/09/2003
procedure teste (funcao);
[b:227efd0251]var
vVariavel : mesmo tipo do retorno da função[/b:227efd0251]
begin
...
//Aqui estaria chamando a funcao que passei como parametro
[b:227efd0251]vVariavel := funcao [/b:227efd0251]
...
end;
[b:227efd0251]var
vVariavel : mesmo tipo do retorno da função[/b:227efd0251]
begin
...
//Aqui estaria chamando a funcao que passei como parametro
[b:227efd0251]vVariavel := funcao [/b:227efd0251]
...
end;
GOSTEI 0
Delphiz
18/09/2003
Desculpe-me.
Vou explicar melhor.
Ex:
procedure principal;
begin
//Passando o nome da funcao que quero chamar com os devidos parametros. Pode ate ser o ponteiro(endereco da procecdure) passando como parametro talvez.
exemplo(Nome_da_procedure_com_parametros);
end;
procedure exemplo (fn);
begin
...//codigos
//Estaria chamando minha funcao que passei como parametro
fn;
...//codigos
end;
Vou explicar melhor.
Ex:
procedure principal;
begin
//Passando o nome da funcao que quero chamar com os devidos parametros. Pode ate ser o ponteiro(endereco da procecdure) passando como parametro talvez.
exemplo(Nome_da_procedure_com_parametros);
end;
procedure exemplo (fn);
begin
...//codigos
//Estaria chamando minha funcao que passei como parametro
fn;
...//codigos
end;
GOSTEI 0
Cebikyn
18/09/2003
Acho que é isso que vc quer:
[b:99f2400c6f]1.[/b:99f2400c6f] Declare um [b:99f2400c6f]type[/b:99f2400c6f] que representa a função:
Em que [i:99f2400c6f]TSuaFuncao[/i:99f2400c6f] é um nome qualquer, [i:99f2400c6f]function[/i:99f2400c6f] indica para o Delphi que trata-se de uma função e [b:99f2400c6f]of Object[/b:99f2400c6f] deve servir para alguma coisa... Os parâmetros são à sua escolha.
[b:99f2400c6f]2.[/b:99f2400c6f] Crie uma variável que armasenará a função:
[b:99f2400c6f]3.[/b:99f2400c6f] Declare a funcao propriamente dita no Form:
[b:99f2400c6f]4.[/b:99f2400c6f] Inicie a variável:
[b:99f2400c6f]5.[/b:99f2400c6f] Declare a procedure ou função que receberá a função como parâmetro:
Acho que é só. Se não for isso que vc quer, deixe uma msg.
[b:99f2400c6f]1.[/b:99f2400c6f] Declare um [b:99f2400c6f]type[/b:99f2400c6f] que representa a função:
type TSuaFuncao = function (const name: String; ordinal: Integer; address: Pointer): Boolean of Object;
Em que [i:99f2400c6f]TSuaFuncao[/i:99f2400c6f] é um nome qualquer, [i:99f2400c6f]function[/i:99f2400c6f] indica para o Delphi que trata-se de uma função e [b:99f2400c6f]of Object[/b:99f2400c6f] deve servir para alguma coisa... Os parâmetros são à sua escolha.
[b:99f2400c6f]2.[/b:99f2400c6f] Crie uma variável que armasenará a função:
var Form1: TForm1; Funcao1: TSuaFuncao;
[b:99f2400c6f]3.[/b:99f2400c6f] Declare a funcao propriamente dita no Form:
private function AquiEstaAFuncao(const name: String; ordinal: Integer; address: Pointer): Boolean;
[b:99f2400c6f]4.[/b:99f2400c6f] Inicie a variável:
Funcao1 := Form1.AquiEstaAFuncao;
[b:99f2400c6f]5.[/b:99f2400c6f] Declare a procedure ou função que receberá a função como parâmetro:
procedure Teste(Funcao: TSuaFuncao); begin Assert( Assigned( funcao )); // verifica se realmente a função foi passada no parâmetro Funcao(Parâmetros); end;
Acho que é só. Se não for isso que vc quer, deixe uma msg.
GOSTEI 0
Delphiz
18/09/2003
Mto obrigado pela sua resposta. É por ai mesmo. Eu andei pesquisando isto e vi que um dos modos é esse. Isto que estou querendo fazer se chama ´CallBack´.
Só que infelizmente o que realmente quero não é possível fazer. A funcao que eu queria passar nao poderia ter sempre os mesmo parametros. Eu sou obrigado a especificar o tipo da funcao (os parametros teriam que ser os mesmo em qtde e tipo).
Só que infelizmente o que realmente quero não é possível fazer. A funcao que eu queria passar nao poderia ter sempre os mesmo parametros. Eu sou obrigado a especificar o tipo da funcao (os parametros teriam que ser os mesmo em qtde e tipo).
GOSTEI 0