Dicas Delphi Mep Sites - Como gravar e ler informações no registro do Windows?

Mep Sites: Dicas de Delphi - Gravando e lendo dados no registro do Windows

É um tanto incômodo ficar manipulando o registro do Windows com as funções do Delphi cada vez que você vai acessá-lo, seja para ler um simples valor ou carregar todas as opções do seu programa. Desenvolvi estas funções para uso pessoal, adaptando-as de uma idéia que não lembro onde achei. Não se esqueça de definir a unit "Registry" na cláusula Uses.

Function LeReg(mepRoot: Cardinal; Chave: String; const Key: String; KeyType: TKeyType; DefValue: Variant): Variant;
var r: TRegistry;
begin
// cria o objeto TRegistry
r := TRegistry.Create;
// conecta ao root diferente do padrão
r.RootKey := mepRoot;
try
// abre a chave (no root selecionado)
// o segundo parâmetro True, indica que se a chave não existir, a operação de abertura poderá criá-la.
r.OpenKey(chave, True);
Result := DefValue;
// testa se existe o valor que se deseja ler.
// note que, para verificar a existência de chaves, utilizados KeyExists([chave]) e para verificar a existência de conjunto de
//chaves de uma chave, utilizamos ValueExists([valor])
if r.ValueExists(Key) then
begin
case KeyType of
// lê o valor da chave em formato String
ktString: Result := r.ReadString(Key);
// lê o valor da chave em formato Boolean
ktBoolean: Result := r.ReadBool(Key);
// lê o valor da chave em formato Integer
ktInteger: Result := r.ReadInteger(Key);
// lê o valor da chave em formato Currency (moeda)
ktCurrency: Result := r.ReadCurrency(Key);
// lê o valor da chave em formato TDateTime (data)
ktDate: Result := r.ReadDate(Key);
// lê o valor da chave em formato TDateTime (hora)
ktTime: Result := r.ReadTime(Key);
end;
end;
finally
// destroy o objeto criado
r.Free;
end;
end;

Procedure EscreveReg(mepRoot: Cardinal; Chave: String; const Key: String; const Value: Variant; KeyType: TKeyType);
var r: TRegistry;
begin
// cria o objeto TRegistry
r := TRegistry.Create;
// conecta ao root diferente do padrão
r.RootKey := mepRoot;
try
// abre a chave (no root selecionado)
r.OpenKey(chave, True);
case KeyType of
// grava o valor da chave em formato String
ktString: r.WriteString(Key, Value);
// grava o valor da chave em formato Boolean
ktBoolean: r.WriteBool(Key, Value);
// grava o valor da chave em formato Integer
ktInteger: r.WriteInteger(Key, Value);
// grava o valor da chave em formato Currency (moeda)
ktCurrency: r.WriteCurrency(Key, Value);
// grava o valor da chave em formato TDateTime (Data)
ktDate: r.WriteDate(Key, Value);
// grava o valor da chave em formato TDateTime (Hora)
ktTime: r.WriteTime(Key, Value);
end;
finally
r.Free;
end;
end;


Chame-as assim, por exemplo para ler:

Form1.Caption := LeReg(HKEY_CURRENT_USER, 'Software\Minha Empresa\Meu programa', 'Titulo', ktString, 'Meu programa');

E para gravar:

EscreveReg(HKEY_CURRENT_USER, 'Software\Minha Empresa\Meu programa', 'Titulo', Edit1.Text, ktString);

Além destas, deixo aqui duas úteis que sempre incluo nos meus programas, para uma possível desinstalação dos mesmos. Sempre é bom limpar o registro do PC do usuário, um programa de respeito e bem programado faz isso ao ser desinstalado, removendo do registro suas informações. Vamos lá:

procedure ApagaValor(mepRoot: Cardinal; Chave, Valor: String);
var
r : TRegistry;
begin
r := TRegistry.Create;
r.RootKey := mepRoot;
try
r.OpenKey(Chave, False);
r.DeleteValue(Valor);
finally
r.Free;
end;
end;

procedure ApagaChaveInteira(mepRoot: Cardinal; Chave: String);
var
r : TRegistry;
begin
r := TRegistry.Create;
r.RootKey := mepRoot;
try
//r.OpenKey(Chave, False);
r.DeleteKey(Chave);
finally
r.Free;
end;
end;

Espero que estas funções possam facilitar seu dia-a-dia programando com o Delphi. Prefira usar o registro para configurações de aplicativos que são instalados, afinal é mais consistente e centralizado. Se seu programa roda direto, sem precisar instalar, então salve as opções num arquivo INI na mesma pasta dele, é melhor para o usuário.

Marcos Elias
Mep Sites - Dicas Delphi
http://delphi.mepsites.cjb.net