buenas a todos los foreros
Les traigo una clase dedicada a leer y guardar en archivos .ini
bueno aki el code de la clase:
Option Explicit
'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
Public Function Leer_Ini(Path_INI As String,Section as String, Key As String, Default As Variant) As String
Dim bufer As String * 256
Dim Len_Value As Long
Len_Value = GetPrivateProfileString(Section, 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
Public Function Grabar_Ini(Path_INI As String,Section as string, Key As String, Valor As Variant) As String
WritePrivateProfileString Secition, Key, Valor, Path_INI
End Function
Para el formato del archivo ini se debe manejar asi:
[sección]
CLAVE1=VALOR
CLAVE2=VALOR
........
y para llamar a la funcion para leer el ini es:
ClaseIni.Leer_Ini("Dir del archivo ini","Sistema","CLAVE a leer","un Valor Default sino existe tal valor en el ini o 0")
para guardar:
Claseini.Grabar_Ini("Dir del archivo ini","Config","Clave donde guardar el valor","Valor a guardar")
Nota: Los nombres mostrados anteriormente antes de llarmar a la funcion es el nombre de la clase
para una mejor compresion de esto miremos un ejemplo:
Vamoss a llamara a la clase por un valor del ini dada una configuracion:
variable=ClaseIni.leer_Ini("C:\windows","Config",1001,0)
variable=ClaseIni.leer_Ini("C:\windows","Window","NOOPEN","Holas")
Y para guardar:
ClaseIni.Grabar_Ini("C:\windows","Config",1001,1)
ClaseIni.Grabar_Ini("C:\windows","Window","NOOPEN","YES")
@ Zeroql
Esto esta mal, la estructura del ini es sección, Clave, valor.
[sección]
CLAVE1=VALOR
en ese codigo tenes la sección como una constante :S
Edit: me retracto de lo anteriormente dicho, no esta mal puesto que es funcional, pero no esta bien implementado.
UMMM puede ser, pero dejemoslo asi para los novatos. al fin y acabo que esta pensada para ellos.
La mejor clase para los ini que he visto y usado es la de Cobein k por cierto Cobein deberias postearla aca :P
puede ser
cobein posteala en aca para comparar y que los demas se escojan cual les parece mejor no te parece?
@ Cobein
me parece que es solo un modulo normal,¿¿es la que usabamos en los widget??,pues bueno si es esa,funciona perfecto..
saludos.
Lo he adaptado a mi manera:
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
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
Private iSection As String
Private iPath As String
Public Sub Set_Path(sPath As String)
iPath = sPath
End Sub
Public Sub Set_Section(sSection As String)
iSection = sSection
End Sub
Public Function Leer_Ini(key As String) As String
Dim sBuffer As String * 256, lenValue As Long
lenValue = GetPrivateProfileString(iSection, key, "", sBuffer, Len(sBuffer), iPath)
Leer_Ini = Left(sBuffer, lenValue)
End Function
Public Function Grabar_Ini(key As String, valor As Variant) As String
WritePrivateProfileString iSection, key, valor, iPath
End Function
anda a saber donde debe andar cobein jaja
aca les dejo la clase ini:http://www.uploadsourcecode.com.ar/d/gIgNKU7hqdXrTmUFV59HGUGruP5FeQb2
saludos
A ver, no nos saquemos los ojos, lo mio fuo una critia u observacion nada mas, hice una critica con su respectiva justificacion para que si el considera que es valedera corrija el code y aprenda de ello, nada mas, esto no es una competencia de nada, personalmente valoro su aporte.
Con respecto a lo que decian, el modulo que hice NO es mejor que nada, es simple y esta incompleto, es solamente lo que necesitaba, no tiene enumeracion ni muchas cosas mas que tendria que tener para ser considerado siquiera COMPLETO.
Ya he modificado la clase gracias a la observacion de Cobein.
ya veran uds si les agrada o no, a mi me parece que esta muy completa y es algo pequeña. bueno al fin y al cabo el foro es para ayudar y opinar sobre los post.
al que le sirva bien.
y por sirto Kizar te muy kedo bien la modificacion.
Ahora quedo mejor!
Mi observacion fue simplemente para ayudar, se supone que la idea es que todos aprendamos de todos, y es bueno que comenten y hagan criticas constructivas asi todos podemos mojorar los codes y aprender.