![]() |
![]() |
| Paypal | 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
|
|||
|
|||
|
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. |
|
#2
|
|||
|
|||
|
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... |
|
#3
|
|||
|
|||
|
Hola!
Gracias por tu respuesta, pensé que había resuelto el problema...de hecho el código parecía funcionar como quería. Voy a probar esto que has dicho y luego comento los resultados. Un saludo ![]() |
|
#4
|
|||
|
|||
|
Hola maeyanes,
he probado tu código y funciona correctamente. Lo único que no consigo entender la diferencia entre lo que hacía yo y tu código. A ver si me puedes ayudar a entenderlo, yo directamente asigno el procedimiento que quiero que se ejecute al evento y después hago un inherited.¿Por qué no se comporta como deseo? En tu código guardas una copia del manejador de eventos y después la llamas antes de ejecutar el procedimiento ¿esto es para mantener el funcionamiento natural del evento no?¿Qué diferencia hay entre los dos comportamientos? Muchas gracias por tu tiempo, Un saludo. |
|
#5
|
|||
|
|||
|
Hola...
La única diferencia entre tu código y el mio, es que si se asigna un manejador de evento en tiempo de diseño, tú código ya no va a funcionar como lo tienes pensado, esto es por que al asignar el nuevo manejador de evento este sustituye al que tu asignaste por código en el constructor. El código que yo te proporcioné prevee este caso y asigna el manejador de evento interno después de "cargar" el component desde el DFM, guardando en un campo la referencia al posible manejador de evento asignado en tiempo de diseño. Luego, al dispararse el evento, el manejador interno llama primero (y puedes hacerlo también al final, depende de lo que desees hacer) al manejador asignado en tiempo de diseño (si es que se asigno uno) y luego ejecuta el código de lo que deseas implementar. Espero que con esta pequeña explicación te quede más claro. Saludos... |
|
#6
|
|||
|
|||
|
Muchas gracias, ahora ya lo comprendo, el código que había puesto antes se comportaba de forma excluyente y mi intención era que se mantuviera la posibilidad de asignar un manejador de eventos en tiempo de diseño.
Un saludo ![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| 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 |
|