Hi,
Neste artigo, veremos como utilizar arquivos de extensão .INI (parâmetros de configuração) para armazenar e obter informações.
Normalmente, escrevemos e utilizamos uma função própria para isto, porém, existe uma maneira muito mais fácil - utilizando a API do WINDOWS =)
As funções responsáveis por tal são: GetPrivateProfileString e WritePrivateProfileString. A primeira é utilizada para obter um determinado valor, a última é utilizada para escrevermos valores.
Para começar, devemos declarar estas funções:
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal Secao As String, ByVal parametro As Any, ByVal padrao As String, ByVal variavel As String, ByVal tam As Long, ByVal arquivo As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal Secao As String, ByVal parametro As Any, ByVal valor As Any, ByVal arquivo As String) As Long
Vamos ver um exemplo de um programa que escreve valores em um arquivo .INI:
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal Secao As String, ByVal parametro As Any, ByVal padrao As String, ByVal variavel As String, ByVal tam As Long, ByVal arquivo As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal Secao As String, ByVal parametro As Any, ByVal valor As Any, ByVal arquivo As String) As Long
Private Sub Form_Load()
Dim nome As String
Dim sobrenome As String
Dim arquivo As String
arquivo = App.Path + "\config.ini"
nome = InputBox("Qual seu nome?")
sobrenome = InputBox("Sobrenome:")
Call WritePrivateProfileString("CONFIGURAÇÃO", "nome", nome, arquivo)
Call WritePrivateProfileString("CONFIGURAÇÃO", "sobrenome", sobrenome, arquivo)
End Sub
O programa acima solicita a entrada do seu nome e sobrenome e escreve-os no arquivo "config.ini".
Vamos ver passo a passo:
Dim nome As String
Dim sobrenome As String
Dim arquivo As String
Nos declaramos as variáveis que irão armazenar, respectivamente: nome digitado, sobrenome digitado e caminho do arquivo INI.
O caminho do arquivo é armazenado através da seguinte linha:
arquivo = App.Path + "\config.ini"
O método App.Path retorna o diretório em que o executável está. Por exemplo, se o programa estivesse em "C:\exemplo", a variável "arquivo" conteria: "c:\exemplo\config.ini".
Obtemos o nome e o sobrenome:
nome = InputBox("Qual seu nome?")
sobrenome = InputBox("Sobrenome:")
Escrevemos os dados:
Call WritePrivateProfileString("CONFIGURAÇÃO", "nome", nome, arquivo)
Call WritePrivateProfileString("CONFIGURAÇÃO", "sobrenome", sobrenome, arquivo)
Após executar o programa, o arquivo "config.ini" será criado e irá conter o seguinte:
Quote[CONFIGURAÇÃO]
nome=NOME DIGITADO
sobrenome=SOBRENOME DIGITADO
Dizemos que:
Quote[CONFIGURAÇÃO] -> seção;
nome e sobrenome -> parâmetros;
NOME DIGITADO e SOBRENOME DIGITADO -> valores.
A sintaxe da função WritePrivateProfileString é:
QuoteWritePrivateProfileString Seção, Parâmetro, Valor, Arquivo
Seção:
como já foi dito, é a identificação entre [] (colchetes).
Parâmetro:
seria o nome do parâmetro a adicionar.
Valor:
valor do parâmetro.
Arquivo:
caminho do arquivo .INI.
Obs:: Se você escrever diferentes valores, em um parâmetro de um seção, irá constar apenas o último. Exemplo:
WritePrivateProfileString "CONFIGURAÇÃO", "numero", "10", arquivo
WritePrivateProfileString "CONFIGURAÇÃO", "numero", "20", arquivo
WritePrivateProfileString "CONFIGURAÇÃO", "numero", "30", arquivo
No exemplo acima, teríamos:
Quote[CONFIGURAÇÃO]
numero=30
Veremos agora como proceder para obter valores. Observe:
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal Secao As String, ByVal parametro As Any, ByVal padrao As String, ByVal variavel As String, ByVal tam As Long, ByVal arquivo As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal Secao As String, ByVal parametro As Any, ByVal valor As Any, ByVal arquivo As String) As Long
Private Sub Form_Load()
Dim nome As String
Dim sobrenome As String
Dim arquivo As String
Dim retlen As Long
arquivo = App.Path + "\config.ini"
nome = String(256, 0)
sobrenome = String(256, 0)
retlen = GetPrivateProfileString("CONFIGURAÇÃO", "nome", "", nome, 256, arquivo)
nome = Left(nome, retlen)
retlen = GetPrivateProfileString("CONFIGURAÇÃO", "sobrenome", "", sobrenome, 256, arquivo)
sobrenome = Left(sobrenome, retlen)
If nome = "" Then
MsgBox "O parâmetro NOME não foi encontrado!", vbCritical
Else
MsgBox "O nome é: " + nome
End If
If sobrenome = "" Then
MsgBox "O parâmetro SOBRENOME não foi encontrado!", vbCritical
Else
MsgBox "O sobrenome é: " + sobrenome
End If
End Sub
Bem, temos uma estrutura um pouco mais complexa. Vamos ver:
Dim retlen As Long
Essa variável é responsável por obter o número de bytes do valor requisitado.
Precisamos reservar um espaço nas variáveis para podermos armazenar os valores:
' Armazena 256 bytes
nome = String(256, 0)
sobrenome = String(256, 0)
As linhas abaixos, são responsáveis por obter os valores dos parâmetros, nome e sobrenome, respectivamente:
retlen = GetPrivateProfileString("CONFIGURAÇÃO", "nome", "",nome,256, arquivo)
nome = Left(nome, retlen)
retlen = GetPrivateProfileString("CONFIGURAÇÃO", "sobrenome", "", sobrenome, 256, arquivo)
sobrenome = Left(sobrenome, retlen)
Vamos destacar as linhas:
nome = Left(nome, retlen)
sobrenome = Left(sobrenome, retlen)
Caso o valor não ocupe os 256 bytes, teremos bytes sobrando. Para contornar isso, iremos obter apenas a parte relacionada ao valor do parâmetro.
Sintaxe da função GetPrivateProfileString:
QuoteGetPrivateProfileString Seção, Parâmetro, Padrão, Variável, Tam, Arquivo
Seção:
É a identificação entre [] (colchetes).
Parâmetro:
seria o nome do parâmetro a adicionar.
Padrão:
é o valor que deve ser retornado caso o parâmetro não for encontrado.
Variável:
variável que irá armazenar o valor.
Tam:
tamanho em bytes reservado na variável.
Arquivo:
caminho do arquivo .INI.
A função retorna um valor do tipo LONG contendo o número de bytes que o valor possui.
As linhas abaixo verificam se os valores foram obtidos e os mostra, caso afirmativo:
If nome = "" Then
MsgBox "O parâmetro NOME não foi encontrado!", vbCritical
Else
MsgBox "O nome é: " + nome
End If
If sobrenome = "" Then
MsgBox "O parâmetro SOBRENOME não foi encontrado!", vbCritical
Else
MsgBox "O sobrenome é: " + sobrenome
End If
Nome que verificamos se o valor das variáveis está vazio. Isso pois passamos um valor vazio para o argumento "Padrão" da função GetPrivateProfileString.
Bem simples não?
É isso....
Bye.