// Usando o Registro do Windows
// http://0x1f.blogspot.com/
uses Registry; // Adicionar a unit Registry em uses
// Primeira dica:
procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
with Reg do
try
RootKey := HKEY_CLASSES_ROOT;
OpenKey('\MeuPrograma', True);
WriteString('', 'Arquivo do meu programa'); //Nome dado ao arquivo de sua aplicação. "Ex: Imagem Gif".
CloseKey;
OpenKey('MeuPrograma\DefaultIcon', True);
// O primeiro parâmetro da linha de comando abaixo, é para escrever uma string vazia.
// E o último parâmetro é para colocar o ícone da sua aplicação nos arquivos que serão abertos por ela.
WriteString('', Application.ExeName + ',0');
CloseKey;
OpenKey('MeuPrograma\Shell\Open\Command', True);
WriteString('', Application.ExeName + ' "%1"');
CloseKey;
RootKey := HKEY_CLASSES_ROOT;
OpenKey('\.ext', True); // Substitua o "ext" pela extensão que você deseja utilizar.
WriteString('', 'MeuPrograma');
CloseKey;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
{ Segunda dica, com ela você aprenderá como ler ou escrever um valor no registro do windows:}
procedure Button1.Click(Sender: TObject);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
with Reg do begin
RootKey := HKEY_LOCAL_MACHINE;
Openkey('Software\Microsoft\Outlook Express\5.0\Default Settings\Recent Stationery List', False);
WriteString('File0', 'Natureza.htm');
WriteString('File1', 'Dia Claro.htm');
CloseKey;
end;
end; { Neste exemplo nós trocamos de ordem os papéis de carta do Microsoft Outlook Explorer, embora você possa alterar qualquer registro já existente no "regedit". Se o que você que é incluir um registro e não editar, como nós fizemos, basta que no primeiro parâmetro da linha de comando "writestring", você coloque um nome para o seu registro, que não exista nesta pasta.
Agora no código abaixo veremos como ler um valor de um registro qualquer: }
procedure Button1.Click(Sender: TObject);
var
Reg: TRegistry;
S: string;
begin
Reg := TRegistry.Create;
with Reg do begin
RootKey := HKEY_LOCAL_MACHINE;
Openkey('SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\', False);
S := ReadString('version');
CloseKey;
end;
Edit1.Text := S;
end; { Neste caso nós pegamos o registro "version", que significa a versão do windows, colocamos o seu valor na variável "s" e depois à "jogamos" num "edit" qualquer, apenas para que possamos visualizá-la.
Agora que você já sabe como escrever no registro do windows, veremos o que precisamos escrever, para colocar a nossa aplicação para ser inicializada junto com o windows.}
procedure Button1.Click(Sender: TObject);
var Reg: Tregistry;
begin
Reg := TRegistry.Create;
with Reg do begin
RootKey := HKEY_LOCAL_MACHINE;
Openkey('\MICROSOFT\WINDOWS\CURRENTVERSION\RUN', False);
WriteString('MeuPrograma', PChar(Application.ExeName));
CloseKey;
end;
end;
//Este exemplo mostra como funciona como podemos gravar dados do registro do Windows utilizando o Delphi 2 ou 3
procedure Form1.GravarRegistro;
const
Raiz : string = 'Software\Programa';
var
Registro : TRegistry;
begin
Registro := TRegistry.Create; // Chama o construtor do objeto
{ Abre a chave (se o 2°. Parâmetro for True, ele cria 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 armazenas 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 se escrever dados de outros tipos, utilize as funções:
}
WriteBool(NomeDoValor, Conteudo); // Boolean
WriteBinaryData(NomeDoValor, Conteudo); // Valor Binário
WriteCurrency(NomeDoValor, Conteudo); // Currency
WriteDate(NomeDoValor, Conteudo); // TDateTime
WriteDateTime(NomeDoValor, Conteudo); // TDateTime
WriteFloat(NomeDoValor, Conteudo); // Float (Real)
WriteInteger(NomeDoValor, Conteudo); // Integer
WriteString(NomeDoValor, Conteudo); // string
WriteTime(NomeDoValor, Conteudo); // TDateTime { Este exemplo mostra como funciona como podemos ler dados do registro do Windows utilizando o Delphi 2 ou 3
procedure Form1.LerRegistro;
const Raiz: string = 'Software\Programa';
var Registro: TRegistry;
begin
Registro := TRegistry.Create; // Chama o construtor do objeto
with Registro do begin
if OpenKey(Raiz, False) then // Somente abre se a chave existir
// 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; {Sempre use CloseKey quando não for precisar 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): Boolean;
ReadBinaryData(NomeDoValor; var Buffer; TamBuffer: Integer): Integer;
ReadCurrency(NomeDoValor): Currency;
ReadDate(NomeDoValor): TDateTime;
ReadDateTime(NomeDoValor): TDateTime;
ReadFloat(NomeDoValor): Double;
ReadInteger(NomeDoValor): Integer;
ReadString(NomeDoValor): string;
ReadTime(NomeDoValor): TDateTime;