Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

miércoles, 3 de julio de 2013

Trabajar con configuraciones: gb.settings

Algunas veces tenemos la necesidad de guardar datos de la propia aplicación.

Por ejemplo:
- La situación de las ventanas en la pantalla cuando cerramos el programa
- Si se ha iniciado el programa otra vez, o es la primera vez.
- Documentos Recientes: Los últimos archivos de datos abiertos con los que hemos estado trabajando
- Incluso alguna configuración personalizada que el usuario pueda cambiar a su antojo (desde rutas de archivos temporales, colores de letras, tamaños, etc)...

Para guardar este tipo de información podemos usar el componente gb.settings, el cual nos permite de una manera muy fácil, guardar y leer variables que definamos para contener la información que deseemos.

Lo mejor que tiene este componente, es que el mismo se encarga de crear el archivo, abrirlo, guardar y leer la información, sin intervención del programador.
Como dato el archivo de configuración se creará en esta ruta:
 User.Home &/ ".config/gambas3" &/ Application.Name & ".conf"
(Siendo Application.Name, el nombre de nuestra aplicación)

Por ejemplo:

Para guardar la situación de la ventana principal:
Lo hacemos en dos pasos
1º  Cuando cerramos la aplicación, guardamos los datos en variables:
PUBLIC SUB Form_Close()
  ' Save window settings when application closes
  Settings["Window/Top"] = ME.Top
  Settings["Window/Left"] = ME.Left
  Settings["Window/Height"] = ME.Height
  Settings["Window/Width"] = ME.Width
END

En el archivo de configuración, estaremos un grupo "Window", y dentro de él, las variable Top, Left, Height, Width, con los valores del formulario.

Vista del archivo de configuración:
[Window]
Top=13
Left=18
Height=154
Width=235



2º Cuando iniciamos nuestra aplicación, tendremos que leer y asignar los datos de la configuración a nuestro formulario:

PUBLIC SUB Form_Open()
  ' Si no encuentra el dato, asigna el que tengamos actualmente
  ME.Top = Settings["Window/Top", ME.Top]
  ME.Left = Settings["Window/Left", ME.Left]
  ME.Height = Settings["Window/Height", ME.Height]
  ME.Width = Settings["Window/Width", ME.Width]
END

Como veis, es muy sencillo de usar e ideal para los casos comentados más arriba.

Nota 8/4/2014:
Desde que escribí este post, se han introducido nuevas mejoras:
Por ejemplo, para guardar la información  de la posición y tamaño de un formulario, se usa el comando:

 settings.write(me)

Siendo me el formulario actual.

Para leer los datos de la posición y tamaño del formulario.

  settings.read(me)


Esta clase ahora se puede instanciar, con lo cual podemos tener distintas configuraciones  de la misma aplicación.  Por ejemplo podemos guardar la configuración personalizada de usuarios (de colores, tamaño de letra, tipo de letra) dependiendo quien inicie el programa.

El valor por defecto del directorio donde se guarda la configuración es este:

User.Home &/ ".config/gambas3" &/ Application.Name & ".conf"

Simplemente tenemos que crear instancias de la clase Setting indicandole al constructor la nueva ruta. archivos de configuración como usuarios tengamos.

User.Home &/ ".config/gambas3" &/ Application.Name & "Pepe" ".conf"
User.Home &/ ".config/gambas3" &/ Application.Name & "Maria" ".conf"
User.Home &/ ".config/gambas3" &/ Application.Name & "Juan" ".conf"


Os dejo un ejemplo para que lo veais como se aplica esto.

Ejemplo:
Tenemos un formulario de hay distintos controles (checkbox, spin, radiobutoon etc), y un combobox donde elegimos el usuario que esta usando el programa.
Vamos hacer que se pueda cambiar de usuario y ver cuales son sus configuraciones y también las podemos modificar.

Formulario en el Ide
Código fuente:
-

-


Funcionando la aplicación:


Y cambiando algunos valores para otro usuario:




Enlace de descarga: enlace a box.com


Fuente: http://www.gambas-es.org/viewtopic.php?f=1&t=3611&highlight=guardar+configuraciones





Fuentes:
  http://gambasdoc.org/help/comp/gb.settings/settings?en&v3
  http://www.gambas-es.org/viewtopic.php?f=1&t=19&highlight=settings
  http://www.gambas-es.org/viewtopic.php?t=3763&p=21273

3 comentarios:

  1. hola probe usar tu codigo para guardar si un checkbox esta checkeado o no pero al abrir la aplicación aparece todo por default y el archivo .conf no se crea.

    mi codigo es:
    PUBLIC SUB Form_Close()
    ' Save window settings when application closes
    Settings["Window/Checkbox1"] = checkbox1.value
    Settings["Window/Checkbox2"] = checkbox2.value
    END

    PUBLIC SUB Form_Open()
    ' Si no encuentra el dato, asigna el que tengamos actualmente
    checkbox1.value = Settings["Window/Checkbox1", checkbox1.value]
    checkbox2.value = Settings["Window/Checkbox2", checkbox2.value]
    END

    el complemente gb.setting lo tengo activo.

    ResponderEliminar
    Respuestas
    1. yo lo tengo de esta forma y funciona

      en esta funcion revisa el estado del switchButton que el usuario puso (activo o inactivo)

      Public Sub swbtn_clResults_Click()
      Select (swbtn_clResults.Value)
      Case True
      FMain.msettings["settings_application/cl_result"] = True
      FMain.msettings.Save()

      Case False
      FMain.msettings["settings_application/cl_result"] = False
      FMain.msettings.Save()

      End Select
      End

      hago un metodo que tiene dos parametros 1 - el switchButton que pasemos y el valor (true,false)

      Private Function Set_SwtbnStatus(swbtn As SwitchButton, val As Boolean)
      Select (val)
      Case True
      swbtn.Value = True
      Case False
      swbtn.Value = False
      End Select
      End

      y para finalizar al inicio del formulario coloco ya el valor que obtiene de las configuraciones

      Set_SwtbnStatus(swbtn_clResults, CBool(FMain.msettings["settings_application/cl_result"]))

      Eliminar
  2. Ermides. Prueba usar el combobox y selecciona un usuario. Así carga la configuración. El problema ( o es normal) es
    que según vas seleccionando usuario aparece la misma configuración para todos, si el usuario no tiene ninguna.

    ResponderEliminar

A falta de donativos... un poco de publicidad