Delphi i Rejestr

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.

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.

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;

...


Zobacz również