Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Herencia en Delphi 8 (https://www.clubdelphi.com/foros/showthread.php?t=7691)

murci 24-02-2004 12:51:25

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.
:confused: :confused: :confused: :confused: :confused: :confused:

Al González 06-03-2004 23:28:01

¡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 :).

murci 08-03-2004 09:24:29

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;
en el OnCreate de F1 para que llegue a F3, ahora resulta que en F3 si se cierra la ventana, pero no realiza el codigo añadido en F3 al evento, tengo que volver a asignar el manejador al evento en el OnCreate de F3.

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


La franja horaria es GMT +2. Ahora son las 09:05:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi