Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-02-2004
murci murci is offline
Miembro
 
Registrado: jul 2003
Ubicación: Murcia
Posts: 43
Poder: 0
murci Va por buen camino
Unhappy 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
Responder Con Cita
  #2  
Antiguo 06-03-2004
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡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 .
Responder Con Cita
  #3  
Antiguo 08-03-2004
murci murci is offline
Miembro
 
Registrado: jul 2003
Ubicación: Murcia
Posts: 43
Poder: 0
murci Va por buen camino
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
__________________
J. Adolfo Núñez
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:56:57.


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
Copyright 1996-2007 Club Delphi