Ver Mensaje Individual
  #8  
Antiguo 13-09-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
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;

// Aqui coloca los procedimientos
// *******************************
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
  // El nombre diferencia entre mayusculas y minusculas
  s_cadena:= 'Procedimiento1';
  EjecutarPorNombre(s_cadena);
end;

Espero que te sirva
Responder Con Cita