Delphi - TStrings objektum tartalmának tárolása a Registry-ben

forráskód letöltése
A Registry adatbázisban többféle típusú adatot tudunk tárolni. Ebben a példában egy olyan megoldást mutatunk be, amellyel egy TStrings objektumban tárolt több soros szöveg menthető el a registry-be, illetve onnan vissza is tölthető. A szöveget persze eltárolhatnánk egyetlen sztringként is, de bizonyos esetekben ez nem jelentene jó megoldást, ezért egy másik módszert választunk.
Mivel a tárolás általában kétirányú (mentés és betöltés), így két függvényre lesz szükségünk, amelyeket egy külön unit-ban hozunk létre.
Mindkét függvény azonos paraméterekkel rendelkezik, és a visszatérési érték is mindkét esetben egy logikai érték, ami azt mondja meg, hogy a művelet sikeres volt vagy sem.
function SaveStringsToRegistry(RootKey: DWORD; Key, Name: string; Strings: TStrings): boolean;
function LoadStringsFromRegistry(RootKey: DWORD; Key, Name: string; Strings: TStrings): boolean;
A függvények paraméterei a következők:
RootKey: DWORD
Ebben a paraméterben kell megadnunk a Registry kulcs gyökerét, amelyeket az alábbi konstansokkal határozhatunk meg:
  • HKEY_CLASSES_ROOT
  • HKEY_CURRENT_USER
  • HKEY_LOCAL_MACHINE
  • HKEY_USERS
  • HKEY_PERFORMANCE_DATA
  • HKEY_CURRENT_CONFIG
  • HKEY_DYN_DATA
Key: string
Ebben a paraméterben adhatjuk meg a Registry kulcs nevét, amely alá az adatokat menteni szeretnénk (pl. „Software\Animare Software\Texts”).
Name: string
Ebben a paraméterben egy nevet adhatunk meg, amellyel az adott szöveget tárolni szeretnénk. Ennek a névnek egyedinek kell lennie a RootKey és a Key paraméterek által meghatározott Registry kulcs alatt, ellenkező esetben az adott kulcs és név alatt lévő összes előzőleg tárolt adat törölve lesz, illetve felül lesz írva. A függvények a RootKey, Key és Name paraméterekből állítják össze azt a Registry kulcsot, ami alá a szöveg sorait tárolni kell, illetve ahonnan azok beolvasásra kerülnek. Ha például a RootKey értéke HKEY_LOCAL_MACHINE, a Key értéke „Software\Animare Software\Texts” a name paraméter értéke pedig „Test”, akkor az alábbi Registry kulcs alá lesznek elmentve a szöveg sorai:
HKEY_LOCAL_MACHINE\ Software\Animare Software\Texts\Test
Strings: TStrings
Ebben a paraméterben kell megadni azt a TStrings (vagy ebből származtatott, pl. TStringList) objektumot, amelynek tartalmát a Registry-ben el szeretnénk tárolni, vagy amelybe a Registry-ben tárolt szöveget be akarjuk olvasni.
A mentés a következőképpen történik meg (SaveStringsToRegistry függvény). A kapott paraméterekből összeállítjuk a Registry kulcsot, ami alá a szöveget menteni kell. Ezután ellenőrizzük, hogy ez a kulcs már létezik-e, és ha igen, akkor töröljük. A törlés után megpróbáljuk a kulcsot létrehozni, és ha sikerült, akkor alapértelmezett értékként beírjuk a szöveg sorainak számát (Strings objektum Count property-jének értéke). Az alapértelmezett az az érték, aminek nincs külön megnevezése, minden kulcsban csak egy ilyen lehet. Egy ciklusban beolvassuk a szöveg sorait, és egyenként eltároljuk a Registry-be úgy, hogy minden sor neve a sor sorszáma lesz.
A visszatöltésnél (LoadStringsFromRegistry) szintén összeállítjuk a paraméterekből a Registry kulcsot, majd ha sikerült a kulcs megnyitása, akkor beolvassuk abból az alapértelmezett értéket. Ezután egy ciklust indítunk, amelyben egymás után beolvassuk a ciklusváltozónak megfelelő sorszámú sort. Itt egy ellenőrzést is végzünk, hogy az adott sor létezik-e, mert a Registry-ből akár törölhették is azokat.