Passando função como parametro

Delphi

18/09/2003

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;


Delphiz

Delphiz

Curtidas 0

Respostas

Luciano Pimenta®

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;


GOSTEI 0
Delphiz

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;


GOSTEI 0
Cebikyn

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:

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

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).


GOSTEI 0
POSTAR