Guardar/Cargar el ancho de las columnas de un DBGrid  

Enviado Por: Ferran Piñana
Web : N.A.
Email: ferran77@menta.net
Fecha: 26/12/99

Truco accedido 153 veces

 


Util para guardar las preferencias del usuario de tu programa cuando cambia de tamaño las columnas de un DBGrid y no quieres que se pierdan esos valores al salir de tu aplicación.
Los valores serán grabados en el Registro de Windows.

Basta con usar estas dos funciones:



 Procedure TForm1.SaveColPos(Const DbGrid:TDBgrid);
 Var
   Registro :TRegistry;
   F        :Byte;
 Begin
   Registro:=TRegistry.Create;
   Registro.OpenKey('\Software\NombreDelPrograma\Grids',True);
   For F:=0 To DbGrid.Columns.Count-1 Do
     Registro.WriteInteger(DbGrid.Name+'['+IntToStr(F)+']',DbGrid.Columns[F].Width);
   Registro.Free;
 End;





 Procedure TForm1.LoadColPos(Var DbGrid:TDBgrid);
 Var
   Registro :TRegistry;
   F        :Byte;
 Begin
   Registro:=TRegistry.Create;
   Registro.OpenKey('\Software\NombreDelPrograma\Grids',False);
   If Registro.ValueExists(DbGrid.Name+'[0]') Then
     For F:=0 To DbGrid.Columns.Count-1 Do
       DbGrid.Columns[F].Width:=Registro.ReadInteger(DbGrid.Name+'['+IntToStr(F)+']');
   Registro.Free;
 End;




a las que sólo has de pasarle como parámetro el nombre del DBGrid que quieres grabar/cargar.

  • Primero, añade Registry en el uses de tu form
  • Luego, declara las dos funciones en tu form, en la parte private, por ejemplo:


       private
         { Private declarations }
         Procedure SaveColPos(Const DbGrid:TDBgrid);
         Procedure LoadColPos(Var DbGrid:TDBgrid);
    



  • Y ahora, utiliza el evento OnCreate de la form para cargar el ancho de las columnas:


     procedure TForm1.FormCreate(Sender: TObject);
     begin
       LoadColPos(DBGrid1);
     end;
    



  • Y para grabar las columnas antes de salir de tu aplicacion, usa el evento OnDestroy de la Form:


     procedure TForm1.FormDestroy(Sender: TObject);
     begin
       SaveColPos(DBGrid1);
     end;
    




    Como ultimo consejo, podrías cambiar las lineas:


     Registro.OpenKey('\Software\NombreDelPrograma\Grids',False);
    



    por éstas otras:


       Registro.OpenKey( '\Software\'+
                         ExtractFileName(Application.Exename)+
                         '\Grids',
                         TRUE
                        );
    
    



    Ojo, en las dos funciones.
    y Así te despreocuparás de cambiar la cadena 'NombreDelPrograma' en cada aplicación que uses las funciones.