Ver Mensaje Individual
  #4  
Antiguo 07-02-2012
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Reputación: 16
engranaje Va por buen camino
Por si sirve para aclarar algo mas mi duda dejo escrito un intento que pensé que me serviria pero ha resultado ser un callejon en el que no he encontrado salida:
Código:
procedure TSuperGrid.KeyDownRedirigido(var Key: Word; Shift: TShiftState);
  type
    TMiTipoDeProcedimiento = procedure (var Key: Word; Shift: TShiftState)
    TProcedimientoRedirigido = procedure of object;
  var
    procedimientoRedirigidoKeyDown : TProcedimientoRedirigido;
  begin
    TMethod(procedimientoRedirigidoKEyDown).code := @Tcustomdbgrid.keydown(key,Shift);
    TMethod(procedimientoRedirigidoKEyDown).data := RxDBGridEmpleados;
    TMiTipoDeProcedimiento(procedimientoRedirigidoKeyDown) (key,shift); 
  end;
He probado primero a usar esto con estrucutras sencillas del tipo:
Código:
type
  TBase = class
    procedure Foo; virtual;
  end;

  TAnsestor = class(TBase)
    procedure Foo; override;
  end;

  TChild = class(TAnsestor)
    procedure Foo; override;
    procedure BaseFoo;
  end;

procedure TBase.Foo;
begin
  ShowMessage('TBase');
end;

procedure TAnsestor.Foo;
begin
  ShowMessage('TAnsestor');
end;

procedure TChild.Foo;
begin
  ShowMessage('TChild');
end;

type
  TFoo = procedure of object;

procedure TChild.BaseFoo;
var
  Proc: TFoo;

begin
  TMethod(Proc).Code := @TBase.Foo; // Static address
  TMethod(Proc).Data := Self;
  Proc();
end;

procedure TForm4.Button1Click(Sender: TObject);
var
  Obj: TChild;
  Proc: TFoo;

begin
  Obj:= TChild.Create;
  Obj.BaseFoo;
// or else
  TMethod(Proc).Code := @TBase.Foo; // Static address
  TMethod(Proc).Data := Obj;
  Proc();

  Obj.Free;

end;
Este ejemplo me ha funcionado correctamente, sin embargo mi intento fracasa estrepitosamente con el error "undeclared identifier keydown" ademas si realizo modificaciones para que los métodos heredados acepten parametros los valores de estos parametros desaparecen al llegar al llegar al abuelo.

En fin, ando de lo mas perdido, espero no haber liado mas la consulta con esta explicación, gracias de antemano por cualquier idea que se os ocurra.
Responder Con Cita