"
"
Registro do Windows - Acesso e Manipulação
Cada vez mais os sistemas precisam de informações de configuração e opções (como senhas, posições de impressão, etc) que precisam ser gravadas em algum lugar. O Delphi possibilita armazená-las em Arquivos .INI (lembra deles...do Windows 3.x), através do Objeto TIniFile. A menos que você esteja utilizando esta versão do Windows (coisa q eu acho difícil ..rsrs), a melhor alternativa é utilizar o Registro do Sistema, que já está disponível a partir Windows 95.
Se você não sabe do que eu estou falando, não se desespere. Antes de começar a utilizar estas informações, vá até Iniciar, Executar e digite regedit. O editor do registro do sistema será exibido e você poderá ter uma idéia de como ele funciona. O programa separa as opções de registro em "pastas", conhecidas aqui como "chaves". Essas chaves contém dados, chamados de "valores". Esses valores possuem um nome, um tipo e um valor específico.
O Delphi encapsula o registro através do objeto TRegistry. É através dele que você irá acessar os dados. Para entender melhor como funciona o objeto, vamos explicar primeiro como funciona o Registro do Windows:
As principais chaves "raízes" são: HKEY_LOCAL_MACHINE e HKEY_CURRENT_USER. Todas as informações sobre os programas ficam nessas chaves (as outras normalmente possuem informações sobre o Windows).
O InstallShield, por exemplo, instala as informações sobre o nome de usuário e empresa do seu programa em:
HKEY_LOCAL_MACHINE\SOFTWARE\Nome da Sua Empresa\Nome Do Programa\Versão
com os valores Company e Name (Empresa e Nome do Usuário).
Os programas, por sua vez, usam a chave HKEY_CURRENT_USER\Software. É nessa chave que você deve inserir sua sub-chave e colocar lá as informações necessárias. Um pequeno exemplo de como utilizar o registro do Windows:
- Suponhamos que o programa necessite gravar a posição da janela, o seu tamanho e o diretório inicial dos diálogos Abrir e Salvar. Devemos instanciar um objeto do tipo TRegistry, acessar a chave ou criá-la, caso não exista, e escrever seus respectivos dados nos valores adequados, para depois liberar a instância.
Bom, agora vamos logo ao que interessa. A gravação/Leitura no Registro. Este exemplo ilustra como gravar dados.
Primeiramente devemos declarar a unit Registry na clausula Uses da aplicação.procedure frmMain.GravarRegistro;const Raiz : String = 'Software\Programa';var Registro : TRegistry;begin // Chama o construtor do objeto Registro := TRegistry.Create; { Abre a chave (se o 2° Parâmetro for True, cria-se a chave caso ela ainda não exista. } Registro.OpenKey (Raiz, True); // Grava as informações do form Registro.WriteInteger ('Largura', Width); Registro.WriteInteger ('Altura', Height); Registro.WriteInteger ('Esquerda', Left); Registro.WriteInteger ('Topo', Top); // Grava as informações das caixas Abrir e Salvar. Registro.WriteString ('Abrir Inicial', OpenDialog1.InitialDir); Registro.WriteString('Salvar Inicial', SaveDialog1.InitialDir); // Fecha a chave e o objeto Registro.CloseKey; Registro.Free;end;
Após a criação do objeto, deve-se escolher uma chave para armazenar os valores. No caso, "Software\Programa", cuja chave raiz é HKEY_CURRENT_USER. Note que para se separar as chaves das sub-chaves utiliza-se o caracter "\", tal como nos diretórios do DOS.
Os métodos WriteInteger e WriteString são utilizados para gravar valores inteiros e caracteres, respectivamente. A sintaxe básica é Registro.WriteString(NomeDoValor, Conteúdo);
onde NomeDoValor é o nome que você vai dar ao valor dentro da chave, e Conteúdo é o conteúdo desse valor.
Para escrever dados de outros tipos, utilize as funções: WriteBool(NomeDoValor, Conteúdo); // Dados tipo Boolean WriteBinaryData(NomeDoValor, Conteúdo); // Valor Binário WriteCurrency(NomeDoValor, Conteúdo); // Dados tipo Currency WriteDate(NomeDoValor, Conteúdo); // Dados tipo TDate WriteDateTime(NomeDoValor, Conteúdo); // Dados tipo TDateTime WriteFloat(NomeDoValor, Conteúdo); // Dados tipo Float (Real) WriteInteger(NomeDoValor, Conteúdo); // Dados tipo Integer WriteString(NomeDoValor, Conteúdo); // Dados tipo String WriteTime(NomeDoValor, Conteúdo); // Dados tipo TTime
Este exemplo mostra como podemos ler dados do registro do Windows utilizando o Delphi.procedure frmMain.LerRegistro;const Raiz : String = 'Software\Programa';var Registro : TRegistry;begin // Chama o construtor do objeto Registro := TRegistry.Create; with Registro do begin // Somente abre se a chave existir if OpenKey (Raiz, False) then begin { Envia as informações ao form, vendo se os valores existem, primeiramente.} if ValueExists ('Largura') then Width := ReadInteger ('Largura'); if ValueExists ('Altura') then Height := ReadInteger ('Altura'); if ValueExists ('Esquerda') then Left := ReadInteger ('Esquerda'); if ValueExists ('Topo') then Top := ReadInteger ('Topo'); // Envia as informações para as caixas Abrir e Salvar. OpenDialog1.InitialDir := ReadString ('Abrir Inicial'); SaveDialog1.InitialDir := ReadString ('Salvar Inicial'); // Fecha a chave e o objeto Registro.CloseKey; Registro.Free; end; end;end;
Sempre use CloseKey quando não precisar mais do Registro. Isso permite que as opções sejam gravadas permanentemente, evitando que qualquer problema que o computador tenha afete seu programa.
Os métodos ReadInteger e ReadString funcionam praticamente da mesma maneira que seus correspondentes de escrita. A diferença é que ao invés de passar o valor Conteúdo, eles retornam o valor armazenado. Os correspondentes dos outros tipos são: ReadBool(NomeDoValor) // Valor booleano ReadBinaryData( NomeDoValor ; var Buffer ; TamBuffer : Integer) // Valor Binário ReadCurrency(NomeDoValor) // Valor Currency ReadDate(NomeDoValor) // Valor Date ReadDateTime(NomeDoValor) // Valor DateTime ReadFloat(NomeDoValor) // Valor Float(Real) ReadInteger(NomeDoValor) // Valor Inteiro ReadString(NomeDoValor) // Valor String ReadTime(NomeDoValor) // Valor DateTime
É isso aí pessoal! Qualquer dúvida, entrem em contato.
Até a próxima
0 التعليقات:
إرسال تعليق