Zumindest parameterlose published-Proceduren kann man so aufrufen:
Delphi-Quellcode:
procedure Call(AObject: TObject; const Methodname: string);
type
TProc = procedure of object;
var
Method: TMethod;
Proc: TProc;
begin
Method.Data := AObject;
Method.Code := AObject.MethodAddress(Methodname);
if Assigned(Method.Code) then
begin
Proc := TProc(Method);
Proc;
end;
end;
Leider weiß ich nicht, seit welcher Delphi-Version es TMethod gibt, in Delphi 2007 ist sie jedenfalls bereits vorhanden.
Den Code (oder ähnlichen) habe ich mal in der Delphi-Hilfe gesehen. Auch nicht schlecht
Rückgabewert und Parameter könnte man evtl.
(unsauber) über globale Variablen über Felder bzw. Eigenschaften lösen. Der Vollständigkeit wegen:
Delphi-Quellcode:
TForm1 = class(TForm)
...
private
FProcResult: String;
FProcParams: Array of String;
...
end;
...
//var
// ProcResult: String; // oder Variant, ...
// ProcParams: Array of String;
...
procedure TForm1.TestProc;
begin
if FProcParams[Low(FProcParams)] = 'Hallo' then
FProcResult := 'Hallo'
else
FProcResult := 'Welt';
end;
...
ButtonClick:
begin
// parameter festlegen
SetLength(FProcParams, 1);
FProcParams[1] := 'Hallo';
// Proc aufrufen
Call(Self, 'TestProc');
// Rückgabewert anzeigen
ShowMessage(FProcResult);
end;