Entry
Delphi: Procedure: Function: Dynamic: Simple: How pass function method as parameter: 1 parameter?
Feb 23rd, 2004 15:18
Knud van Eeden,
----------------------------------------------------------------------
--- Knud van Eeden --- 23 February 2004 - 11:48 pm -------------------
Delphi: Procedure: Function: Dynamic: Simple: How pass function method
as parameter: 1 parameter?
---
The trick is to use '= Function of Object' (instead of '= Function').
---
---
Steps: Overview:
1. Create a new application
2. Put e.g. a button on the form
3. Add the following text
// this does the trick
type TMyFunctionAsParameter = Function( s : string ): string of
Object;
var myfunctionasparameter : TMyFunctionAsParameter;
4. -Create now one or more functions which have also one parameter of
the same type as declared above (e.g. a string).
function TForm1.FNTestOne( s : string ): string;
begin
result := 'FNTestOne gets: ' + s;
end;
function TForm1.FNTestTwo( s : string ): string;
begin
result := 'FNTestTwo gets: ' + s;
end;
and declare the function headers as usual in the
interface section:
function FNTestOne( s : string ): string;
function FNTestTwo( s : string ): string;
5. -Call then the corresponding function by passing
the name of that function as a parameter by
1. first assigning the name to the 'var' variable
2. then calling that 'var' variable with some
parameter
myfunctionasparameter := FNTestOne;
s := myfunctionasparameter( 'some string 1' );
ShowMessage( s );
myfunctionasparameter := FNTestTwo;
s := myfunctionasparameter( 'some string 2' );
ShowMessage( s );
6. -So all together this becomes:
--- cut here ---------------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
function FNTestOne( s : string ): string;
function FNTestTwo( s : string ): string;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.FNTestOne( s : string ): string;
begin
result := 'FNTestOne gets: ' + s;
end;
function TForm1.FNTestTwo( s : string ): string;
begin
result := 'FNTestTwo gets: ' + s;
end;
procedure TForm1.Button1Click(Sender: TObject);
type TMyFunctionAsParameter = Function( s : string ): string of
Object;
var myfunctionasparameter : TMyFunctionAsParameter;
var s : string;
begin
myfunctionasparameter := FNTestOne;
s := myfunctionasparameter( 'some string 1' );
ShowMessage( s );
myfunctionasparameter := FNTestTwo;
s := myfunctionasparameter( 'some string 2' );
ShowMessage( s );
end;
end.
--- cut here ---------------------------------------------------------
---
---
Internet: see also:
---
Delphi: Procedure: Function: Dynamic: Can you give overview passing
function/procedure as parameter?
http://www.faqts.com/knowledge_base/view.phtml/aid/28931/fid/175
----------------------------------------------------------------------