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.