Einzelnen Beitrag anzeigen

Andreas L.

Registriert seit: 23. Mai 2011
Ort: Furth im Wald
308 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Funktion über ihren Namen als String aufrufen

  Alt 21. Mär 2013, 15:17
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)] = 'Hallothen
    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;
Andreas Lauß
Blog

Geändert von Andreas L. (21. Mär 2013 um 15:21 Uhr)
  Mit Zitat antworten Zitat