Ver Mensaje Individual
  #1  
Antiguo 23-08-2010
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Reputación: 21
mlara Va por buen camino
Función virtual...

Como ejemplo, cuando uso un objeto de la VCL, sé que puedo hacer algo como esto:

Código:
procedure TForm.MiObjetoOnEvento1(Sender: TObject);
begin
  ...
end;

procedure MiEventoAlternativo1(Sender: TObject);
begin
  ...
end;

procedure TForm.Button1Click(Sender: TObject);
begin
  ...
  MiObjeto.Evento1 := nil;
  ...
  // Aquí hago algo que involucra a MiObjeto y quiero evitar que se ejecute
  // el código del evento 1, pero más adelante sí necesito que el código
  // se ejecute, por lo cual hago nuevamente la asignación.
  ...
  MiObjeto.Evento1 := MiEventoOnEvento1;
  ...
  // Luego, necesito que el código a ejecutar sea otro, pero ante el mismo
  // evento, por lo cual hago esta otra asignación.
  ...
  MiObjeto.Evento1 := MiEventoAlternativo1;
  ...
end;
Esto lo he hecho y funciona perfectamente.

Ahora requiero declarar una función en el código de una forma (TForm), y luego, al ejecutar esa función, dependiendo de cierto parámetro, quiero que se ejecute un código diferente reasignando el código de la función, así:

Código:
if Tag = 1 then
  MiFuncion := MiFuncion1
else if Tag = 2 then
  MiFuncion := MiFuncion2
else if Tag = 3 then
  MiFuncion := MiFuncion3
...

// Todas las funciones son de tipo booleano, así que...
if MiFuncion then
  ...
else
  ...
La cuestión es que esto último no he podido hacerlo. El ejemplo de arriba me hace suponer que sí puedo asignar una función definida (MiEventoOnEvento1 o MiEventoAlternativo1) a una función declarada dentro de una clase (Evento1), pero como ven tengo problemas...

Sé también que podría implementar un código alternativo, pero de verdad requiero una solución como la solicitada.

Gracias, si alguien puede colaborarme.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.

Última edición por mlara fecha: 23-08-2010 a las 19:19:37.
Responder Con Cita