FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Herencia en Delphi 8
Hola:
Desde Enero estoy trabajando con Delphi 8, programando una aplicación VCL Form. Estoy teniendo ciertos problemas a la hora de la herencia, y no se si es por algún parámetro de configuración o defecto del compilador. Le he instalado la actualización de primeros de febrero. Paso a comentar los problemas. CASO 1 tenemos 3 formularios, F1 => F2 => F3. En F1 declaro una acción, por ejemplo, un cerrarVentana. Entonces tenemos lo siguiente: procedure TF1.CerrarVentanaExecute ... begin Close; end; Esta acción tiene como ShortCut la tecla de escape. F2 hereda de F1 y F3 hereda de F2. Bien pues en F2 y en F3 al pulsar la tecla Escape no se cierra el formulario. Abro la acción y el inspector de objetos miro que procedimiento se ejecuta para el evento OnExecute y ¡¡ NO HAY NADA !! Coloco la instruccion: cerrarventana.onexecute := cerrarventanaExecute; en el formCreate del formulario y funciona perfectamente. Queda claro el problema existente. CASO 2 Tenemos un formulario F1 con una acción declarada, por ejemplo, CambioTag. Al ejecutarse esta acción pone el tag del objeta que la produce a 1. Ahora en F1 tengo 3 TEdit y en el evento OnEnter le asocio en tiempo de diseño el procedimiento CambioTagExecute. Grabo, compilo, y funciona perfectamente. Cierro el proyecto, lo vuevo a abrir, compilo y ¡¡ NO TIENE ASOCIADO CAMBIOTAGEXECUTE AL EVENTO ONENTER DEL TEDIT !! Tengo que colocarlo en tiempo de ejecucion al igual que en el caso 1. Espero que esto sea que lo tengo mal configurado, porque si es un fallo de Delphi 8, es bastante grave a mi modo de ver. Gracias por vuestra ayuda y a ver si me podeis dar una solución a este problema totalmente ilogico.
__________________
J. Adolfo Núñez |
#2
|
||||
|
||||
¡Buen día a todos!
Según parece el problema se presenta con los eventos asignados en formas (o componentes de ellas), de las cuales se crea herencia visual (basada en plantillas). ¿Podrías hacer algunas pruebas adicionales con propiedades y eventos de la forma padre y de algunos de sus componentes, para ir descubriendo bajo qué circunstancias se presenta esto, y así acercarnos más a la respuesta del problema? Seguiré pendiente de este interesante tema. Al González . |
#3
|
|||
|
|||
Hola Al!!
Vamos a ver, despues de innumerables pruebas que he ido realizando, llego a las siguientes conclusiónes: 1ª- Las propiedades de los componentes se heredan perfectamente, no hay problema, las declare como las declare, no hay problema. 2ª- Tomando el caso 1 que expongo en mi primer mensaje. En F1 declaro CerrarVentana con un simple close. Bien en F3, resulta que tengo que hacer algo más antes de cerrar la ventana. Pues el resultado de las pruebas, es que ademas de tener que poner Código:
CerraVentana.OnExecute := CerrarVentanaExecute; 3ª- Respecto al caso 2 de mi primer mensaje, dentro del mismo form, desaparecen las asociaciones evento-manejador, cuando a un evento del form o de un componente le asigno en el inspector de objetos un manejador de un OnExecute de una acción, o un manejador que corresponde a otro evento de otro componente. Hay que asignar los manejadores a los eventos en tiempo de ejecución para que no falle. Bueno, esto es lo descubierto por mi parte, gracias por dedicarle tu tiempo a este tema, pero me sigue pareciendo que es un fallo garrafal y un gran problema que tiene el compilador o el ide (o lo que sea), de delphi 8 y que supongo que subsanaran en breve. Este problema solo lo he notado en las aplicaciones VCL-Forms, en una aplicación Win-Form o ASP-Form no le probado. Un saludo
__________________
J. Adolfo Núñez |
|
|
|