Чтобы они считались совместимыми, процедурные типы должны
иметь одно и то же число параметров, а параметры в соответствую-
щих позициях должны иметь тождественные типы. При определении
совместимости процедурных типов имена параметров значения не име-
ют. Значение nil совместимо с любым процедурным типом.
Чтобы использоваться в качестве процедурных значений, проце-
дуры и функции должны описываться с директивой far и компилиро-
ваться в состоянии с {$F+}. Кроме того, в качестве процедурных
значений не могут указываться стандартные процедуры и функции,
вложенные процедуры и функции, методы, процедуры и функции, опи-
санные с ключевым словом inline или interrupt.
Стандартные процедуры и функции - это подпрограммы, описан-
ные в модуле Unit, например, WriteLn, ReadLn, Chr или Ord. Чтобы
использовать в качестве процедурного значения стандартную проце-
дуру и функцию, напишите для нее "оболочку". Например, следующая
функция DSin совместима по присваиванию с описанным выше типом
MathFunc:
function FSin(X: Real): Real; far;
begin
FSin := Sin(X);
end;
Процедура или функция является вложенной, когда она описыва-
ется внутри другой процедуры или функции. Такие вложенные проце-
дуры и функции не могут использоваться в качестве процедурных
значений.