Ejemplo que utiliza las funciones Api GetPrivateProfileString y WritePrivateProfileString para grabar y leer datos en un archivo de configuración ini
La función que lee es GetPrivateProfileString, la función que graba WritePrivateProfileString.
Las dos poeen casi los mismos parámetros: ( La ruta y nombre del archivo Ini, el nombre de La clave a leer o grabar, el Valor que se va a leer o grabar.)
Nota: La función GetPrivateProfileString, tiene un parámetro adicional ( ByVal lpDefault As String ) para los valores por defecto en caso de que no haya ningún dato que leer.
El siguiente ejemplo lo que hace es leer y almacenar en un archivo Ini ( ubicado en el App.Path del programa y llamado Config.ini), ..el ancho, alto, el Top y el Left del formulario.
En el evento FormLoad, se llama a la función de ajuste llamada Leer_Ini (Esta función retorna el valor leido )
Private Function Leer_Ini(Path_INI As String, Key As String, Default As Variant) As String
..en el evento Unload del formulario se llama a la función Grabar_Ini.
Private Function Grabar_Ini(Path_INI As String, Key As
String, Valor As Variant) As String
En el fichero Ini se almacenarán los datos de esta forma:
[MiPrograma]
Left=0
Top=0
Width=12165
Height=5000
Nota: Si el archivo ini no existe, la función api WritePrivateProfileString, lo crea automáticamente, o sea que no generará error de Acceso o ruta de archivo inexistente
Código fuente en el formulario
Option Explicit
Const APPLICATION As String = "MiPrograma"
Dim m_Left As Single
Dim m_Top As Single
Dim m_Width As Single
Dim m_Height As Single
Dim Path_Archivo_Ini As String
'Función api que recupera un valor-dato de un archivo Ini
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
ByVal lpApplicationName As String,ByVal lpKeyName As String, _
ByVal lpDefault As String,ByVal lpReturnedString As String, _
ByVal nSize As Long,ByVal lpFileName As String) As Long
'Función api que Escribe un valor - dato en un archivo Ini
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
ByVal lpApplicationName As String,ByVal lpKeyName As String, _
ByVal lpString As String,ByVal lpFileName As String) As Long
'Lee un dato _
-----------------------------
'Recibe la ruta del archivo, la clave a leer y _
el valor por defecto en caso de que la Key no exista
Private Function Leer_Ini(Path_INI As String, Key As String, Default As Variant) As String
Dim bufer As String * 256
Dim Len_Value As Long
Len_Value = GetPrivateProfileString(APPLICATION,Key, _
Default,bufer,Len(bufer),Path_INI)
Leer_Ini = Left$(bufer, Len_Value)
End Function
'Escribe un dato en el INI _
-----------------------------
'Recibe la ruta del archivo, La clave a escribir y el valor a añadir en dicha clave
Private Function Grabar_Ini(Path_INI As String, Key As String, Valor As Variant) As String
WritePrivateProfileString APPLICATION,Key,Valor,Path_INI
End Function
Private Sub Form_Load()
'Path del fichero Ini
Path_Archivo_Ini = App.Path & "\config.ini"
' Lee las Key y Les envia el valor por defecto por si no existe
m_Left = Leer_Ini(Path_Archivo_Ini, "Left", 0)
m_Top = Leer_Ini(Path_Archivo_Ini, "Top", 0)
m_Width = Leer_Ini(Path_Archivo_Ini, "Width", 5000)
m_Height = Leer_Ini(Path_Archivo_Ini, "Height", 5000)
'Posiciona el formulario con los valores del archivo Ini
Move m_Left, m_Top, m_Width, m_Height
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Escribe en el archivo Ini
'Posición del Form
Call Grabar_Ini(Path_Archivo_Ini, "Left", Me.Left)
Call Grabar_Ini(Path_Archivo_Ini, "Top", Me.Top)
'Tamaño del formulario
Call Grabar_Ini(Path_Archivo_Ini, "Width", Me.Width)
Call Grabar_Ini(Path_Archivo_Ini, "Height", Me.Height)
End Sub