Guardando Métodos, Funcões e Procedimentos em Variáveis com Tipos Procedurais
Tipos Procedurais é um recurso interessante da linguagem Delphi que permite armazenar métodos, funções e procedimentos em variáveis e manipulá-los normalmente, passando como parâmetros, e chamando a função quando for necessário.
A sintaxe é simples:
type
TProcedimento = procedure;
TFuncao = function:string;
TFuncaoComParametro = function(Param: Integer):string;
TMetodo = procedure of object;
As duas primeiras declarações definem um tipo que armazena um procedimento e uma função sem parâmetros, respectivamente. A terceira mostra como especificar parâmetros. A ultima declaração mostra como armazenar um método de uma classe, como TForm1.MeuMetodo, por exemplo. A partir daí, basta utilizar o método normalmente:
program Procedurais;
{$APPTYPE CONSOLE}
type
TFuncao = function(Nome: string):string;
procedure ChamaProcedimento(Proc: TFuncao);
begin
if Assigned(Proc) then
WriteLn(Proc('teste'));
end;
function Duplica(Nome: string): string;
begin
Result := Nome + Nome;
end;
function Triplica(Nome: string): string;
begin
Result := Nome + Nome + Nome;
end;
begin
ChamaProcedimento(Duplica);
ChamaProcedimento(Triplica);
ReadLn;
end.
Veja no exemplo que ChamaProcedimento chama a função que ele recebe por parâmetro e escreve no console o valor retornado. O programa principal chama esse procedimento passando as duas funções ali implementadas.
Vale lembrar que esses tipos são type-safe, ou seja, o compilador verifica se o procedimento que você está passando corresponde exatamente ao esperado, ou seja, possui os mesmos parâmetros, o mesmo tipo de retorno, a mesma convenção de chamada, e assim por diante.
Se isso faz lembrar os eventos de componentes da VCL, é porque é exatamente este o mecanismo usado.
ORIGEM:
http://www.techtips.com.br/programacao/delphi/linguagem-delphi/guardando-mtodos-funces-e-procedimentos-em-variveis-com-tipos-procedurais/