INC Dosyaları nedir.
INC ( INCLUDE) Dosyaları rutin kullanılan ve hiç değişmeyen kodları yazıp projenin herhangi bir yerine dahil edebileceğiniz
kod dosyalarıdır.
Bu açıklamaya göre Rutin kullanılan kodları zaten metod olarak yazıp istediğimiz yerden çağırabiliyorken neden bu dosyaya ihtiyaç duyalım denilebilir. Ancak burada include edilen sadece metot değildir. Kod bloğunda yazan herhangi birşey olabilir.
INC Dosyasını Adım Adım Örneklendirelim.
Başlangıç
Yeni bir proje olluşturup 1 Adet Edit ve 2 adet Button yerleştirelim.
Butonların on Click olayına aşağıdaki aşağıdaki gibi kodları yazalım.
İşimiz bittiğinde şöyle bir unit olması gerekiyor.
Kod: Tümünü seç
unit fmain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := 'Merhaba';
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s : String;
begin
s:=Edit1.Text;
Showmessage(S);
end;
end.
Edit1.inc
Kod: Tümünü seç
Edit1.Text := 'Merhaba';
Kod: Tümünü seç
{$I Edit1.inc}
Kod: Tümünü seç
unit fmain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
{$I Edit1.inc}
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s : String;
begin
s:=Edit1.Text;
Showmessage(S);
end;
end.
Şimdi daha da ileri gidip Button2click'deki s değişkenine atadığımız değeri inc dosyasından yazdıralım.
bunun için s.inc diye bir dosya oluşturup showmessage(s) deyimini bu dosyaya kaydedip projemizden silelim.
s.inc
Kod: Tümünü seç
Showmessage(S);
Kod: Tümünü seç
unit fmain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
{$I Edit1.inc}
end;
procedure TForm1.Button2Click(Sender: TObject);
var
s : String;
begin
s:=Edit1.Text;
{$I s.inc}
end;
end.
yani s.inc dosyasında ShowMessage(s) yazıyor. ne uses var ne procedure var
bu s nerden geldi nereye gidiyor soran eden yok. üstelik program hala çalışıyor
şimdi biraz daha cüreetkar olalım
s.inc dosyası
Kod: Tümünü seç
procedure TForm1.Button2Click(Sender: TObject);
var
s : String;
begin
s:=Edit1.Text;
Showmessage(S);
end;
Kod: Tümünü seç
unit fmain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
{$I Edit1.inc}
end;
{$I S.inc}
end.
çalışıyor
Peki nasıl çalışıyor?
inc dosyasını programın herhangi bir yerinde $I ile çağırdığınızda program projeyi derlerken çağrılan dosyayı
çağrıldığı satırdan itibaren derlemeye dahil edip $I satırı bittikten sonra kalan kodu tekrar derlemeye dahil ediyor.
Yani $i nereye yazılırsa o kaynak koda ekleniyor.
E madem koda derleme esnasında ekleniyor o zaman bellek ve dosya boyutu açısıından bize getirisi yok varsın unitim 2 satır fazla olsun incsiz olsun.
Kod: Tümünü seç
El-Cevap.
Ve bu formlarınızın hepsinde ya da büyük bir kısmında rutin olarak kullandığınız bir metod var.
Örneğin form key press bu örneğimiz için oldukça belirgin bir emsal.
Kayıt işlemlerinin yapıldığı tüm foormlarda key up ya da down işlemine şöyle bir kod yazdık diyelim.
Kod: Tümünü seç
if shift=[] then
begin
case key of
vk_f1:btnyeni.Click;
vk_f4:btnduzenle.Click; // Düzenle
vk_f2:btnkaydet.Click; // Kaydet
vk_f6:btnvazgec.Click; // Vazgeç
vk_f3:btnsil.Click; // Sil
vk_escape:btnKapatx.Click; // Kapat
vk_f11:btnlistele.Click;
end;
end;
bu 15 kere aynı kodun yazılmış olması demek.
peki dediniz ki ben bu formlarda page up page down ile kayıtlar arası önceki kayıt sonraki kayıt, ctrl+page up page down ile de ilk kayıt son kayıt şekline getirmek istiyorum.
haliyle şöyle bir kod yazacaksınız
Kod: Tümünü seç
if shift=[] then
begin
case key of
vk_f1:btnyeni.Click;
vk_f4:btnduzenle.Click; // Düzenle
vk_f2:btnkaydet.Click; // Kaydet
vk_f6:btnvazgec.Click; // Vazgeç
vk_f3:btnsil.Click; // Sil
vk_escape:btnKapatx.Click; // Kapat
vk_Prior : btnonceki.Click;
vk_next:btnsonraki.Click;
vk_f11:btnlistele.Click;
end;
end
else
if (shift=[ssctrl]) then
begin
if key=vk_prior then btnilk.Click;
if key=vk_next then btnson.Click;
end;
onun yerine bu kodu KeyUp.inc diye bir dosyaya kaydedip tüm formlarda bu kısmı
Kod: Tümünü seç
{$I KeyUp.inc}
kaldı ki.
daha da ötesi btnYeni,btnSil ... metotları da standart ise onu da KayitIslemleri.inc dosyasına atıp çağırabilirdik mesela.
Böylece hem gözümüzün önünden artık daha da kullanmayacağımız bu kodlar silinmiş olur hem de değişiklikler daha da rahat olur.
İyi çalışmalar.
Not : Benim 7000 satırlık unit artık 2000 satır