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 15-09-2004
walrus walrus is offline
Miembro
 
Registrado: ago 2004
Posts: 40
Poder: 0
walrus Va por buen camino
Herencia visual con TFrames y otros asuntos

Hola a todos.

Quiero simplificar un proyecto y pienso utilizar herencia visual para ello. Aparte de Forms he visto que se puede heredar visualmente de un TFrame, lo cual es lo que quiero hacer.

Sin embargo, como ya tengo hecha la interfaz de las ventanas quisiera hacer el proceso lo mejor posible. La manera que suelo emplear es: creo un TFrame heredando del TFrame base o padre; del Frame original copio y pego al nuevo los compos que no se heredan, y cut&paste también del código extra. Una vez creo que tengo todo, cruzo los dedos, quito la unit del proyecto (hago una copia de seguridad de la misma... a veces), y a continuación guardo la nueva unit (con el nuevo TFrame heredado visualmente) con el mismo nombre que la original. Esto es, sustituyo el frame original por el heredado. Finalmente, añado la nueva unit al proyecto. Esta es my way de emplear OOP a proyectos ya hechos.

Cositas malas en este esquema:
  1. "Bad design". Basicamente, si hubiera pensado antes en crear un TFrame base y simplemente heredar visualmente no tendría este problema. Buen razonamiento, si señor, pero le diré que yo personalmente también deseo poseer una máquina del tiempo y rectificar muchas cosas. La bonoloto de la semana pasada, por ejemplo.
  2. "Cut&Paste" hasta el infinito y más allá. A veces, me siento a cenar y me dicen qué por qué tamborileó de una manera tan extraña, con los dedos índice y la mano rigida y estirada, en vez de con los pulgares, que es lo habitual, y apoyando los dedos meñiques, como teniendo pulsado algo.
He pensado en lo siguiente: pasar olimpicamente de la herencia visual y escribir directamente en la declaración del Frame:

Código Delphi [-]
type
    TFrameEx1 = class(TFrameEx)

Donde TFrameEx es el TFrame base y TFrameEx1 el que pienso sustituir. Luego quedaría basicamente eliminar todo aquello que ya viene heredado.

¿Me dará problemas? ¿Qué me pierdo por no usar herencia visual?

Por otro lado, dado que no se puede usar herencia visual con Forms que contienen algunos componentes de D7 (y creo que de D6) como el TActionManager, TActionToolBar, TActionMainMenuBar, etc ...

¿Podría ser esta una manera de esquivar esta restricción?

Agradecería cualquier comentario.
Responder Con Cita
  #2  
Antiguo 15-09-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
La herencia visual en Delphi es muy transparente, no se porque lo haces por un camino tan complicado (¿Conoces File \ New \ Aplicación \ Clase a Heredar?)
Ten en cuenta que la herencia visual, no solo queda guardada la unit, también queda en el DFM. Además de cambiar la clase desde la unit, tendrías que modificar el dfm:
object TFrameEx: TFrameEx por inherits TFrameEx: TFrameEx

Cita:
Empezado por walrus
Por otro lado, dado que no se puede usar herencia visual con Forms que contienen algunos componentes de D7 (y creo que de D6) como el TActionManager, TActionToolBar, TActionMainMenuBar,
Podrías hacerlo con casi cualquier control, solo recuerdo problemas con el TNoteBook, TTabbedNoteBook que son objetos algo obsoletos y no soportan este tipo de herencia, desconozco el porqué.


Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 15-09-2004 a las 20:58:25.
Responder Con Cita
  #3  
Antiguo 15-09-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por delphi.com.ar
Podrías hacerlo con casi cualquier control
Este.., de hecho no se puede insertar un ActionManager, ni en un form con herencia visual ni en un frame. He visto algunas referencias de esto en los grupos de noticias de Borland y al parecer, en palabras de Steve Trefethen, tiene que ver con el hecho de que los TCollectionItem no tienen identificadores únicos por lo cual sería muy difícil guardar las referencias correctas a través de la herencia. A mi personalmente no me convence dicha razón ya que por el contrario sí pueden colocarse TActionList. El comentario que vi es de 2001 y pudieran haber cambiado las cosas pero hasta hoy, si intentas insertar un ActionManager te manda un error.

// Saludos
Responder Con Cita
  #4  
Antiguo 15-09-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
...los TCollectionItem no tienen identificadores únicos por lo cual sería muy difícil guardar las referencias correctas a través de la herencia...
Ahora que lo nombras, recuerdo haber tenido porblemas con algunos componentes de mi autoría en este aspecto. Era un problema mas que habitual antes de cambiar de trabajo.. (Se nota que empesando a oxidarme en el tema )
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 16-09-2004
walrus walrus is offline
Miembro
 
Registrado: ago 2004
Posts: 40
Poder: 0
walrus Va por buen camino
Cita:
Empezado por delphi.com.ar
La herencia visual en Delphi es muy transparente, no se porque lo haces por un camino tan complicado (¿Conoces File \ New \ Aplicación \ Clase a Heredar?)
Saludos!
Bueno, perdonad, no me he explicado bien. Sí que uso la herencia visual, lo que pasa es que lo hago "a posteriori":

Partiendo de un Frame ya hecho, extraigo todo lo que puede ser común para todos los demás (código y compos) y lo meto en otro: FrameBase. A partir de FrameBase, creo varios Frames mediante herencia visual. Copio los compos y el código propios de cada Frame (esto es, lo que no tiene FrameBase) a los Frames heredados. Finalmente, sustituyo los frames originales por los frames equivalentes pero que derivan de FrameBase en el proyecto. Identico proceso sería para los Forms...

La cuestión que planteaba era si se conocia algún medio aparte del que yo empleo para hacer esto más llevadero (demasiado cut&paste y los eventos dan más trabajo aún). Por eso, sugeria no emplear herencia visual directamente, para no tener que hacer un Frame nuevo sino trabajar con el original. Lo que me faltaba era saber que había que modificar también el .dfm, aparte del .pas. Creo que lo probaré de esta manera.

Por otro lado, creo que no hay medio de usar herencia visual con el TActionManager (entre otros) y es una pena, pues me rompe el diseño que me había propuesto y me obliga a replicar los componentes que no puedo heredar con el conseguiente trabajo extra.

Un saludo y muchas gracias a los dos, que sois unos ases, de verdad.
Responder Con Cita
  #6  
Antiguo 17-09-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
.... Y dice el novato..... crea un component Template para despues meterlo dentro del Tframe.

Lo acabo de probar y funciona, de hecho el Component Template tenia un Tframe dentro y al ponerlo TODO en un nuevo TFrame, Delphi lo incrustó sin problemas, previo mensaje:

" El Component Template tiene un Tframe FrameExploreTAble (el embebido) desea añadirlo a su proyecto?"

Respondiendo SI, pues sin problemas.

Con esto te olvidas del copy & paste, aunque no sé si será viable.
Responder Con Cita
  #7  
Antiguo 19-09-2004
walrus walrus is offline
Miembro
 
Registrado: ago 2004
Posts: 40
Poder: 0
walrus Va por buen camino
El comentario de Lepe me recuerdó al instante el siguiente artículo de Ian Marteens:

http://www.marteens.com/trick2a.htm

Hasta ahora no había usado los component templates, pero me serán muy utiles en mi labor migratoria (parecemos cigüeñas), tras comprobar que efectivamente es un técnica más potente que copiar y pegar.

Gracias de nuevo!!! A los tres!!!
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 13:37:59.


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