Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web

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;