FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
utilizar método del abuelo ignorando el del padre
Un saludo a todos. Estoy utilizando delphi 5.0 y me sucede que estoy utilizando una grid de terceros que hereda del Tdbgrid normal y tiene el keydown sobreescrito capturando un buen número de teclas para trabajar a su manera. En algunos formularios de la aplicación en particular necesitaría que la grid utilizase el keydown del abuelo, es decir del tdbgrid y no el keydown sobreescrito en el grid de terceros.
Aclaro que no puedo modificar el código del control desarrollado por terceros, solo el de los formularios que utilizan ese control, por mas que le he dado vueltas no se me ocurre el modo. Espero haberme explicado bien, gracias por vuestro tiempo. |
#2
|
|||
|
|||
Bueno, creo que llamar al keydown del abuelo no se podria, PERO, recuerdo un "hack" el cual consiste en declarar un objeto en la forma, con el mismo nombre y ahi rehacer el keydown basado en el del tdbgrid, algo asi como:
Código:
Type TSuperGrid = class(unidadterceros.TSuperGrid) etc.. etc.. end; |
#3
|
|||
|
|||
Gracias por tu respuesta Luis, el "problema" que tengo al intentar implementar una solución de este tipo es que tengo que escribir todo el código del keydown y que si lanzo un inherited va a utilizar el de la clase padre, si se pudiera de algún modo en el keydown sobreescrito del nuevo objeto hacer algo del tipo:
Código:
procedure TSuperGrid.KeyDown(var Key: Word; Shift: TShiftState); begin inherited Tcustomdbgrid.keydown(key,Shift); end. |
#4
|
|||
|
|||
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; 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; 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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
El Abuelo de los Micros. | JoseFco | ASM y Microcontroladores | 123 | 02-10-2008 05:10:25 |
Dia del padre | jhonny | La Taberna | 3 | 17-06-2007 03:42:21 |
A patear traseros con el abuelo! | mamcx | Noticias | 3 | 23-02-2007 21:32:10 |
Voy a ser Padre | ContraVeneno | La Taberna | 28 | 10-01-2007 18:17:43 |
Evitar la ejecución del método padre | Egroc | Varios | 3 | 22-07-2004 18:16:11 |
|