2010/6/15 Jos� Mejuto <joshyfun en gmail.com>:
Show quoted text 38 lines
Hello christian,
Tuesday, June 15, 2010, 7:05:39 PM, you wrote:
cO> *type *Tlaclase = class
cO> � *public *
cO> � � *Procedure *Elprocedimiento(sender:tobject)
cO> � � � ----
cO> *end*
cO> �----------
cO> *public *
cO> � �*procedure *button.click(sender:tobject);
cO> � �*procedure *OtroProcedure(sender:tobject);
cO> .......
cO> *implementation*
cO> � �*procedure *Totraclase.button.click(sender:tobject);
cO> var instancia: Tlaclase;
cO> *begin*
cO> � � instancia:= Tlaclase.create (..)
cO> � � instancia.Elprocedimiento * --> Esto me genera error �*
cO> *end*
cO> � �*procedure *Totraclase.OtroProcedure(sender:tobject);
ElOtroprocedimiento no es un evento, es un procedimiento, que no se
puede cambiar. Para eso "ElOtroprocedimiento" tendr�a que ser un
evento, al estilo de "OnElOtroProcedimiento", vamos una property o
variable.
--
Best regards,
�Jos�
_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
Si se puede cambiar solo que tenes que respetar el los parametros que espera, y el error esta en @ eso es para punteros a funciones, cuando queres llamar aun metodo de una dll. No para lo que estas haciendo
Te paso un estracto para cargar procedimientos dinamicos buscandolos por nombre
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
published
Procedure LoadFormConsultaPadron;
end;
implementation
uses
windows, Constantes,inifiles;
{$R *.dfm}
Type
TExecute0 = procedure of object;
TExecute1 = procedure (aPerms:Integer)of object;
TExecute2 = procedure (aParams:string;aPerms:Integer)of object;
Implementation
//******************************************************************************
//***************************** Metodos dinamicos *****************************
//******************************************************************************
Procedure TForm1.ExecByName(aFormName:string);//,aParams:string;aPermisos:Integer);
var
Routine: TMethod;
begin
// Acceder al procedimiento
Routine.Code := MethodAddress(aFormName);
try
if Assigned(Routine.Code) then // Encontrado?
//para delphi {$WARNINGS OFF}
TExecute0(Routine)//(aParams,aPermisos);
//para delphi {$WARNINGS ON}
else
Application.MessageBox(pchar(format('No se encuentra la funci�n
"%s".',[aFormName])),'Informaci�n',MB_OK+MB_ICONHAND);
except
raise Exception.CreateFmt('Error al cargar la funci�n "%s".',[aFormName]);
end;
END;
Procedure TIWUserSession.LoadFormConsultaPadron;
begin
TFormConsultaPadron.Create(application).Show;
end;
Dependiendo de tu necesidad podes usar un metodo con mas de un parametro.
Twitter: @nenunocomar
Maximiliano Duarte
Linux User #495070
Ubuntu User #28504
El que pregunta aprende, y el que contesta aprende a responder.