En el Evento del fMain Form_Open() Es decir, lo primero que hace el programa al ser abierto
Public sub Form_Open()
Dim f As Object
If Not Exist(User.Home &/ "." & Application.Name) Then 'No existe carpeta de configuraciones, luego es la primera ejecución
f = New FEntorno(True) 'Es el form que normalmente se abre con el Menú Administración->Preferencias. En este caso con un parametro true
Me.visible = False 'Ocultamos el principal
f.showmodal 'Abrimos en modo modal y cuando se cierre...
Me.close 'Terminamos el programa principal
Return
Else
Settings.Read(Me)
Inc Application.Busy
iComun.cargaentorno() 'función que almacena el archivo Settings en una colección pública para mayor velocidad (se supone)
endif
Dim f As Object
If Not Exist(User.Home &/ "." & Application.Name) Then 'No existe carpeta de configuraciones, luego es la primera ejecución
f = New FEntorno(True) 'Es el form que normalmente se abre con el Menú Administración->Preferencias. En este caso con un parametro true
Me.visible = False 'Ocultamos el principal
f.showmodal 'Abrimos en modo modal y cuando se cierre...
Me.close 'Terminamos el programa principal
Return
Else
Settings.Read(Me)
Inc Application.Busy
iComun.cargaentorno() 'función que almacena el archivo Settings en una colección pública para mayor velocidad (se supone)
endif
Luego en el formulario fEntorno, que tiene, más o menos éste aspecto:
Private lnuevo As Boolean
Public Sub _new(iniciar As Boolean)
lnuevo = iniciar
End
Public Sub form_Open()
Dim cad As String
Application.busy = 0
If lnuevo Then 'Recibimos el parámetro booleano que nos indica que es la primera vez que se ejecuta
creaEntorno() 'función que genera el .settings por defecto
Message("Se ha establecido la configuración por defecto. Puede afinarla en el Menú Administración->Preferencias")
cad = "\"" & Application.path &/ Application.name & "\""
Shell cad 'Lanzamos una nueva instancia del programa, que captará ya las variables del nuevo settings y...
Quit 'abortamos ésta
Endif
cargaEntorno()
....
....
End
Public Sub cargaEntorno()
Dim cad As Variant
iComun.Entorno = New Collection 'colección pública con el entorno del settings y otras cosas
For Each cad In Settings.keys["Entorno"]
iComun.entorno[cad] = Settings["Entorno/" & cad]
Next
........
.......
End
Public Sub _new(iniciar As Boolean)
lnuevo = iniciar
End
Public Sub form_Open()
Dim cad As String
Application.busy = 0
If lnuevo Then 'Recibimos el parámetro booleano que nos indica que es la primera vez que se ejecuta
creaEntorno() 'función que genera el .settings por defecto
Message("Se ha establecido la configuración por defecto. Puede afinarla en el Menú Administración->Preferencias")
cad = "\"" & Application.path &/ Application.name & "\""
Shell cad 'Lanzamos una nueva instancia del programa, que captará ya las variables del nuevo settings y...
Quit 'abortamos ésta
Endif
cargaEntorno()
....
....
End
Public Sub cargaEntorno()
Dim cad As Variant
iComun.Entorno = New Collection 'colección pública con el entorno del settings y otras cosas
For Each cad In Settings.keys["Entorno"]
iComun.entorno[cad] = Settings["Entorno/" & cad]
Next
........
.......
End
En un módulo tenemos la función que carga el entorno en los arranques "normales".
Public Sub creaEntorno()
iComun.pathEntorno = User.home &/ "." & Application.Name
Try Shell "rm -r " & iComun.pathEntorno Wait 'Eliminamos la carpeta vieja de configuración
Try Kill User.Home &/ ".config/gambas3" &/ Application.Name & ".conf" 'Eliminamos el archivo settings viejo
Mkdir User.home &/ "." & Application.Name 'Volvemos a crear la carpeta
iComun.copia_dir("Datos", User.home &/ "." & Application.Name) y cargamos los ficheros de configuración necesarios
Settings.Clear("Entorno") 'profilaxis
Settings.Save
Settings["Entorno/version"] = Application.Version 'rellenamos los distintos parámetros del settings
Settings["Entorno/path_config"] = User.Home &/ "." & Application.Name
Settings["Entorno/path_temporal"] = "/tmp"
Settings["Entorno/path_salida"] = User.Home &/ "Escritorio"
Settings["Entorno/path_css"] = User.Home &/ "." & Application.Name &/ "plantillas/css"
Settings["Entorno/css_default"] = "shinigami.css"
Settings["Entorno/path_escaner"] = User.home
Settings["Entorno/path_documentos"] = User.home
Settings["Entorno/logo_screen"] = User.Home &/ "." & Application.Name &/ "imagenes/logos/logo.png"
Settings["Entorno/logo_print"] = User.Home &/ "." & Application.Name &/ "imagenes/logos/inter_logo.png"
Settings["Entorno/img_firma"] = User.Home &/ "." & Application.Name &/ "imagenes/logos/firma.png"
Settings["Entorno/gr_alternate"] = -1
Settings["Entorno/gr_bgcolor"] = Color.Lighter(Color.LightBackground)
Settings["Entorno/gr_selectedcolor"] = Color.SelectedBackground
Settings["Entorno/gr_forecolor"] = Color.Foreground
Settings["Entorno/fuentecal"] = -1
Settings["Entorno/borrardoc"] = 0
Settings["Entorno/borrarpdf"] = 0
Settings["Entorno/salvarlocal"] = -1
Settings["Entorno/thunderbird"] = -1
Settings["Entorno/clientemail"] = "Thunderbird"
Settings["Entorno/mailasesoria"] = "unadireccion@decorreo.com"
Settings["Entorno/veravisos"] = -1
Settings["Entorno/tiempo"] = 10
Settings["Entorno/ultimo"] = Null
Settings.Save 'guardamos el archivo nuevo
.....
.....
....
End
iComun.pathEntorno = User.home &/ "." & Application.Name
Try Shell "rm -r " & iComun.pathEntorno Wait 'Eliminamos la carpeta vieja de configuración
Try Kill User.Home &/ ".config/gambas3" &/ Application.Name & ".conf" 'Eliminamos el archivo settings viejo
Mkdir User.home &/ "." & Application.Name 'Volvemos a crear la carpeta
iComun.copia_dir("Datos", User.home &/ "." & Application.Name) y cargamos los ficheros de configuración necesarios
Settings.Clear("Entorno") 'profilaxis
Settings.Save
Settings["Entorno/version"] = Application.Version 'rellenamos los distintos parámetros del settings
Settings["Entorno/path_config"] = User.Home &/ "." & Application.Name
Settings["Entorno/path_temporal"] = "/tmp"
Settings["Entorno/path_salida"] = User.Home &/ "Escritorio"
Settings["Entorno/path_css"] = User.Home &/ "." & Application.Name &/ "plantillas/css"
Settings["Entorno/css_default"] = "shinigami.css"
Settings["Entorno/path_escaner"] = User.home
Settings["Entorno/path_documentos"] = User.home
Settings["Entorno/logo_screen"] = User.Home &/ "." & Application.Name &/ "imagenes/logos/logo.png"
Settings["Entorno/logo_print"] = User.Home &/ "." & Application.Name &/ "imagenes/logos/inter_logo.png"
Settings["Entorno/img_firma"] = User.Home &/ "." & Application.Name &/ "imagenes/logos/firma.png"
Settings["Entorno/gr_alternate"] = -1
Settings["Entorno/gr_bgcolor"] = Color.Lighter(Color.LightBackground)
Settings["Entorno/gr_selectedcolor"] = Color.SelectedBackground
Settings["Entorno/gr_forecolor"] = Color.Foreground
Settings["Entorno/fuentecal"] = -1
Settings["Entorno/borrardoc"] = 0
Settings["Entorno/borrarpdf"] = 0
Settings["Entorno/salvarlocal"] = -1
Settings["Entorno/thunderbird"] = -1
Settings["Entorno/clientemail"] = "Thunderbird"
Settings["Entorno/mailasesoria"] = "unadireccion@decorreo.com"
Settings["Entorno/veravisos"] = -1
Settings["Entorno/tiempo"] = 10
Settings["Entorno/ultimo"] = Null
Settings.Save 'guardamos el archivo nuevo
.....
.....
....
End
El Formulario tiene también un botón de "Entorno por Defecto", con éste código:
Public Sub bporDefecto_Click()
Dim n As Integer
Dim cad As String
n = Message.warning("Esta acción establecerá las Configuración de Entorno por defecto de SHINIGAMI", "Continuar", "Cancelar")
If n = 1 Then
creaEntorno() 'La misma secuencia que en el Form fMain que puse más arriba: Se crea el entorno, se abre otra instancia del programa y se aborta ésta.
cad = "\"" & Application.path &/ Application.name & "\""
Message("Configuraciones grabadas correctamente. SHINIGAMI se reiniciará para que las configuraciones tengan efecto.")
Shell cad
Quit
Endif
End
Dim n As Integer
Dim cad As String
n = Message.warning("Esta acción establecerá las Configuración de Entorno por defecto de SHINIGAMI", "Continuar", "Cancelar")
If n = 1 Then
creaEntorno() 'La misma secuencia que en el Form fMain que puse más arriba: Se crea el entorno, se abre otra instancia del programa y se aborta ésta.
cad = "\"" & Application.path &/ Application.name & "\""
Message("Configuraciones grabadas correctamente. SHINIGAMI se reiniciará para que las configuraciones tengan efecto.")
Shell cad
Quit
Endif
End
No sé si me he explicado bien...