Rejestr Windows kryje wiele ciekawych informacji, których umiejętne wykorzystanie może zwiększyć atrakcyjność tworzonej aplikacji. W tym artykule pokażemy, jak obsługiwać rejestr z poziomu Delphi oraz gdzie znaleźć interesujące informacje.
Rejestr Windows kryje wiele ciekawych informacji, których umiejętne wykorzystanie może zwiększyć atrakcyjność tworzonej aplikacji. W tym artykule pokażemy, jak obsługiwać rejestr z poziomu Delphi oraz gdzie znaleźć interesujące informacje.
Rejestr to baza informacji o komputerze, systemie, zainstalowanych programach, preferencjach użytkownika itp. Składa się z kilku kluczy głównych (rootkey), w których znajdują się kolejne klucze i podklucze, tworzące drzewiastą strukturę. W kluczach mogą się znajdować wartości następujących typów: tekstowe, binarne oraz DWORD. Rejestr przechowywany jest w kilku plikach z rozszerzeniem .dat w katalogu C:\Windows (classes.dat, user.dat, system.dat). Do przeglądania oraz dokonywania zmian w rejestrze służy program regedit.exe, uruchamiany za pomocą opcji Start | Uruchom.
Aby móc korzystać z rejestru w Delphi, trzeba najpierw rozszerzyć listę używanych modułów, zadeklarowaną za pomocą słowa kluczowego uses, o moduł Registry. Delphi operuje na rejestrze, wykorzystując klasę TRegistry. Zawiera ona bardzo wiele metod, z których najciekawsze zostały przedstawione na końcu artykułu. Natomiast ogólną zasadę pracy z rejestrem pokazuje pierwszy przykład, który wyświetla okno z kolorem tła pulpitu w postaci ciągu znaków RR
GG BB.
var
Registry: TRegistry;
begin
Registry := TRegistry.Create;
try
Registry.RootKey:=HKEY_CURRENT_USER;
Registry.OpenKey('Control Panel\Colors',False);
showmessage(Registry.ReadString('Background'));
finally
Registry.Free;
end;
end;

Interfejs programu w fazie projektowania.Na początku programu tworzymy obiekt klasy TRegistry, pamiętając jednocześnie o konieczności usunięcia go z pamięci po wykonaniu żądanych operacji, co zapewnia konstrukcja try...finally. Aby móc zapisywać i odczytywać dane z rejestru, należy najpierw wybrać jeden z sześciu głównych kluczy (HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_CONFIG lub HKEY_DYN_DATA), a następnie go otworzyć. Dopiero wtedy można używać metod o nazwach ReadX i WriteX, gdzie X oznacza typ danych, np. Float, Integer, DateTime, String). Funkcje odczytujące przyjmują jeden parametr typu String, zawierający nazwę pola i zwracają wartość odpowiedniego typu. Funkcje zapisujące pobierają, oczywiście, dwa parametry (nazwę pola i wartość). Na uwagę zasługują również metody operujące na kluczach (ze słowem Key w nazwie) oraz metody pomagające w tworzeniu programów do wyświetlania zawartości rejestru, np. metoda GetKeyNames, która pobiera nazwy podkluczy obecnie wybranego klucza.
Aby zademonstrować część możliwości Delphi w zakresie obsługi rejestru, napiszemy prosty edytor tekstu, który poza możliwością zapisywania i wczytywania plików tekstowych, zostanie wyposażony w następujące udogodnienia:
- Kolor tła komponentów będzie identyczny z kolorem tła pulpitu.
- Edytor będzie miał własny typ plików (własne rozszerzenie).
- Rozszerzenie nazwy będzie skojarzone z naszym edytorem, więc próba otwarcia pliku za pomocą Eksploratora Windows spowoduje uruchomienie edytora i wczytanie pliku.
- Program będzie się uruchamiał podczas startu systemu.
Interfejs graficzny programu jest bardzo prosty. Został zbudowany z komponentu TMemo, obejmującego prawie cały obszar formularza (właściwość Align ustawiona na alClient), z wyjątkiem jego dolnej części - tam został umieszczony TToolbar (Align równe alBottom). TToolbar pełni funkcję kontenera, w którym można umieszczać inne komponenty (w naszym wypadku zwykłe komponenty TLabel, które wywołują okna dialogowe do zapisu i odczytu plików tekstowych). Umiejscowienie formularza w prawym górnym rogu uzyskamy dzięki jednemu wierszowi kodu w procedurze obsługi zdarzenia onCreate formularza:
left:=screen.width-width;
Do zapisywania i wczytywania plików użyjemy standardowych metod komponentu TMemo:
procedure TForm1.Label1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
procedure TForm1.Label2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;
procedure TForm1.FormCreate(Sender: TObject);
var reg:TRegistry;
kolor:tcolor;
r,g,b:byte;
kolortla:string;
begin
// forma w prawym gornym rogu
left:=screen.width-width;
top:=0;
reg:=TRegistry.Create;
try
// czesc I: kolory
reg.RootKey:=HKEY_CURRENT_USER;
// otwieramy klucz
reg.OpenKey('Control Panel\Colors',false);
// odczytujemy kolor tla
kolortla:=reg.ReadString('Background');
reg.CloseKey;
pobierzkolor(kolortla,r,g,b);
// ustawianie kolorow: formularza
Color:=rgb(r,g,b);
// ustawianie tła pola do edycji tekstu
memo1.color:=rgb(r,g,b);
// ustawianie koloru dolnego paska
ToolBar1.Color:=rgb(r,g,b);
// koloru czcionki TMemo
Memo1.Font.Color:= rgb(odwrockolor(r), odwrockolor(g), odwrockolor(b));
...

Uruchomiony program dopasowany do tła pulpitu.Najbardziej rozbudowaną procedurę ma zdarzenie onCreate formularza. W pierwszej części sekcji try...finally z rejestru najpierw zostaje pobrany kolor tła pulpitu (po otwarciu klucza odczytujemy wartość Background). Następnie za pomocą dodatkowej procedury dzielimy łańcuch znakowy zawierający trzy składowe koloru (w kolejności RGB) na trzy oddzielne wartości typu byte, z których następnie konstruujemy kolor typu TColor. Uzyskaną w ten sposób wartość przypisujemy do właściwości Color komponentów TForm1, TMemo i TToolBar.
...
// czesc II: ustawianie przelacznika
// opcji uruchamiajprzystarcie
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);
if reg.readstring('Tekst_Reader') = ParamStr(0) then
Uruchamiajprzystarcie1.Checked:=true
else
Uruchamiajprzystarcie1.Checked:=false;
reg.CloseKey;
...