Ver Mensaje Individual
  #18  
Antiguo 11-12-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por elrayo76 Ver Mensaje
Estoy diseñando unas clases bastante genéricas para configurar las grillas y me gustaria saber determinadas cosas como las puedo realizar.

1) Quisiera que me dijeran como se puede hacer para apuntar a una grilla desde la clase sin que sea solamente para un determinado componente. Digamos si hoy alguien usa las DBGrid de Delphi que funcione, pero si mañana alguien quiere usar otras como es mi caso (las SMDBGrid) estas librerías deben seguir funcionando sin tener que tocar nada en el código.

2) Teniendo en algun almacenamiento, que puede ser base de datos, XML, INI, etc como puedo hacer de forma genérica para pasar los datos de configuración de cada columna de la grilla a la clase. Con esos datos se recorre la grilla y se configura cada una de las columnas (configurar por ejemplo, alineación, ancho, si es visible, si totaliza, etc).
No se si te he entendido bien, porque lo que quieres es confuso, o al menos la explicación.

Yo en este caso lo que haría sería una clase de configuración. Por un lado debería tener una propiedad que apunte al DBGrid, en este caso a un TCustomDbGrid o incluso a un TCustomGrid. Dependerá de las configuraciones que quiereas modificar. Esto te permitirá, utilizando RTTI, que pueda funcionar con cualquier "DBGrid" que derive de los estandard (en otro caso, milagros no se pueden hacer - o son más complicados-). Es decir, si el SMDBGrid que comentas, por ejemplo, deriva del estandard podrá funcionar con este componente, pues la propiedad Columns (Columns: TDBGridColumns) será compatible con la del estandard. Si tienes otro tipo de DBGrid, como por ejemplo el de las DevExpress, que no derivan del estandard y no comparten propiedades, en ese caso es imposible que funcione, a no ser que hagas código especial para él (aquí tendrás que usar RTTI seguro).

La segunda propiedad sería a que tendría la configuración del Grid y tendrás que rellenarla (desde cualquier fuente de datos) con la configuración necesaria. En esta segunda propiedad tendrás que almacenar los datos que quieres modificar del grid. Seguramente deberá tener una estructura basada en una lista (o en una colección) para almacenar las diferentes columnas, y dentro de cada uno de estos elementos, lo necesario para almacenar alineación, formato,... (todo lo que necesites).

Algo así:

Código Delphi [-]
  //: configuración de cada una de las columnas
  TGConfigItem = class(TCollectionItem)
  private
    FWitdh: Integer;
    FAlignment: TAlignment;
  public
    property Alignment:TAlignment read FAlignment write FAlignment;
    property Witdh:Integer read FWitdh write FWitdh;
    property ...
  end;

  //: Lista de columnas a configurar
  TGConfig = class(TCollection)
    ...
  end;

  TGridConfig = class(TObject)
  private
    FGrid: TCustomDBGrid;
  public
    //: Configuración del grid
    property GConfig:TGConfig read FGConfig write FGConfig;
  published
    //: Grid al que apuntar y modificar
    property Grid:TCustomDBGrid read FGrid write FGrid;
  end;

A ver si van por ahí los tiros...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita