Delphi Programlama Dilinde Registry İşlemleri (Parametrelerin Registry'de Saklanması)

Tekrar Merhaba;
Delphi Programlama Dili ve Registry İşlemleri ile ilgili yazılarıma devam ediyorum. Bu dersimizde yine win32 uygulamalarının vazgeçilmez unsurlarından biri olan parametrik bilgilerin Kayıt Defteri'nde saklanması ve tekrar okunması ile ilgili konuya değinmek istiyorum.

Kayıt Defteri (Registry) Sayesinde Her Bir Windows Kullanıcısı İçin Ayrı Parametre Tanımlaması Yapabilirsiniz

Bu dersimizi benzeri diğer derslerden biraz daha farklılaştırmak istiyorum. Registry işlemleri ile ilgili internette bir çok örnek kaynak koda veya makaleye ulaşmanız mümkün, benim vurgulamak istediğim konu Delphi Programlama Dili ile geliştirmiş olduğunuz win32 (Masa Üstü Uygulaması) uygulamanızın parametre tanımlarını tüm Windows kullanıcıları için veya sadece geçerli Windows kullanıcısı için olacak şekilde tanımlayabilmeniz.

HKEY_LOCAL_MACHINE Ana Anahtarında, Hangi Parametreleri Saklamalıyız.

Bu konuyu biraz daha somut örneklerle anlaşılır hale getirelim. Delphi Programalama Dili ile geliştirdiğiniz Stok, İrsaliye, Fatura, Cari Hesap gibi alt modülleri olan ticari bir paket program yazdığınızı varsayalım. Programımızın daha kontrollü hale gelmesini istiyoruz ve sistemde tanımlanan stok kartlarının birim bilgilerinin bir listeden seçilerek girilmesini istiyoruz (Adet, Kg., Lt. vb.) bunun listeden seçilmesini istememizin amacı da kayıt kirliliğinin önüne geçmek; Yani bir stok kartının biriminin (Adet) diğerininkinin (adet), bir diğerininkininde (ADET) olmasını engellemek ve daha sonraki aşamalarda yapacağımız raporlamaların daha tutarlı olmasını sağlamak. Bunun için programımızın parametre ekranında şirket içerisinde, stok kartlarında kullanılan birim tanımlarının veya irsaliyelerde kullanınlan Kdv oranlarının her kullanıcı için geçerli olması gerekmektedir. Yani bu tip parametreler programın kullanıldığı şirketin ortak yapısı içerisinde olan tanımlamalardır ve o bilgisayarı kullanan tüm kullanıcılar için aynı değerleri içermelidir. Bu sebepten dolayıda HKEY_LOCAL_MACHINE ana anahtarında saklanmalıdır. Windows'a yüklenmiş olan programınızı hangi kullanıcı hangi oturumla açarsa açsın aynı birim tanımları veya aynı Kdv oranları ile karşılaşacaktır.

HKEY_CURRENT_USER Ana Anahtarında, Hangi Parametreleri Saklamalıyız.

Bu anahtarda da sadece oturum açan kullanıcıya özel parametre tanımlarını saklayabiliriz. O kullanıcının hangi depolara işlem yapabileceği, kullanmış olduğu irsaliye formlarının seri numara başlangıcı hangi tarih aralığındaki isrsaliye kayıtlarına müdahale edebileceği vb. Örneğin Ahmet isimli kullanıcının sadece 01 - Ham Kumaş Deposuna işlem yapmasını istiyorsak ve 02 - Kimyevi Malzemeler Deposuna müdahale etmesini istemiyor isek bu tanımlamalarıda saklayacağımız anahtar HKEY_CURRENT_USER ana anahtarı olmalıdır. Bu sayede oturumu hangi kullanıcı açarsa sadece o kullanıcıya ait çalışılan depo tanımları gelecektir.

Şimdi Anlattıklarımızı Hayata Geçirelim (Genel Parametreler)

Delphi Programalama Dili uygulamamızı açalım ve öndeğer olarak gelen formumuza bir adet PageControl ekleyelim eklediğimiz PageControl'ede iki adet TabSheet ilave edelim birinci TabSheet'imizin başlığı Genel Program Parametreleri ikinci TabSheet'imizin başlığıda Kullanıcı Bazlı Program Parametreleri olsun. İlk tabımıza iki adet GroupBox bunların içine de 10'ar adet Edit box koyalım ilk grup birim tanımları için ikinci grupta Kdv oranları için bu tab içerisinde yer alan bilgiler genel tanımlar olduğundan HKEY_LOCAL_MACHINE anahtarında saklanacaktır.

Şimdide Kullanıcı Bazlı Parametreleri Hayata Geçirelim

Diğer tabımıza da 4 adet GroupBox ilave edeceğiz. Kullanıcının yetkili olduğu depolar, fatura seri no başlangıcı, irsaliye seri no başlangıcı ve depo dönem başlangıcı için. Bu tab içerisinde yer alan bilgiler kullanıcı bazında değişen tanımlar olduğundan HKEY_CURRENT_USER anahtarında saklanacaktır. Umarım Registry (Windows Kayıt Defteri) ile ilgili çalışma teknikleri konusunda aydınlatıcı bilgiler vermişimdir. Yukarıda anlatmış olduğum konulara ait kaynak kod örneği ve ekran görüntüleri aşağıdaki gibidir.
 

unit frmParams1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Registry;

type
  TfrmParams = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    GroupBox1: TGroupBox;
    edtBrm1: TEdit;
    Label1: TLabel;
    edtBrm2: TEdit;
    Label2: TLabel;
    edtBrm3: TEdit;
    Label3: TLabel;
    edtBrm4: TEdit;
    Label4: TLabel;
    edtBrm5: TEdit;
    Label5: TLabel;
    edtBrm6: TEdit;
    Label6: TLabel;
    edtBrm7: TEdit;
    Label7: TLabel;
    edtBrm8: TEdit;
    Label8: TLabel;
    edtBrm9: TEdit;
    Label9: TLabel;
    edtBrm10: TEdit;
    Label10: TLabel;
    GroupBox2: TGroupBox;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    edtKdv1: TEdit;
    edtKdv2: TEdit;
    edtKdv3: TEdit;
    edtKdv4: TEdit;
    edtKdv5: TEdit;
    edtKdv6: TEdit;
    edtKdv7: TEdit;
    edtKdv8: TEdit;
    edtKdv9: TEdit;
    edtKdv10: TEdit;
    GroupBox3: TGroupBox;
    Label21: TLabel;
    edtDepolar: TEdit;
    GroupBox4: TGroupBox;
    Label22: TLabel;
    edtFSeri: TEdit;
    GroupBox5: TGroupBox;
    Label23: TLabel;
    edtISeri: TEdit;
    GroupBox6: TGroupBox;
    Label24: TLabel;
    dtpDonemBasi: TDateTimePicker;
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure RegistryYaz;
    procedure RegistryOku;
  end;

var
  frmParams: TfrmParams;

implementation
var
Regs    :TRegistry;
{$R *.dfm}

procedure TfrmParams.RegistryYaz;
var
i       :Integer;
op_key  :String;
begin
inherited;
    Regs := TRegistry.Create;
    try
        with Regs do
		begin
			RootKey := HKEY_LOCAL_MACHINE;
			if OpenKey('Software\RealkomMatrix\frmParams',True)Then
				try
                    //Birimler
                    WriteString(edtBrm1.Name,edtBrm1.Text);
                    WriteString(edtBrm2.Name,edtBrm2.Text);
                    WriteString(edtBrm3.Name,edtBrm3.Text);
                    WriteString(edtBrm4.Name,edtBrm4.Text);
                    WriteString(edtBrm5.Name,edtBrm5.Text);
                    WriteString(edtBrm6.Name,edtBrm6.Text);
                    WriteString(edtBrm7.Name,edtBrm7.Text);
                    WriteString(edtBrm8.Name,edtBrm8.Text);
                    WriteString(edtBrm9.Name,edtBrm9.Text);
                    WriteString(edtBrm10.Name,edtBrm10.Text);
                    //KDV Oranları
                    WriteString(edtKdv1.Name,edtKdv1.Text);
                    WriteString(edtKdv2.Name,edtKdv2.Text);
                    WriteString(edtKdv3.Name,edtKdv3.Text);
                    WriteString(edtKdv4.Name,edtKdv4.Text);
                    WriteString(edtKdv5.Name,edtKdv5.Text);
                    WriteString(edtKdv6.Name,edtKdv6.Text);
                    WriteString(edtKdv7.Name,edtKdv7.Text);
                    WriteString(edtKdv8.Name,edtKdv8.Text);
                    WriteString(edtKdv9.Name,edtKdv9.Text);
                    WriteString(edtKdv10.Name,edtKdv10.Text);
				finally
				CloseKey;
			end;
		end;
	finally
	Regs.Free;
	end;

    //Kullanıcı Bazlı Parametreler
    Regs := TRegistry.Create;
    try
        with Regs do
		begin
			RootKey := HKEY_CURRENT_USER;
			if OpenKey('Software\RealkomMatrix\frmParams',True)Then
				try
                    //Birimler
                    WriteString(edtDepolar.Name,edtDepolar.Text);
                    WriteString(edtFSeri.Name,edtFSeri.Text);
                    WriteString(edtISeri.Name,edtISeri.Text);
                    WriteDate(dtpDonemBasi.Name,dtpDonemBasi.Date);
				finally
				CloseKey;
			end;
		end;
	finally
	Regs.Free;
	end;
end;

procedure TfrmParams.RegistryOku;
var
i       :Integer;
op_key  :String;
begin
inherited;
    //Genel Program Parametreleri
	Regs := TRegistry.Create;
	try
		with Regs do
		begin
			RootKey := HKEY_LOCAL_MACHINE;
			if OpenKey('Software\RealkomMatrix\frmParams',True)Then
				try
                    //Birimler
                    edtBrm1.Text := ReadString(edtBrm1.Name);
                    edtBrm2.Text := ReadString(edtBrm2.Name);
                    edtBrm3.Text := ReadString(edtBrm3.Name);
                    edtBrm4.Text := ReadString(edtBrm4.Name);
                    edtBrm5.Text := ReadString(edtBrm5.Name);
                    edtBrm6.Text := ReadString(edtBrm6.Name);
                    edtBrm7.Text := ReadString(edtBrm7.Name);
                    edtBrm8.Text := ReadString(edtBrm8.Name);
                    edtBrm9.Text := ReadString(edtBrm9.Name);
                    edtBrm10.Text := ReadString(edtBrm10.Name);
                    //Kdv Oranları
                    edtKdv1.Text := ReadString(edtKdv1.Name);
                    edtKdv2.Text := ReadString(edtKdv2.Name);
                    edtKdv3.Text := ReadString(edtKdv3.Name);
                    edtKdv4.Text := ReadString(edtKdv4.Name);
                    edtKdv5.Text := ReadString(edtKdv5.Name);
                    edtKdv6.Text := ReadString(edtKdv6.Name);
                    edtKdv7.Text := ReadString(edtKdv7.Name);
                    edtKdv8.Text := ReadString(edtKdv8.Name);
                    edtKdv9.Text := ReadString(edtKdv8.Name);
                    edtKdv10.Text := ReadString(edtKdv10.Name);
				finally
				CloseKey;
			end;
		end;
	finally
	Regs.Free;
	end;

    //Kullanıcı Bazlı Program Parametreleri
	Regs := TRegistry.Create;
	try
		with Regs do
		begin
			RootKey := HKEY_CURRENT_USER;
			if OpenKey('Software\RealkomMatrix\frmParams',True)Then
				try
                    //Parametreler
                    edtDepolar.Text := ReadString(edtDepolar.Name);
                    edtFSeri.Text := ReadString(edtFSeri.Name);
                    edtISeri.Text := ReadString(edtISeri.Name);
                    dtpDonemBasi.Date := ReadDate(dtpDonemBasi.Name);
				finally
				CloseKey;
			end;
		end;
	finally
	Regs.Free;
	end;
end;

procedure TfrmParams.FormShow(Sender: TObject);
begin
RegistryOku;
end;

procedure TfrmParams.FormClose(Sender: TObject; var Action: TCloseAction);
begin
RegistryYaz;
Action := caFree;
end;

end.

 

Genel Parametreler Tab Ekranı 

Genel Parametreler 

Kullanıcı Parametreleri Tab Ekranı

Kullanıcı Parametreleri

 

 

Güncellenmiş Registry Ekran Görüntüsü

Registry (Windows Kayıt Defteri Ekranı)