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'); |