In Delphi, procedural types (method pointers) allow you to treat procedures and functions as values that can be assigned to variables or passed to other procedures and functions.
Here's how to call a function (or procedure) as a parameter of another function (or procedure) :
- Declare the function (or procedure) that will be used as a parameter. In the example below, this is "TFunctionParameter".
- Define a function that will accept another function as a parameter. In the example below this is "DynamicFunction"
typeNote:
TFunctionParameter = function(const value : integer) : string;
...
function One(const value : integer) : string;
begin
result := IntToStr(value) ;
end;
function Two(const value : integer) : string;
begin
result := IntToStr(2 * value) ;
end;
function DynamicFunction(f : TFunctionParameter) : string;
begin
result := f(2006) ;
end;
...
//Example usage:
var
s : string;
begin
s := DynamicFunction(One) ;
ShowMessage(s) ; //will display "2006"
s := DynamicFunction(Two) ;
ShowMessage(s) ; // will display "4012"
end;
- Of course, you decide on the signature of the "TFunctionParameter": whether it is a procedure or a function, how many parameters does it take, etc.
- If "TFunctionParameter" is a method (of an instance object) you need to add the words of object to the procedural type name, as in:
TFunctionParameter = function(const value : integer) : string of object;
- If you expect "nil" to be specified as the "f" parameter, you should test for this using the Assigned function.
- Fixing the "Incompatible type: 'method pointer and regular procedure'"
Delphi tips navigator:
» How to Run your Application by Double-Clicking on a File (Register Extension)
« How to Convert RGB Color to HSB (HSV) Color

