Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   VFI - Modificaciones al ancestro. (https://www.clubdelphi.com/foros/showthread.php?t=67748)

yapt 04-05-2010 16:18:32

VFI - Modificaciones al ancestro.
 
Hola a todos,

tengo un "problema" o mejor dicho un "comportamiento" que creo que ha sido así toda la vida y que así se quedará, pero tenia que preguntarlo. Ahi va....

Utilizo el siguiente formulario (simple), dos paneles y un DbGrid (lo pongo aquí por comodidad por si alguien puede contestar):

Código Delphi [-]
object Form1: TForm1
  Left = 498
  Top = 375
  Caption = 'Form1'
  ClientHeight = 227
  ClientWidth = 326
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Panel1: TPanel
    AlignWithMargins = True
    Left = 3
    Top = 3
    Width = 320
    Height = 41
    Align = alTop
    Caption = 'Panel1'
    TabOrder = 0
    ExplicitLeft = 80
    ExplicitTop = 48
    ExplicitWidth = 185
  end
  object Panel2: TPanel
    AlignWithMargins = True
    Left = 3
    Top = 183
    Width = 320
    Height = 41
    Align = alBottom
    Caption = 'Panel2'
    TabOrder = 1
    ExplicitLeft = 104
    ExplicitTop = 160
    ExplicitWidth = 185
  end
  object DBGrid1: TDBGrid
    AlignWithMargins = True
    Left = 3
    Top = 50
    Width = 320
    Height = 127
    Align = alClient
    TabOrder = 2
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = 'Tahoma'
    TitleFont.Style = []
  end
end


Ahora creo un nuevo formulario heredado de este. Pero a este nuevo formulario le pongo DOS columnas de datos (vease que el primero no tiene columnas):

Código Delphi [-]
inherited Form2: TForm2
  Left = 1687
  Top = 250
  Caption = 'Form2'
  ExplicitLeft = 1687
  ExplicitTop = 250
  PixelsPerInch = 96
  TextHeight = 13
  inherited DBGrid1: TDBGrid
    Columns = <
      item
        Expanded = False
        Title.Caption = 'UNA'
        Visible = True
      end
      item
        Expanded = False
        Title.Caption = 'DOS'
        Visible = True
      end>
  end
end

Ahora, por un momento, imaginad que tenemos 40 formularios (como el segundo), heredados del primero y que, mirate tú, queremos hacer un pequeño cambio en el primer form (el padre del invento).

El cambio es simple. Añadimos un nuevo panel que (para los que hayan visto el formulario) ocupa el lugar del grid. El grid pasa a estar dentro del nuevo panel. Hago esto desde la ventana "Structure", creando el panel y arrastrando el DbGrid dentro del nuevo panel.

Perfecto, todos los formularios hijo, heredan este cambio, pero acabo de perder TODAS las definiciones de TODAS las columnas (y definición de DataSource, etc.. etc..) de dentro de TODOS los grids de todos los formularios hijos. Es decir, en el ejemplo, 40 formularios a la porra.

Y ya no sé si es que es Delphi2010 el que tiene el problema, o ha sido siempre así. Estoy un poco despistado.

Alguien puede darme su opinión ?

Gracias y un saludo.

rgstuamigo 04-05-2010 21:40:55

Efectivamente suceso eso, me imagino que ocurre por que estas modificando el formulario padre, y al hacerlo pues, los formualrios hijos se resetean por así decirlo,:rolleyes: para tomar nuevamente lo heredeado.;)
El mejor consejo que te puedo dar es que debes acegurarte de crear tu formulario padre correctamente para no tener que rehacer nuevamente todo en los formualrios hijos.;)
Nota > lo he probado en Delphi 7.
Saludos...:)

roman 04-05-2010 22:08:20

Acabo de probar en delphi 7 y suceden dos cosas: para los formularios abiertos, en efecto, se pierden esas propedades. Para los formularios cerrados, las propiedades se preservan.

Moraleja: cerrar todos los formularios heredados antes de hacer cambios en el padre.

// Saludos

yapt 04-05-2010 23:27:35

Uauuuuuuuuu.... !!!! :p :p :p :p

Efectivamente en Delphi 2010, con la unidad del formulario cerrada, la recuperación es PERFECTA, igual que en Delphi 7.

Roman.... tienes dos cervezas (con tapa incluida) a mi cargo.....

Gracias mil.... :)

Saludos.

roman 05-05-2010 01:19:21

Cita:

Empezado por yapt (Mensaje 362820)
Roman.... tienes dos cervezas (con tapa incluida) a mi cargo.....

Guardo esto, a manera de pagaré. :D

// Saludos


La franja horaria es GMT +2. Ahora son las 14:29:21.

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