A Windows egyik jelentős újítása a registry volt, ami lehetővé tette, hogy az alkalmazások egy központi adatbázisban tárolhassák beállításaikat. Ebben a registry-ben található meg a Windows legtöbb beállítása is, ezért a registry remek eszköz lehet egy programozó kezében.
A registry fastruktúra alapján épül fel, mely ún. kulcsokból áll. Egy kulcsban lehetnek további kulcsok, vagy pedig azonosítók. Az azonosítók egy névből és egy értékből állnak, ezek tárolják az információkat. A rendszerleíró adatbázist a regedit.exe programmal nézhetjük meg, vagy módosíthatjuk.
Ahhoz hogy a Delphi-ben a regisztrációs adatbázist használjuk a registry unitra van szükség (uses registry;).
A registry-t az alábbi utasítással tölthetjük be a memóriába, majd dolgunk végeztével menthetjük el:
Var
Reg: TRegistry;
Begin
Reg:=TRegistry.create;
//Utasítások
Reg.free;
End;
Miután megnyitottuk, ki kell választanunk a kulcsot, amit olvasni vagy írni akarunk:
Reg.Rootkey:= HKEY_CURRENT_USER;
Reg.Openkey(’kulcs neve’,CanCreate:Boolean);
A Rootkey bármelyik lehet az 5 közül, de legtöbbször a HKEY_CURRENT_USER-re van szükség.
A kulcs neve bármi
lehet, bár van néhány speciális kulcs. Ilyen például a
\Software\Microsoft\Windows\CurrentVersion\Run
\Software\Microsoft\Windows\CurrentVersion\RunOnce
Mindkettő a HKEY_CURRENT_USER alatt van. Ezekben tárolódnak azok a programok melyek a Windows indulásakor betöltődnek. Az azonosítók neve bármi lehet, értékük pedig a programok elérési útja (pl.: ’C:\program.exe’). A különbség a két kulcs között csak annyi, hogy a RunOnce-ben lévő programok csak a következő indításkor indulnak el, utána az azonosító törlődik, a Run-ban lévők pedig minden indításkor elindulnak.
Az alkalmazások a saját adataikat általában a HKEY_CURRENT_USER\software\alkalmazás neve kulcsban tárolják.
Ha az Openkey második paraméterének értéke True, akkor, ha nem létezik a kulcs, a program létrehozza, ezenkívül a Reg.CreateKey(’név’) utasítással hozhatunk létre új kulcsot.
Az Openkey helyett az OpenKeyReadOnly(’név’) utasítást is használhatjuk, ha nem akarjuk a kulcsot írni.
Az aktuális kulcsot a Reg.CurrentKey HKEY típusú tulajdonság tartalmazza.
Kulcsot a Reg.DeleteKey(’név’) utasítással törölhetünk, mely True értékkel tér vissza, ha a törlés sikeres volt.
Most már tudjuk kezelni a kulcsokat, de a lényegről, az azonosítókról még nem sok szó esett.
A Delphi-ben (magában a registry-ben nem, de ezzel nekünk nem kell foglalkoznunk) egy azonosító értékének a típusa lehet: BinaryData (bináris adat), Bool (boolean), Currency (pénzegység), Date (dátum), DateTime (dátum idővel), Float (lebegőpontos szám), Integer, String, Time (idő).
Ahhoz, hogy egy azonosítót olvassunk vagy írjunk, ismernünk kell az értékének a típusát.
Minden típushoz külön
olvasási függvény tartozik pl.: ReadBool(’azonosító neve’),
ReadInteger(’azonosító neve’).
Ezek az azonosító értékével térnek vissza melynek típusa minden esetben
megegyezik az érték típusával. Pl.:
Var
X: integer;
Begin
X:=readinteger(’szam’);
End;
Ha az olvasni kívánt azonosító nem létezik, vagy a típus nem megfelelő akkor kivétel keletkezik.
Az olvasáshoz hasonlóan az íráshoz is típusonként különböző az utasítás, de a felépítésük azonos. Pl.:
WriteBool(’azonosító neve’,érték);
WriteInteger(’azonosító neve’,érték);
Ha az azonosító létezik, akkor az értéke felülíródik, ha nem, akkor az azonosító létrejön.
Azonosítót a Reg.deletevalue(’név’)-el törölhetünk.
Az itt leírtak elegendőek a registry alapszintű kezeléséhez, aki ennyivel nem elégedne meg, annak ajánlom a Delphi súgóját.
Amennyiben programjainkban szeretnénk adatokat tárolni, azokat lehetőleg NE a registry-ben tegyük, hanem inkább INI fájlokban. A registry mérete frissen telepített rendszernél is óriási, programok telepítése közben pedig ez a méret egyre csak nő, ami természetesen lassítja a windows működését, hiszen nem mindegy, hogy mekkora állományban kell egy adatot megkeresni! Registry-ben csak olyan adatot tároljunk, amit nagyon ott kell, a többit tegyük INI fájlba. Ezzel azt is elérjük, hogy a programhoz tartozó beállításainkat könnyen átrakhatjuk egy másik gépre!