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 04-05-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 04-05-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

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, 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...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 04-05-2010
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
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
Responder Con Cita
  #4  
Antiguo 04-05-2010
Avatar de yapt
yapt yapt is offline
Miembro
 
Registrado: sep 2006
Ubicación: España
Posts: 258
Poder: 18
yapt Va por buen camino
Uauuuuuuuuu.... !!!!

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.
Responder Con Cita
  #5  
Antiguo 05-05-2010
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 yapt Ver Mensaje
Roman.... tienes dos cervezas (con tapa incluida) a mi cargo.....
Guardo esto, a manera de pagaré.

// Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como instanciar objetos de los cuales solo se conoce su clase ancestro AzidRain OOP 7 11-07-2008 02:58:17
StringGrid y modificaciones Cecilio Varios 1 13-09-2007 11:23:17
Grabar modificaciones osvaldo1308 Varios 2 13-06-2006 10:27:12
Que no almacene las modificaciones perillan Conexión con bases de datos 3 17-07-2005 20:19:05
¿Cómo puedo llamar al método heredado de una clase que no es el ancestro directo? sarackganda OOP 4 15-12-2003 22:19:49


La franja horaria es GMT +2. Ahora son las 18:34: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