Vamos a ver, podemos implementar el método que te comente antes en una unit, y solamente hacer publico el procedimiento EjecutarPorNombre. Algo así:
Código Delphi
[-]
unit Procedimientos;
interface
procedure EjecutarPorNombre(Nombre: String);
implementation
uses Windows, Sysutils, Classes;
var
Lista: TStringList;
procedure Procedimiento1;
begin
end;
procedure Procedimiento2;
begin
end;
procedure Procedimiento3;
begin
end;
procedure EjecutarPorNombre(Nombre: String);
var
i: integer;
P: Procedure;
begin
i:= Lista.IndexOf(Nombre);
if i <> -1 then
begin
P:= Pointer(Lista.Objects[i]);
P;
end else
raise Exception.Create('No se pudo encontrar el procedimiento');
end;
initialization
Lista:= nil;
Lista:= TStringList.Create;
Lista.AddObject('Procedimiento1',TObject(@Procedimiento1));
Lista.AddObject('Procedimiento2',TObject(@Procedimiento2));
Lista.AddObject('Procedimiento3',TObject(@Procedimiento3));
finalization
Lista.Free;
end.
Para llamar a un procedimiento, lo haríamos de la siguiente manera:
Código Delphi
[-]
var
s_cadena: string;
begin
s_cadena:= 'Procedimiento1';
EjecutarPorNombre(s_cadena);
end;
Espero que te sirva