Пробую сделать как в первом параграфе в статье http://www.rsdn.ru/article/delphi/Handlers.xml
Копирую в Делфи - все работает:
- Код: Выделить всё
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
type
TCalcFunction = function(const A, B : integer) : integer;
implementation
{$R *.dfm}
function Add(const A, B : integer) : integer;
begin Result := A + B; end;
function Sub(const A, B : integer) : integer;
begin Result := A - B; end;
function Mul(const A, B : integer) : integer;
begin Result := A * B; end;
procedure Example;
var CalcFunction : TCalcFunction;
begin CalcFunction := Add;
ShowMessageFmt('CalcFunction(2, 3) = %d', [CalcFunction (2, 3)]);
CalcFunction := Sub;
ShowMessageFmt('CalcFunction(2, 3) = %d', [CalcFunction (2, 3)]);
CalcFunction := Mul;
ShowMessageFmt('CalcFunction(2, 3) = %d', [CalcFunction (2, 3)]);
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Example;
end;
end.
Копирую тоже самое в Лазарус - не хочет
- Код: Выделить всё
unit FormMain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;
type
TForm1 = class(TForm)
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
type
TCalcFunction = function(const A, B : integer) : integer;
implementation
{$R *.lfm}
function Add(const A, B : integer) : integer;
begin Result := A + B; end;
function Sub(const A, B : integer) : integer;
begin Result := A - B; end;
function Mul(const A, B : integer) : integer;
begin Result := A * B; end;
procedure Example;
var CalcFunction : TCalcFunction;
begin CalcFunction := Add;
ShowMessageFmt('CalcFunction(2, 3) = %d', [CalcFunction (2, 3)]);
CalcFunction := Sub;
ShowMessageFmt('CalcFunction(2, 3) = %d', [CalcFunction (2, 3)]);
CalcFunction := Mul;
ShowMessageFmt('CalcFunction(2, 3) = %d', [CalcFunction (2, 3)]);
end;
end.