Nicht schön, aber soll ja auch nur das Prinzip zeigen:
Delphi-Quellcode:
type
TCustomFunktion = class
public
Parameter : extended;
function execute : extended; virtual; abstract;
end;
TFunktion1 = class(TCustomFunktion)
public
function execute : extended; override;
end;
TFunktion2 = class(TCustomFunktion)
public
function execute : extended; override;
end;
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Funktion1, Funktion2 : TCustomFunktion;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Funktion1 := TFunktion1.Create;
Funktion2 := TFunktion2.Create;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.AddObject('Funktion1', Funktion1);
ListBox1.Items.AddObject('Funktion2', Funktion2);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
x : extended;
begin
if Listbox1.ItemIndex = -1 then exit;
TCustomFunktion(ListBox1.Items.Objects[Listbox1.ItemIndex]).Parameter := 3;
x := TCustomFunktion(ListBox1.Items.Objects[Listbox1.ItemIndex]).Execute;
Showmessage(Format('Ergebnis %n', [x]));
end;
{ TFunktion1 }
function TFunktion1.execute: extended;
begin
result := Parameter * 7;
end;
{ TFunktion2 }
function TFunktion2.execute: extended;
begin
result := Parameter * 3
end;