Windows registry e INI files




O Windows sistem registro é uma base de dados hierárquica onde aplicações armazenam informação de configuração. A classe VCL TRegistry fornece métodos para ler e escrever o registro.

Até Windows 95, a maioria da aplicações armazenavam informações de configuração em arquivos de inicialização, geralmente nomeados com extensão .INI. A VCL provê as seguintes classes para facilitar a manutenção e migração de programas que usam arquivos INI:


TRegistry para trabalhar com o registro.


TIniFile ou TMemIniFile para trabalhar com Windows 3.x estilo arquivos INI.


TRegistryIniFile quando você quiser trabalhar tanto com o registro quanto com arquivos INI. TRegistryIniFile possui propriedades e métodos similares aos de TIniFile, mas é lido e escrito para o sistem registro. Em usando uma variável do tipo TCustomIniFile (o ancestral comum de TIniFile, TMemIniFile, e TRegistryIniFile), você pode escrever códigos genéricos que acessam um ou outro: o registro ou um arquivo INI, dependendo de onde ele é chamado.




Usando TINIFile




O formato arquivo INI ainda é popular, pois muitas das configurações de arquivos do C++Builder (como o ambiente DSK Desktop) são neste formato. Pelo fato de este formato de arquivo ser e estar predominante, a VCL provê uma classe que realiza leitura e escrita destes arquivos com bastante facilidade. Quando você instanciar o objeto arquivo INI, você passa como um parâmetro para o construtor o nome do arquivo INI. Se o arquivo não existe, ele é criado automaticamente. Então você é livre para ler valores usando ReadString, ReadInteger, ou ReadBool. Alternativamente, se você quiser para ler uma seção completa do arquivo INI, você pode usar o método ReadSection. Similarmente, você pode escrever valores usando WriteBool, WriteInteger, ou WriteString.


A seguir, está um exemplo de leitura configuração informação de um arquivo INI num construtor form's e escrita valor no evento OnClose.



void __fastcall TForm1::TForm1(TObject *Sender)

{

TIniFile *ini;
ini = new TIniFile( 
ChangeFileExt( Application->ExeName, ".INI" ) );
Top = ini->ReadInteger( "Form", "Top", 100 );
Left = ini->ReadInteger( "Form", "Left", 100 );
Caption = ini->ReadString( "Form", "Caption", 
"Default Caption" );
ini->ReadBool( "Form", "InitMax", false ) ?
WindowState = wsMaximized : 
WindowState = wsNormal;
delete ini;

}

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{

TIniFile *ini;
ini = new TIniFile(ChangeFileExt( Application->ExeName, ".INI" ) );
ini->WriteInteger( "Form", "Top", Top );
ini->WriteInteger( "Form", "Left", Left );
ini->WriteString ( "Form", "Caption", Caption );
ini->WriteBool ( "Form", "InitMax",
WindowState == wsMaximized );
delete ini;
}



Cada uma das rotinas pega três parâmetros. A primeira seção identifica a seção dos arquivos INI. O segundo parâmetro identifica o valor que você quer para ler, e o terceiro é um valor default para o caso de a seção ou valor não existir no arquivo INI. Similarmente, o escrever rotinas criará a seção valor and/or (e/ou) se eles não existem. O código exemplo cria um arquivo INI que a primeira vez que ele é executado terá um aspecto assim como:


[Form]
Top=185
Left=280
Caption=Default Caption

InitMax=0

Em execução subseqüente desta aplicação, o valor INI será interpretado durante a criação do form e escrito posterior fora no evento OnClose.




Usando TRegistry




A maioria das aplicações 32 bits armazenam suas informações no registro no lugar de arquivos INI porque o registro é hierárquico, mais robusto e não sofre as limitações de tamanho dos arquivos INI. O objeto TRegistry contém métodos para abrir, fechar, salvar, mover, copiar e deletar chaves.

O seguinte exemplo devolve um valor de uma entrada de registro:



#include <Registry.hpp>

AnsiString GetRegistryValue(AnsiString KeyName)
{

AnsiString S;
TRegistry *Registry = new TRegistry;
try
{
Registry->RootKey = HKEY_LOCAL_MACHINE;
// False porque nós não queremos criá-lo se ele não existe
Registry->OpenKey(KeyName,false); 
S = Registry->ReadString("VALUE1");
}
__finally
{
delete Registry;
}
return S;

}





Usando TRegINIFile




Se você está acostumado com arquivos INI e precisa mudar sua configuração para informações sobre registro, você pode usar a classe TRegINIFile. TRegINIFile é desenhado para criar entradas de registro com aparência como entradas arquivos INI. Todos os métodos de TINIFile (leitura e escrita) existem em TRegINIFile. Quando você construir um objeto TRegINIFile, o parâmetro que você passar (o filename para um objeto INIFile) torna-se uma chave. Na realidade, este objeto simplifica consideravelmente a interface do registro, portanto talvez você prefira usá-lo no lugar do componente TRegistry.




anterior

índice

próxima


HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO