Strona g│≤wna

 

Wykorzystanie rejestru Windows jest bardzo przydatn▒ umiejΩtno╢ci▒ podczas programowania, a w szczeg≤lno╢ci podczas zapisywania danych. Wyobra╝ sobie, ┐e masz program, w kt≤rym chcia│by╢ zapisaµ jak▒╢ konfiguracje. Zr≤bmy prosty przyk│ad. 

1. Umie╢µ na formularzu komponent "Edit". 

Naszym celem bΩdzie zapisanie do rejestru tre╢ci komponentu Edit podczas zamykania programu i odczytanie tej warto╢ci po ponownym uruchomieniu programu. 
Delphi umo┐liwia wykorzystanie rejestru dodaj▒c do listy modu│≤w uses s│owo "Registry". 

2. Wygeneruj procedurΩ "OnDestroy" formy - wywo│ywana ona bΩdzie podczas zamykania programu. Ca│a procedura powinna wygl▒daµ tak:

procedure TForm1.FormDestroy(Sender: TObject);
var
  Reg : TRegistry; // zmienna do rejestru
begin
  Reg := TRegistry.Create; // stworz zmienna
    try // spr≤buj
      Reg.OpenKey( // otw≤rz klucz
      'Software\Programowanie', True);
      Reg.WriteString('NazwaKlucza', Edit1.Text); //zapisz warto╢µ
    finally
      Reg.Free; // zwolnij pamiΩµ
    end;
end;

Ju┐ wyja╢niam o co w│a╢ciwie chodzi. Na samym pocz▒tku nale┐a│o utworzyµ zmienn▒ typu "Registry". P≤╝niej j▒ stworzy│em. NastΩpnie polecenie "Reg.OpenKey" otwiera klucz z rejestru. Warto╢ci domy╢lnie s▒ zapisywane do klucza g│≤wnego HKEY_CURRENT_USER. A wiΩc w nawiasie tej funkcji jako pierwszy parametr podawana jest nazwa klucza, kt≤ry ma zostaµ otwarty. Drugi parametr "m≤wi" czy klucz ma byµ utworzony je┐eli nie istnieje ( True ), czy te┐ nie ( False ). 
Kolejna funkcja do "Reg.WriteString". Zapisuje ona do rejestru warto╢µ typu "String". Pierwszym parametrem tej funkcji jest nazwa klucza do zapisania, a drugim sama warto╢µ typu "String". W tej funkcji do rejestru zapisana zosta│a tre╢µ kontrolki "Edit". Na samym ko±cu nastΩpuje zwolnienie pamiΩci zajΩtej przez zmienn▒ "Reg". Zauwa┐, ┐e u┐y│em tutaj wyj▒tk≤w. Powosuje to bezwzglΩdne zwolnienie pamiΩci bez wzglΩdu na to czy operacja siΩ powiedzie, czy te┐ nie. OK, uruchom teraz program i zamknij go - do rejestru zapisana zosta│a warto╢µ typu "String". Mo┐esz to sprawdziµ. Uruchom rejestr ( Start -> Uruchom -> Regedit ). Warto╢µ nasza zosta│a do rejestru zapisana pod kluczem:
HKEY_CURRENT_USER\Software\Programowanie. Mo┐esz to sprawdziµ.

No dobra, teraz nale┐y zaj▒µ siΩ odczytaniem tej warto╢ci. W tym celu musisz wygenerowaµ procedurΩ "OnCreate", kt≤ra bΩdzie uruchamiania po odpaleniu programu. Oto jej tre╢µ: 

var
  Reg : TRegistry;
  KeyGood : Boolean;
begin
  Reg := TRegistry.Create; // stw≤rz zmienn▒
    try
      KeyGood := Reg.OpenKey(  // otw≤rz klucz
      'Software\Programowanie', False);
       if KeyGood then // Je┐eli klucz istnieje
       begin 
         Edit1.Text := // odczytaj warto╢µ z rejestru
         Reg.ReadString('NazwaKlucza');
      end else Exit; // je┐eli nie istnieje nie r≤b nic 
    finally
      Reg.Free; // zwolnij pamiΩµ
    end;
end;

Ta procedura jest trochΩ d│u┐sza i trudniejsza. Sprawdza bowiem, czy klucz istnieje, czy te┐ nie. Na samym pocz▒tku opr≤cz zmiennej "Reg" zostaje zadeklarowana r≤wnie┐ zmienna "KeyGood" typu Boolean. Gdyby╢my jej nie zastosowali to wyst▒pi│by b│▒d odczytu rejestru. Zmiennej tej zostanie przypisana operacja otwarcia klucza. Je┐eli klucz istnieje to tej zmiennej zostanie przypisana warto╢µ True. W przeciwnym wypadku False. NastΩpna linia sprawdza jaka jest warto╢µ tej zmiennej. Je┐eli jest ona False to nie r≤b nic ( funkcja "Exit" ). 
Je┐eli klucz istnieje to do kontrolki "Edit" zostanie wczytany klucz. Funkcja "ReadString" odczytuje warto╢µ typu "String". Oczywi╢cie mo┐esz tak┐e zapisywaµ warto╢ci typu "Integer" czy "Boolean", a nawet datΩ czy warto╢ci zmienno - przecinkowe. Oto przyk│ady:

// typ Integer
Reg.WriteInteger('WartoscInteger', 12); 
// zapisana liczba 12

// odczyt typu Integer
Edit1.Text := IntToStr(
Reg.ReadString('WartoscInteger')); 

// typ Boolean
Reg.WriteBool('WartoscBoolean', True); 
// zapisana warto╢µ True

// odczytanie warto╢ci Boolean:
Checkbox1.Checked := Reg.ReadBool(
'WartoscBoolean'); 

// typ zmienno - przecinkowy
Reg.WriteCurrency('WartoscCurrency', 3.12); 
// zapisanie 3.12

// odczyt warto╢ci Currency:
Edit2.Text := CurrToStr(
Reg.ReadCurrency('WartoscCurrency')); 

// zapisz aktualn▒ datΩ i czas
Reg.WriteDateTime('DataIczas', Now); 
// zapisz aktualn▒ datΩ i czas

// odczytaj datΩ i czas
Edit3.Text := DateTimeToStr(
Reg.ReadDateTime('DataIczas')); // odczytaj datΩ i czas

Funkcja Opis
CloseKey; Zamyka dotychczasowo otwarty klucz. 
DeleteKey; Usuwa klucz - np: Reg.DeleteKey('Software\Programowanie');
DeleteValue;  Usuwa jedynie warto╢µ klucza: 
Reg.DeleteValue('WartoscBoolean');
KeyExists; Funkcja zwraca warto╢µ True je┐eli podany w nawiasie klucz istnieje. 
MoveKey; Przenosi klucz z jednego miejsca na drugie: 
Reg.MoveKey('Software\Programowanie', 'Software\SFP', False);
Ostarni parametr m≤wi czy stary klucz ma byµ usuniΩty. 
RootKey; Nazwa klucza g│≤wnego:
Reg.RootKey := HKEY_CLASSES_ROOT;
ValueExists; Sprawdza, czy warto╢µ klucza podana w nawiasie istnieje. 
ReadString, WriteString Zapisuje i odczytuje warto╢µ String;
WriteInteger, ReadInteger Zapisuje i odczytuje warto╢µ Integer;
WriteBool,
ReadBool;
Zapisuje i odczytuje warto╢µ typu Boolean
WriteDateTime,
ReadDateTime
Odczytuje i zapisuje datΩ oraz czas.
WriteCurrency,
ReadCurrency
Zapisuje i odczytuje warto╢µ zmienno - przecinkow▒. 
GetKeyNames Zwraca w postaci "TStrings" wszystkie pod-klucze danego klucza. 
GetValueNames Zwraca warto╢ci danego klucza:
Reg.GetValueNames('Software\Programowanie');

               Adam Boduch