![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Extender funcionalidad evento
Hola, me presento en el foro con una duda sobre eventos.
Mi intención es que cuando se lance el evento OnDataChange de un TDataSource se ejecute un fragmento de código propio para después mantener el comportamiento original mendiante inherited. Para ello he creado un componente nuevo que hereda de TDataSource y he intentado rescribir el evento OnDataChange ya que es requisito que todo el código implementado quede dentro del componente. Lo que he realizado es lo siguiente: ¿Voy por el buen camino? No consigo que entre en la rutina MiDataSource1DataChange. Muchas gracias por vuestro tiempo, un saludo. Última edición por ecfisa fecha: 14-12-2011 a las 16:55:02. Razón: Corregir problema interfaz WYSIWYG |
#2
|
||||
|
||||
Hola kamuspik, bienvenido al foro. ¿Te has pasado por la Guía de Estilo?
Respecto a tu pregunta, no, no vas por buen camino. Es más, por lo que te leo me temo que no sabes cómo implementa Delphi la Programación Dirigida por Eventos. Si nunca antes has hecho PDE en Delphi, Builder ni Lazarus o similar te recomiendo que busques y te leas La Cara Oculta de Delphi, que el propio autor publicó en Internet para su acceso libre. Si no recuerdo mal, en el FTP del Club hay una copia. Delphi implementa PDE usando propiedades y no vía métodos, como el caso de (por ejemplo) Objective C en NEXT. Para implementar un evento lo que hay que hacer es asignar a dicha propiedad una referencia a un método. En tu caso, después de añadir al formulario un objeto TDataSource, debes ir a la ventana de propiedades del objeto y asignar el método apropiado (con doble pulsación se crea automáticamente) y escribir ahí el código. No necesita herencia. Última edición por Ñuño Martínez fecha: 13-12-2011 a las 15:53:43. |
#3
|
|||
|
|||
Hola, gracias por contestar.
Todavía no domino demasiado Delphi, tengo un ejemplar de la Cara Oculta de Delphi que suelo consultar con frecuencia pero no he encontrado respuesta a este problema. Quizás no me haya explicado bien, entiendo como implementar eventos (por ejemplo, los asociados a un botón) pero mi intención no es esa, lo que pretendo hacer (que no sé si es posible) es extender la funcionalidad de un evento. Quiero que cuando se genere un evento (OnDataChange) se ejecute cierto fragmento de código y que después se haga un inherited para que mantenga su funcionamiento "natural" como evento. En la ayuda de Delphi lo trata como "Changing the standard event handling", pero no da demasiadas pistas y me he quedado bloqueado. Un saludo y gracias de nuevo ![]() |
#4
|
|||
|
|||
He encontrado en la guía del desarrollador de componentes de Delphi un caso análogo al que me interesa, pero respecto al evento Onclick:
Espero que esto ayude a mi pobre explicación. Un saludo. |
#5
|
|||
|
|||
Hola, revisando un poco de bibliografía he conseguido dar con lo que me interesaba. Lo pongo a continuación por si le sirve a alguien.
Un saludo. |
#6
|
|||
|
|||
Hola...
Y si a ese componente le asignas un método en su evento OnDataChange, ¿este sigue comportándose como deseas? Has la prueba y verás que no. Para redefinir el comportamiento de un evento, primero debes identificar cual es el método que dispara ese evento, mayormente en la VCL estos métodos se pueden redefinir, pero parece que para la clase TDataSource el método que llama al evento es privado (DataEvent). Dicho lo anterior, tu componente debe quedar de la siguiente forma para que funcione:
Toma en cuenta que este código lo hago al vuelo, así que podría fallar. También ten en cuenta que si se cambia el manejador de evento de OnDataChange en tiempo de ejecución, el comportamiento de este código ya no será el deseado. Saludos... |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Como extender componentes de la paleta | mcbullrich | OOP | 5 | 01-11-2011 19:27:57 |
Extender escritorio de windows y bloquear acceso | Ivanzinho | Windows | 2 | 11-03-2009 12:20:38 |
DBGrid - funcionalidad / documentación | alquimista_gdl | PHP | 0 | 09-09-2008 18:15:36 |
funcionalidad parecida a la del TDBLookUpComboBox.. | pvizcay | OOP | 8 | 20-09-2006 22:22:15 |
Funcionalidad del TeamSourse | jmedina | Varios | 3 | 23-02-2005 18:21:11 |
![]() |
|