|
|||||||
|
|
|
|||||
|
|
|||||||
Registry
Registry aslında bir veri tabanı ama
bizim bildimizden farklı . Öncelikle verileri iki dosyaya kaydeder bunlar windows
directory'sinin altındaki system.dat ve user.dat bunların yedek dosyalarıda system.da0
ve user.da0 dır. Windows kendi ve diğer programlarla ilgili bir çok bilgiyi burda
tutar. Mesala yeni bir program eklediğinizde registrye bağzı bilgiler eklenir. (Bunlar
programı yazan kişiye göre değişir) En belirginleri programın nerde olduğu, hangi
dosyaları açtığı, addremove bölümüne ekleme gibi kayıtlardır. Başka bir örnek,
dosyanın açılış formlarının kordinatları genişliği gibi bilgilerde buralara
yazılır. (Ama dediğim gibi programcı başka bir yolda kullanıp özel dosyalarada
kaydedebilir ini files gibi)
Ve sistemle ilgili bir çok bilgi... (registry'i görmek için start\run\regedit yazıp ok
demeniz yeterli)
Peki bu registry'i delphi de kullana bilirmiyiz ? Tabiki kullana biliriz ama şunu
söylemeliyimki (uzak bir ihtimal ama) büyük yanlışlıklarda sistemi göçerte
bilirsiniz. Bunu engellemek için key olarak bilinen kutulara (Dikkat string veya integer
değerlerine değil bunları kapsayan kutulara) türkçe karakter kullanılmamalı ve
bilirbilmez her kutuyu silmemeliyiz. Bunlara dikkat edersek delphide rahatlıkla registry
kullanabiliriz. Bunu örnekle açıklamak istedim ve aşağıdaki programı yazdım.
Şimdi programı inceleyelim ve registryi öğrenelim.
PROJECT 1
Öncelikle programda üç tane buton ve bir tanede yazı kutusu yerleştirdim.
Butonlar ekle,isimdeğiştir ve sil komutları için, yazı kutusu ise verileri görmek
için kullanılacak.
Formun uses bölümüne registry yazısını ekledim.
var
Form1: TForm1;
implementation
{$R *.DFM}
var
dosya:TRegistry;
ve yukardaki gibi registry sınıfına ait bir değişken tanımladım.Bunlardan sonra
formun create olayına aşağıdaki kodu yazdım.
dosya:=Tregistry.Create;
dosya.RootKey:=HKEY_CURRENT_USER;
dosya.CreateKey('dnm1');
dosya.OpenKey('dnm1',true);
dosya.OpenKey('deneme1',true);
dosya.WriteString('url1','emre');
dosya:=Tregistry.Create; bu komutla registryi yarattık. Bundan sonra işlemleri asıl
yapacığımız bölümü seçiyoruz. Bunu rootkey komutu ile yapıyoruz. (Bunları
windows explorerdeki klasör dosya ilişkisi gibi düşüne bilirsiniz. Buna göre biz
şimdi sürücüyü seçtik) Daha sonra bu ana bölümde bir tane kutu yaratıyoruz ve
bunuda dosya.CreateKey('dnm1'); şeklinde yapıyoruz. Burda kutunun adını dnm1 yapmış
bulunmaktayız. Daha sonra bu kutuyu açıyoruz. dosya.OpenKey('dnm1',true); Burda birinci
parametre ismi ikinci parametresi ise boolean tipindedir. True ise bu kutuyu bulamadığı
zaman bu isimde yeni bir kutu yaratır. Bu kutunun altınada deneme1 olarak bir kutu
yaratıyoruz. bu kez create komutunu kullanmadık çünkü openkey'de ikinci parametre
true yani böyle bir kutu yoksa bile yaratılacaktır. Son olarakta bu deneme1 kutusunun
içine url1 diye bir string yaratıyoruz ve bunun değerinine emre olarak atıyoruz.
(Aslında ismimi kullanmazdım ama bukez böyle istedim kusura bakmayın)
dosya.WriteString('url1','emre'); Burdaki ilk parametre stringin adını ikincisi ise bu
stringe verilecek değeri veriyoruz. (Bunuda klasördeki dosya gibi düşünmek mümkün)
Bunları yaptıktan sonra oku adlı butona aşağıdaki verileri yazıyoruz.
edit1.text:=dosya.ReadString('url1');
Burda edit1'in değerini url1'deki değere eşitliyor.
İsim değiştir butonuna aşağıdaki kodu yazdığımızda url1 adlı değişkenin
ismini web olarak değiştirmiş oluruz.
dosya.RenameValue('url1','web');
Eğer url1 değişkinenine artık ihtiyacımız kalmamışsa bunu silmek içinde
aşağıdaki kodu yazmamız yeterli.
dosya.DeleteValue('Url1');
Burdaki komutlarla registry basitce kullanabiliriz.
Şimdi daha kompleks bir program yazalım. Program her açılışında registrye bir sayı
ekliyecek ve programı kaç kez açmış olduğumuzu anlıyacağız. Bu kadarlada
kalmayacak her sayı için bir string yaratacak bu stringe 1 ile 100 arası bir değer
atıyacak ve önceki atanan değerleride listbox componentinde listeleyecek.
PROJECT 2
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,registry,
StdCtrls, ExtCtrls;
var
Form1: TForm1;
implementation
var
dosya:TRegistry;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
t,i:integer; // iki tane sayısal değişken tanımlıyoruz.
begin
Randomize; //rastgele sayılar kullancağımızı belirtiyoruz
i:=1;
dosya:=Tregistry.Create; //registry'i yaratıyoruz
dosya.RootKey:=HKEY_CURRENT_USER; //kullanacağımız ana bölümü belirtiyoruz
dosya.OpenKey('pr1',true); //pr1 diye bir kutu açıyoruz
try //hata oluşursa diye ayrıcalıklı durum oluşturuyoruz
i:=dosya.ReadInteger('say'); //i değişkenini say adlı değişkene eşitliyoruz
dosya.WriteInteger('say',i+1); //i'ye 1 ekleyip say değişkenine eşitliyoruz.
//Böylece programı kaç kez açtığımızı anlıyoruz
dosya.WriteString('say'+inttostr(i),inttostr(random(100)));
//yeni bir string oluşturuyoruz bunun adınıda say+i yani i burda 8 ise (program 8 kez
açılmışsa) değişken say8 oluyor böylece her seferinde yeni bir değişken oluşuyor
label2.Caption:=inttostr(i); //label2'yi i'ye eşitliyoruz
for t:=1 to i do begin // 0 dan i ye kadar bir döngü yapıyoruz
lb1.Items.Insert(t,'say'+inttostr(t)+' --> '+dosya.ReadString('say'+inttostr(t)));
//bu döngüde açılmış tüm say stringleri değerleriyle beraber sıralıyoruz
end;
except //eğer hata oluşmuşsa
//hata oluşmasının tek nedeni say diye bir değişkenin olmamasıdır
dosya.WriteInteger('say',2); //say diye bir değişken yaratıp buna 2 değerini atıyoruz
dosya.WriteString('say1',inttostr(random(100))); //ilk açılış için bir değer
yazıyoruz
dosya.WriteString('say2',inttostr(random(100))); //ikinci açılış için bir değer
atıyoruz
//bu değer atama işleminin nedeni programın ilk açılışında hata oluşmuşsa bu
değerler boş kalır ve sayıları listelerken hata oluşur bunu önlemek için
label2.Caption:=inttostr(i);
end;
end;