É 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. |