Download as pdf or txt
Download as pdf or txt
You are on page 1of 12

Unit Penceresi:

Bu bölümde kod penceresine (Bu pencere Delphi de Unit olarak


adlandrlmaktadr.) ait tüm özellikleri sizlere izah edece im. Projenize eklemi
oldu unuz her formun kodlarnn yazld  bir Unit i mevcuttur (Ama tersi
geçerli de ildir. Yani her Unit in formu olmak zorunda de ildir. Formu olmayan
Unit ler de bulunmaktadr). A a daki admlar izleyerek formunuza ait Unit
penceresine ula abilirsiniz. “View->Units” admlarndan sonra kar nza Unit
inize ait pencere gelecektir. E er hiç bir kod eklemediyseniz görüntüsü
a a daki ekilde olacaktr.

Pencereye dikkat ettiyseniz tüm önemli kalplar satr numaralaryla (Bu


numaralandrmay biz yaptk) adlandrlm haldedir. Bu numaralar kullanarak
tüm satrlarn ne i e yarad n, nasl de i iklik yaplabilece ini, ekleme silme
i lemlerinin nasl yaplaca n anlataca m. imdi birinci satrdan itibaren
inceleme i lemimize ba layalm.

191
I.SATIR:

Unit Unit1;

Bu satr Unit inizin ismidir. Her formun bir Unit i oldu u için, adlandrmada
ayn sralamayla Delphi tarafndan otomatik olarak yaplmaktadr. Yani ilk
formun Unit ismi “Unit1”, ikinci formun Unit ismi “Unit2” vs. Delphi Unit
isimlerini de i tirmeye u a amada imkan vermemektedir. E er ismini
de i tirirseniz hatayla kar la rsnz .

II.SATIR:

nterface

Delphi Unit içerisindeki bölümleri programclara blok blok göstermek için


“interface” yaps geli tirmi tir. Bu sayede Unit inizde yapm oldu unuz genel,
yerel tanmlamalarnz kolayca izleyebilirsiniz. ayet bu satr silerseniz
uygulamanz çal mayacaktr.

III.SATIR

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

Programnzda kulland nz tüm methodlar bu satr sayesinde


kullanlabilmektedir. Delphi nesneden nesne yaratma (Object Oriented)
mant n destekledi i için, kulland nz methodlar burada belirtilen
kütüphaneler içerisinde tanmldrlar. Dolaysyla kod bloklarnzda rahatlkla
kullanabilmektesiniz. Tek bir “uses” bildirisiyle araya “,” koyarak istedi iniz
kadar kütüphaneyi projenize ekleyebilirsiniz. Hiç bir methodu kullanlmayacak
olan kütüphaneleri projeye eklemek hem karma a yaratacak, hem de
performansnz dü ürecektir. Bu amaçla Delphi sadece en çok kullanaca nz
kütüphaneleri varsaylan olarak eklemi tir. Di er kütüphanelerden
faydalanmanz gerekirse, sizin manual olarak eklemeniz gerekmektedir. “uses”
bildirisiyle Linux veya Windows i letim sistemlerine ait kütüphaneleri ekleyip
çkarabilirsiniz. Bu olay anlamanz için iki tane örnek yapaca m. Bunlardan
birincisi, “ShowMessage” methodunun tanml oldu u class  (Dialogs) projeden
silerek kullanmay deneyece im. kincisinde ise yukardaki class larn içerisinde
tanm olmayan bir methodun class n ekleyerek nasl kullanabilece inizi
gösterece im.

192
UYGULAMA 1:

Bu örnekte “uses” satrnda varsaylan olarak eklenmi halde bulunan “Dialogs”


kütüphanesini silerek a a daki kodu projenize ekleyin.

uses
Windows, Messages, SysUtils, Variants, Classes,Graphics, Controls, Forms;
//Dialogs’u sildim

imdi formunuzun üzerine yerle tirece iniz button kontrolünün “OnClick”


yordamna a a daki kodu ekleyiniz.

imdi de programnz çal trn. Daha önce çok kolay bir ekilde çal trd nz
uygulamanz hata mesaj verecektir. Sebebi çok basit “ShowMessage” methodu
“Dialogs” class  içerisinde tanmldr. Bu class  projeden sildi iniz için artk
uygulamanz bu methodu bulamayacak, tanmayacak ve çal tramayacaktr.

Uyar mesajna dikkat ederseniz; ShowMessage n declare edilmedi ini, bu


yüzden de uygulamanz çal tramayaca n bildirmektedir.

193
Önemli Uyar: Bir methodun tanml oldu u kütüphanesine ula mak için, Mous
ile o komutun üzerine gidin “ctrl” tu u baslyken (mousun ekli de i ecektir)
mousun sol tu uyla üzerine tklayn, sizi tanmland  kütüphaneye
yönlendirecektir.

UYGULAMA 2:

Bu bölümde normal artlarda kullanamayaca mz (kütüphanesi ekli olmad 


için) bir methodu, gerekli olan class  “uses” satrna ekleyerek nasl
kullanabilece inizi gösterece im.

lk olarak formunuzun üzerine iki adet button kontrolü yerle tirerek, a a daki
tasarm olu turunuz.

imdi de “uses” satrna “MMSystem” class n ekleyin. Bu class  eklemezseniz


yukardaki hata mesajyla kar la rsnz.

uses
Windows, Messages, SysUtils, Variants, Classes,Graphics, Controls, Forms,
StdCtrls,Dialogs,MMSystem;//Eklemeyi unutmayn

Cd Rom kapa n açp kapamak için “mciSendString” methodu


kullanlmaktadr. “MMSystem” kütüphanesini eklemeden a a daki kodlar
çal trrsanz, Delphi sizi bu fonksiyonlar tanmad na dair hata mesajyla
uyaracaktr. Bu yüzden ilk yapaca nz i lem “mciSendString” fonksiyonunun
içerisinde tanumland  kütüphaneyi projeye dahil etmek olmaldr.

Eklemi oldu unuz button kontrollerinin “OnClick” yordamlarna a a daki


kodlar yazp uygulamanz çal trabilirsiniz. Program çal tktan sonra ilk
buttona tklarsanz Cd Rom kapa  açlacak, ayet ikinci buttona tklarsanz bu
durumda da Cd Rom kapa nz kapanacaktr.

Unit inize a a daki kod satrlarn ekleyin.

194
Sanyorum olayn mant n anladnz. Bir methodu kullanmak için öncelikle
onun tanmlanm oldu u kütüphaneden müsaade almalsnz (Onu projenize
dahil ederek). Aksi takdirde methodu proje içerisinde kullanamazsnz.

IV.SATIR:

type
TForm1 = class(TForm)

Bu satr Wimdows Form uygulamalarnn temelini olu turmaktadr. Object


Oriented mant  kullanlarak class tan yavru üye türetilmektedir. Yaratlan
yavru üyenin ismi “TForm1”, yaratld  ana class ise “TForm” (Windows
formlarna ait tüm özellik ve methodlar “TForm” class nda tanmlanm tr)
adn ta maktadr. Yavru üye kaltmsal olarak yaratld  class a ait tüm
özellikleri ve methodlar üzerine alacaktr.

Bir sonraki bölümde class yaps detayl olarak incelenecektir. Bu yüzden bu


satra ait izahat ve örnekleri o ksmda bulabilirsiniz.

Görsel dillerde kod yazma i lemi çok basit oldu u için, formunuzun üzerine
sürükledi iniz kontrollerle örnekler geli tirebildi inizi, bir çok kodu ezbere
yazd nz maalesef biliyorum. Class ksmnda yazlan kod satrlarndan
ço unun ne içerdi i hakknda bilgisi olmayan programclarn oldu unu hatta

195
bazlarnn i i abartp kitap bile yazdklarn maalesef görüyoruz (Hatta
kapaklarnda 4. veya 5. bask bile yazan var). Bu kitab hazrlamamdaki asl
amaç, Fakülte içerisinde verdi im derslere kaynak bulamadklar için bu
kalitesiz kitaplar koltu unun altna alp gelen (Ö rencilerimi bu hususta
suçlamyorum) ö rencilerime  k tutabilmek maksatl olmu tur
(Referanslarmz hakknda ufak bir fikir edinebilmeniz için kitabun açl
sayfalarna baknz).

imdi tekrar konumuza dönerek Unit satrlarmz izah etmeye devam edelim.

V.SATIR:

private
{ Private declarations }

Sadece o Unit tarafndan (Buradaki Unit Forma ait oldu u için sadece form
kontrolleri tarafndan da denilebilir. Genel anlamda hangi class a aitse)
kullanlabilecek de i ken ve methodlarn declare edilebilece i bloktur. Burada
tanmlad nz bir de i keni di er formlardan (veya Unit lerden) ça ramazsnz.
Private blo u içerisinde yapm oldu unuz tanmlamalar “Implementation” dan
sonra yaplanlardan farkldr (class ksmnda inceleyebilirsiniz). Burada
tanmlayaca nz bir de i keni proje içerisinde nasl kullanabilece inizi
göstermek istiyorum.

type
TForm2 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
deger:Integer; //Buradaki de i ken tanmlamasnda var kullanlmaz

Tanmlam oldu unuz “deger” isimli de i ken bütün alt yordamlar tarafndan
kullanlabilecektir. Fakat ba ka bir Unit içerisinden bu de eri kullanabilmek
mümkün de ildir.

Bu tip de i kenler devaml olarak (Form kapatlana kadar) bellekte tutulduklar


için son de erleri her zaman hatrlanacaktr. Yani Button1 “OnClick” olaynda
bu de i kene aktard nz de eri, Button2 “OnClick” olaynda rahatlkla
kullanabilirsiniz. A a daki kod satrlarn formunuzun gerekli yordamlarna
ekleyip programnz çal trnz.

196
“deger” isimli de i keni, Unit inizin “private” ksmnda tanmlad nz için tüm
alt yordamlar tarafndan kullanlabilecektir.

Bu ksmda ayrca göstermek istedi im bir hususta “private” ksmnda


tanmlanan bir de i ken (Bu proje için Form2 ye aittir) o formun di er
kontrolleri gibi davranacaktr.

Yukardaki ekilde “private” ksmnda tanmlanan de i kenin “Form2” yazp “.”


tu una baslnca açlan pencerede di er methodlar (özellikler, kontroller vs.) gibi
gözükece ine dikkat ediniz.

197
imdi de “private” ksmnda bir prosedür tanmlayarak Unit içerisinde nasl
kullanabilece imizi görelim.

A a daki gibi “private” ksmnda yeni prosedürünüzü tanmlayn.

type
TForm2 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
deger:Integer; //De i ken tanmland
procedure uyar();//Prosedür tanmlanyor.

Prosedürü bu ekilde tanmlayp program çal trmaya kalkarsanz, Delphi sizi


hata mesajyla uyaracaktr. Bu yüzden imdi anlataca m admlar
gerçekle tirdikten sonra uygulamanz çal trn. mleç prosedürün tanmland 
satrda iken “Ctrl+Shift+C” tu larna beraberce basn. A a daki gibi Unit in
içerisinde Formun üyesi olan prosedür blo unu olu turacaktr.

Artk programnzn çal trlmas srasnda hata olu mayacaktr (Delphi


tanmlanm prosedür bloklarnn yaratlm olmasn istemektedir). Burada
hatrlatalm private blo unda tanmlanan prosedüre di er Unit lerden eri mek
mümkün olamayacaktr.

Prosedür Unit in “Private” ksmnda tanmland  için “Form2.uyar” komutu


kullanlarak prosedür i letilebilmi tir. Prosedürünüzün içerisine yazaca nz
kodlar, di er yordamlardan a a daki ekilde kolayca i letebilirsiniz.

198
Burada de inmek istedi im di er bir noktada, bu prosedüre formun di er
methodlarna nasl eri ebiliyorsanz o ekilde eri ebilece inizdir. Yani “Form2”
yazp “.” tu una basarsanz açlacak olan pencerede prosedürün ismi
gözükecektir.

“Private” blo unda fonksiyon tanmlamas da yapabilirsiniz. Fakat de i ken ve


prosedürde oldu u gibi ba ka bir unitten ula lmas mümkün olmayacaktr.
Sadece tanmland  Unit içerisinde bulunan kontrollere ait yordamlardan
ça rlabilecektir. Bu blokta fonksiyon tanmlamak için a a daki admlar
izlemelisiniz.

199
type
TForm2 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
deger:Integer; //De i ken tanmland
procedure uyar();
function hesapla(ilk:Integer;son:Integer):Real;//Function tanmland
{ Private declarations }

Prosedür ksmnda yapt nz gibi, imleç fonksiyonun tanmland  satrda iken
“Ctrl+Shift+c” tu larna beraberce basp a a daki blo un olu masn sa layn.

Hesapla isimli fonksiyonun “Form2” classnn üyesi oldu unu sanyorum


söylememize gerek yok.

Fonksiyona ait “begin-end” blo u içerisinde hesaplama i lemini yapacak olan


kod satrlarn yazabilirsiniz. Programa gönderilecek olan de er ayn ekilde
“Result” ifadesiyle yakalanabilir. imdi fonksiyonumuzun kodlarn ekleyerek
uygulamamz çal tralm.

200
Hatrlatmak istedi im di er bir hususta, tanmlanan fonksiyon “Form2” class
nda türetildi i için Editör de “Form2” yazp “.” tu una basarsanz, a a daki
gibi açlacak olan pencerede fonksiyonunuzu bulabileceksiniz.

Class içerisinde de i ken, prosedür ve fonksiyon tanmlama i lemleri class


yaps ksmnda daha detayl olarak incelenecek ve örneklendirilecektir.
imdilik bu ksm kapatp “Unit” penceremizde yer alan di er satrlar
incelemeye devam edelim.

201
VI.SATIR:

public
{ Public declarations }
end;

Proje içerisinde bu blo un kullanm mant  “private” ile tamamen ayndr.


Aralarndaki tek fark “public” blo unda tanmlanan de i ken, prosedür veya
fonksiyona di er Unitler den de ula labilmesidir. Yani bu blokta tanmlanan bir
de i ken ait oldu u Unit inin eklendi i tüm formlardan (aslnda Unitlerden)
kolaylkla ça rlabilmektedir.

VII.SATIR:

end;

Bu satr, class a ait tanmlamalarn bitti i yeri göstermektedir (TForm2).

VIII.SATIR:

var
Form2: TForm2;

“TForm2” class ndan Object Oriented mant  kullanlarak Form2 isminde yeni
bir de i ken türetilip kullanma sunulmaktadr. Hatrlatalm “TForm2” nin tüm
özellikleri bu yeni de i kene de aktarlm olacaktr.

IX.SATIR:

implementation

Forma ait Event lar için yazlacak olan kodlar bu satrdan itibaren ba lar. E er
Unit içerisinden silerseniz uygulamanz çal mayacaktr.

X.SATIR:

{$R *.dfm}

“.dfm” uzantl dosyaya yazlacak olan kodlar belirleyen çok önemli bir
bildiridir. Sakn Unit inizin içerisinden silmeyiniz. Silerseniz uygulamanzn
çal trlmas ba arszlkla sonuçlanacaktr.

202

You might also like