Para facilitar o uso do usuário e tornar o sistema flexível, a maioria dos aplicativos Windows registram as escolhas feitas pelo usuário e diversas informações alteradas do sistema no arquivo de inicialização (INI). Portanto, quando o ambiente do sistema muda, o arquivo INI pode ser modificado diretamente sem modificar o programa. Pode-se observar que o arquivo INI é crucial para a funcionalidade do sistema. Este artigo apresentará como ler e gravar arquivos INI ao desenvolver aplicativos Windows usando Visual Basic para Windows (doravante denominado VB).
O arquivo INI é um arquivo de texto que consiste em várias seções. Sob cada título entre colchetes, existem várias palavras-chave (keyWord) começando com uma única palavra e um sinal de igual. Cada palavra-chave controla um determinado aspecto do aplicativo. função, o valor no lado direito do sinal de igual especifica o modo de operação da palavra-chave. Sua forma geral é a seguinte:
[seção1]
palavra-chave1=valor
palavra-chave2=valor2
…
[seção2]
palavra-chave1=valor1
palavra-chave2=valor2
…
Entre eles, se não houver nada no lado direito do sinal de igual (ou seja, o valor estiver vazio), significa que o aplicativo Windows especificou um valor padrão para a palavra-chave se uma palavra-chave (ou uma parte inteira) for. não encontrado no arquivo inteiro, o que também significa que os valores padrão são especificados para eles. A ordem em que as partes aparecem é irrelevante, assim como a ordem das palavras-chave em cada parte.
Geralmente existem duas maneiras de ler e gravar arquivos INI: uma é editá-los com o "Bloco de Notas" no Windows, que é relativamente simples e não precisa de mais descrições, a outra é ler e gravar arquivos INI por um aplicativo do Windows, geralmente por; executando o aplicativo As informações no arquivo INI são lidas quando o aplicativo é encerrado e certas modificações feitas pelo usuário no ambiente em execução são salvas quando o aplicativo é encerrado.
O tipo de valor das palavras-chave é principalmente string ou inteiro e deve ser lido e escrito em duas situações. Para tornar o programa sustentável e portátil, é melhor encapsular a leitura e gravação de arquivos INI em um módulo (RWINI.BAS) e construir as funções GetIniS e GetIniN, bem como SetIniS e SetIniN em RWI-NI.BAS .Processo, você precisa usar as funções "GetPRivateprofileString", "GetPrivateProfileInt" e "WritePrivateProfileString" da API do Windows nessas funções e processos.
O código do programa do módulo RWINI.BAS é o seguinte:
Declare as funções da API do Windows usadas na seção General-Declearation:
DeclareFunctionGetprivateprofileStringLib"Ker-nel"(ByVallpAppNameAsString, ByVallpKeyNameAsString, ByVallpDefaultAsString, ByVallpRetrm-StringAsString, ByValcbReturnStringAsInteger, ByValFilenameAsString)AsInteger
DeclareFunctionGetPrivatePfileIntLib"Kernel"(ByVallpAppNameAsString, ByVallpKeyNameAsString, ByVallpDefaultAsInteger, ByValFilenameAsString)AsInteger
DeclareFuncitonWritePrivateprofileStringLib"Kernel"(ByVallpapplicationNameAsString, ByVallpKeyNameAsString, ByVallpStringAsString, ByVallplFileNameAsString)AsInteger
FunctionGetIniS(ByValSectionNameAsString, ByValKeyWordAsString, ByValDefStringAsString)AsString
DimResultStringAsString*144,TempAsInteger
DimsAsString, iAsInteger
Temp=GetPrivateProfileString(SectionName,KeyWord,"",ResultString,144,AppProfileName())
'Recupera o valor da palavra-chave
IfTemp>0Then'valor da palavra-chave não está vazio
s=""
Fori=1To144
IfAsc(Mid$(ResultString,I,1))=0Então
Sair para
Outro
s=s&Mid$(ResultString, I, 1)
FimSe
Próximo
Outro
Temp = WritePrivateProfilesString (nome da seção, KeyWord, DefString, ppProfileName ())
'Escreve valores padrão no arquivo INI
s=StringDef
FimSe
GetIniS=s
Função Final
FunctionGetIniN(ByValSectionNameAsString, ByValKeyWordAsString, ByValDefValue
AsIneger)AsInteger
DimdAsLong,sAsString
d=ValorDef
GetIniN=GetPrivateProfileInt(SectionName,
Palavra-chave,DefValue,ppProfileName())
Ifd<>DefValueThen
s=""&d
d=WritePrivateProfileString(SeçãoNome,
Palavra-chave,s,AppProfileName())
FimSe
Função Final
SubSetIniS(ByValSectionNameAsString, BtVaKeyWordAsString, ByValValStr
AsString)
Dimres
res=WritePrivateprofileString(SectionName,KeyWord,ValStr,AppProfileName())
Fim Sub
SubSetIniN(ByValSectionNameAsString, ByValKeyWordAsString, ByValValInt
AsInteger)
Dimres,s$
s$=Str$(ValInt)
res=WriteprivateProfileString(SectionName,KeyWord,s$,AppProfileName())
Fim Sub
SectionName é o título de cada seção, KeyWord é a palavra-chave, DefValue em GetIniS e GetIniN é o valor padrão da palavra-chave e ValStr e ValInt em SetIniS e SetIniN são os valores da palavra-chave a serem gravadas no arquivo INI. Para ilustrar melhor como usar as funções e procedimentos acima, dois exemplos são dados abaixo.
Exemplo 1:
O desenvolvimento de aplicativos geralmente requer o uso de bancos de dados e outros arquivos. Os diretórios desses arquivos (incluindo caminhos e nomes de arquivos) não devem ser fixos no programa, mas são salvos em arquivos INI, que são lidos dos arquivos INI quando o programa é executado. correndo. O código para ler o arquivo do banco de dados é o seguinte:
DimDatabasenameAsString
Databasename=GetIniS("banco de dados", "funcionário", "")
IfDatabaseName=""ThenDatabaseName=InputBox("Informe o diretório do banco de dados "Funcionário"),
App.Title)' também pode ser selecionado através da "Diálogo de Arquivo"
OnErrorResumePróximo
Setdb = OpenDatabas (nome do banco de dados)
SeErro<>0Então
MsgBox "Falha ao abrir banco de dados!", MB-
ICONSTOP,App.Título:GotoErrorProcessing
Outro
SetIniS"Banco de Dados","Funcionário",NomeBancoDeDados
FimSe
OnErrorGoTo0
…
Exemplo 2:
Para facilitar as operações do usuário, às vezes é necessário salvar determinadas informações da interface do usuário, como altura e largura da janela. Ao carregar o formulário, leia a altura e a largura do formulário no arquivo INI. Ao descarregar o formulário, armazene a altura e a largura atuais do formulário no arquivo INI.
SubForm1_Load()
…
Forml.Height=GetIniN("Formulário 1", "Altura", 6000)
Form1.Width=GetIniN("Form1","Altura",4500)
Fim Sub
…
SubForm1_Unload()
…
SetIniN"Form1","Altura",Me.Altura
SetIniN"Form1,"Largura",Me.Largura
…
FimSub->