Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Herencia de componentes (https://www.clubdelphi.com/foros/showthread.php?t=89129)

gaunmanuel 30-09-2015 19:37:05

Herencia de componentes
 
Que tal, tengo un pequeño dilema del cual espero explicarme y que me puedan dar un tip.
Datos Generales:
1. Trabajo con Delphi 7.0
2. Windows 8.1 64 Bits.

Pues bien, tengo un Sistema con el estilo de forma MDIForm, en la cual tengo un forma principal y el resto formas Child...
Todas las formas Child son heredadas de una clase llamada TfrmCatalogo, ésta clase es una forma en la cual tengo componentes que establecen un estilo a todas las formas Child, uno de los componentes principales y que se hereda a cada forma child, es el PageControl, el cual desde la forma principal (TfrmCatalogo) tiene creado 2 TabSheets, hasta aqui todo muy bien.
Como aclaración la clase TfrmCatalogo fue diseñada con la intención de que si se hace algún cambio visual pues simplemente se aplique a esta clase y en automático se aplique a todas las formas child heredadas...
Pues bien, mi dilema ahora se encuentra en que quiero cambiar el componente PageControl nativo, por otro componente PageControl de otra compañia, y Bueno lo que hago es cambiar en la clase TfrmCatalogo la clase del componente PageControl y posterior cambiar las declaraciones en el archivo dfm:
Código con la declaración actual:
Código Delphi [-]
type
  TfrmCatalogo = class(TForm)
    PageControl1: TPageControl;
    tabCaratula: TTabSheet;
    tabGeneral: TTabSheet;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Código con la nueva Declaración:
Código Delphi [-]
type
  TfrmCatalogo = class(TForm)
    PageControl1: TElPageControl;
    tabCaratula: TElTabSheet;
    tabGeneral: TElTabSheet;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Hasta aqui todo funciona muy bien, en automático las formas child heredadas de TfrmCatalogo se actualizan con el nuevo componente.
Sin embargo, en muchas formas Child se les creo un tabSheet independiente a los heredados, es precisamente donde tengo el problema, en estas formas Child la declaración de ese tabSheet creado desaparece en el archivo dfm y obviamente todos los componentes que pudiera haber tenido dicho tabSheet tambien desaparecen, aunque en la clase (archivo .pas) la declaración del TabSheet sigue ahi, pero al compilar me manda un mensaje que si quiero remover dicha declaración ya que no encuentra un enlace. Inclusive en el archivo .pas de la forma Child cambié la clase del tabSheet por la nueva clase TElTabSheet pero no resulto ya que al ver la forma como texto la declaración del objeto tabSheet desaparacio.
Que me sugieren? sera que tengo que cambiar primeramente en cada forma CHILD la clase del nuevo componente? o algo estoy haciendo incorrecto? o de plano estoy alucinando y lo que quiero hacer hasta fuera del lugar? :D

gracias.
saludos.

roman 30-09-2015 20:26:37

No tengo mucha idea de porqué hace lo que comentas. Sin embargo, ¿has probado usar los GExperts? Se instalan en el IDE de delphi y, entre muchas otras cosas tienen una herramienta para reemplazo de componentes que te evita estar modificando a mano el .PAS y el .DFM.

// Saludos

AgustinOrtu 30-09-2015 20:56:17

No es mejor usar TFrame en estos casos?

gaunmanuel 30-09-2015 23:51:13

Roman, el GExperts es muy Buena herramienta, sin embargo, la opción para reemplazar componentes, no funciona cuando estos son heredados.

Voy a revisar el TFrame, sin embargo la aplicación ya esta desarrollada sin TFrame y sin cientos de de formas, pero vere que como funciona el TFrame y si puedo hacer algo con lo que ya se tiene desarrollado, sinceramente nunca he usado el TFrame.

gracias.

roman 01-10-2015 02:18:05

Cita:

Empezado por gaunmanuel (Mensaje 497419)
Roman, el GExperts es muy Buena herramienta, sin embargo, la opción para reemplazar componentes, no funciona cuando estos son heredados.

Caray, pues lo probé justo antes de escribir el mensaje, y puedo constatar que sí funciona. Claro que no probé con el componente que usas porque no lo tengo pero probé sustituir un TEdit en el formulario base por un TMaskEdit y funcionó bien en el formulario heredado.

Lo de los frames tampoco me queda claro pues estosse usan para agrupar un con conjunto de componentes de manera de poder reusarlo en distintas partes, pero aquí estamos hablando del formulario como un todo.

// Saludos

Neftali [Germán.Estévez] 01-10-2015 12:17:46

Yo creo que dependerá de cómo esté definido el nuevo componente de la clase TElPageControl y los TElTabSheet.
Depende de la herencia que tengan.

Define un nuevo formulario con el nuevo componente y con tabsheets y mira en el DFM qué estructura tiene. Luego compáralo con el antiguo formulario TfrmCatalogo y los dericvados de este.

Si pones un trozo del DFM antiguo (TfrmCatalogo), de algun formulario heredado de este y del nuevo, tal vez te podamos ayudar.


La franja horaria es GMT +2. Ahora son las 03:00:49.

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