Türkiye'nin en eski ve aktif online oyun platformu, Ultima Online, Counter-Strike ve diğer online oyunlar hakkında Türkçe haber, bilgi ve forum sunuyor. Türkiye'nin en eski ve aktif online oyun platformu, Ultima Online, Counter-Strike ve diğer online oyunlar hakkında Türkçe haber, bilgi ve forum sunuyor.
  • ANASAYFA
  • ULTIMA ONLINE
    • Ultima Online Oyuncu Rehberi

      Ultima Online Oyuncu Rehberi

      Oyunu hakkında tanıcı bilgiler ve ipuçları

    • Ultima Online Server List

      Ultima Online Server List

      Önemli özellikleri ve online oyuncu sayıları

    • Ultima Online Script

      Ultima Online Script

      Sphere, RunUO, Razor scriptleri

    • Ultima Online Forum

      Ultima Online Forum

      UO hakkında görüş alışverişi

  • FORUM
  • DOKÜMAN
  • İNDİR
  • DISCORD 25
   Üye ol    Giriş
228
  1. Doküman
  2. Diğer Dökümanlar
  3. Delphiye Başlangıç.
Kanglaoo

Delphiye Başlangıç.

  • Kanglaoo
  • Kanglaooo
  • 2006-06-13 19:54
  • 1 Yorumlar
  • 6926 Görüntüleme
1.BÖLÜM

DELPHİ İLE ÇALIŞMAYA
BAŞLAMAK



Delphi'nin kurma programı Delphi'ye ait dosyaları seçilen sürücü ve dizine kopyaladıkdan sonra en son olarak yeni bir program grubu hazırlanmakta ve bu program grubuna Delphi'ye ait simgeleri dahil etmektedir.Delphi'yi harddiske kurduktan sonra Delphi'nin kendisini temsil eden simgenin üzerinde çift tıklama yapar veya Delphi simgesi seçili iken entere basarsanız, Delphi çalıştırılmak üzere harddiskden belleğe okunmaya başlanır.Delphinin bellğe okunması işlemi tamamlanınca aşşağıdaki gibi bir ekran görüntüsü ile karşılaşırsınız.
Bu ekran görüntüsünü dikkatlice inceliyecek olursanız,masaüsyünde Windows 95 penceresinin halen mevcut olduğunu görürsünüz.

Delphi başalatılır başlatılmaz , varsayılan adı Project1 olan bir Delphi uygulaması veya projesi otomatik olarak hazırlamaktadır. Delphi 'de diğer Windows uyumlu program geliştirme araçlarının tersine , pencerelere Window yerine FORM adı verilmektedir.Buna göre Delphi'de yazılan programlar , ekrana bir Form içinde gelirler.Bu bakımdan işe yarar Delphi programları en azından bir form içerirler.Formlar Delphi programları için tek bileşen değildirler.Pascal programlarının temel bileşenleri program kodları içeren PAS uzantılı program dosyaları ve Unitler'dir.Yazılan Pascal programları harddiske PAS uzantısı ile kayıt
edilir.Delphi ile geliştirilen uygulamalara Proje adı verilmektedir.Delphi ile hazırlanan projeler hard diske DPR uzantısı ile kayıt edilir.


2.BÖLÜM
DELPHİ İLE
PROGRAMCILIĞA GİRİŞ


Hazırlanan yeni bir proje için Delphi tarafından otomatik olarak hazırlanan program kodlarını görmek için View menüsünden Project Source komutu verilir.

Yeni hazırlanan bir proje için Delphi tarafından otomatik olarak hazırlanan program kodları toplam 9 satırdır.İlk satırda projeye Pascal'dan gelen alşkanlık ile Program deyimi ile ad vermilmektedir.Aslında üzerinde çalıştığımız projeyi hard diske hangi ad ile kayıt edrseniz Program deyimi ile projeye o ad otomatşk olarak veriliyor.Yeni hazırlanan ve bir form içeren Delphi projesine Uses deyimi ile form adındaki hazır Delphi uniti ve New Project komutunun verildiği sırada otomatik olarak hazırlanan UNIT1 adlı Unit projeye dahil edilmektedir . Delphi projelerine dahil edilen Unitler diske PAS uzantısı ile ayrı bir dosyaya kayıt edildiği için Unit'in , UNIT.PAS adlı dosya dahilinde olduğu belirtiliyor.
Blok baştan Begin deyiminden sonra Aplication.CreateForm(TForm,Form1); Şek-
linde yazılan ilk satır ile üzerinde çalışılan proje veya Aplication için CreateForm metodu ile Form1 adında bir nesne veya Form hazırlanmaktadır.Bu işlem yapılırken Tform 'dan yarar-
lanılmaktadır.Bir sonraki satırda ise RUN metodu ile üzerinde çalışılan proje veya apilication çalıştırılıyor.Projeye WinCrt gibi Pascal Kökenli bir Unit dahil edilip proje içinde Write veya Read gibi deyimlere yer verilmezse ve Aplication.Run satırına projede yer verilmediği sürece , hazırlanan projeyi Run menüsünden Run komutu ile işletmenin bir anlamı olmaz.


Delphi projesi Run menüsündeki Run komutu ile çalıştırıldığında, CreateForm metodu ile hazırlanıp projeye dahil edilen Formu temsil eden bir pencere ekrana gelmektedir.Aşşağıda verilen ekran görüntüsü File menüsünden New Project komutu ile hazırladığım ve herhangi bir değişikliğe uğratmadığım Project1 adındaki Delphi Projesini çalıştırdıkdan hemen sonra aldım.

Bu projeye işlem yaptıracak program kodlarını Projenin kendisine dahil edebiliriz.An-
cak Borland, programcılarının çok gerekmedikçe DPR uzantılı proje dosyası ile fazla ilgilen-
melerini istemiyor.Bu nedenle gözlerimizi projeye otomatik olarak hazırlanıp dahil edilen Forma çevireceğiz.

Delphi başlatıldığında veya New Project komutu ile yeni bir proje hazırlandığı zaman masaüstünün aşşğıdaki gibi olduğunu daha önce verilen ekran görüntülerinden biliyoruz.Aşşa-
ğıda verilen ekran görüntüsünden tesbit edebileceğimiz gibi , Borland programcılarının daha çok formlar üzerinde çalışması gerektiğini öngörerek , varsayım olarak ekrana projeye otomatik olarak dahil edilen formu getirmektedir.

Aktif pencere durumundaki Form penceresinden , projeye otomatik olarak dahil edilen Pascal program kodu içeren Unit1 adlı penceresine geçmek için ilk akla gelen
Toggle Form /Unit1 komutunu vermektir.

Form penceresi aktif pencere iken bu komut verildiği zaman Unit penceresine geçilmekte, Unit penceresinde iken komut verildiği zaman ise Form penceresine geçilmekte-
dir.

Delphi'nin başlatılması ile birlikte otomatik olarak hazırlanan projeye otomatik olarak
dahil edilen Unit1 adlı Unitin program kodlarını incelemek için program kodu içeren Unıt1.PAS penceresinibüyüttüm.Unit1.PAS penceresindeki program satırlarını ve bu satırlar-da kllanılan deyimleri anlatacağım.

Projelere Program deyimi ile nasıl ad veriliyorsa , Unitlere ise Unit deyimi ile ad verilmektedir.
Interface adlı kısımda Uses bildiri deyimi ile Unit dahilinde kullanılacak hazır Delphi unitleri belirlenmektedirHer Delphi ünitine SysUtıl,WinTypes,WinProces,Messges,Classes, Graphics, Controls , Forms , Dialogs adlı hazır Delphi Unitleri Otomatik olarak USES bildiri deyimi ile dahil edilmektedir.

Type bildiri deyimi ile başlatılan blokta,yeni tipler tanımlanmaktadır.Delphi projesine otomatik olarak dahil edilen Form1adlı form,gerçekde bir nesnedir.Projedeki Form1
adlı nesne ,Class deyimi ile TForm nesne tipinden yararlanılarak tanımlanmaktadır.Turbo
Pascal ve Delphi 'de Formları tanımlamada kullanılan nesne tipine TForm adı verilmektedir.
TForm1=Class(TForm1)


Type bildiri deyimi ile başlatılan tanımlama bloğunda ,Unıt dahilinde kullanılacak nesneve Procedurler'in tanımlanması dışında,varsa Public ve Private özellikli diğertip tanım
lamaları yapılabilmektedir.Type deyimi ile başlatılan tanımlama bloğun sonu End deyimi ile
işaret edilmektedir.


Var bildiri deyimi ile unit dahilinde kullanılacak olan değişkenler tanımlanmaktadır.
Henüz hazırlanan ve yalnızca Unit1 adında ve Unit içeren projede ,daha önce Class deyimi
ile TForm1 adında nesne tipi tanımlanmıştı.Değişken tanımlaması yapılan Var tanımlama bloğundaClass deyimiyle hazırlanan nesne tipinden yararlanılarak değişken tanımlama işlemi yapılmaktadır.

Form1:TForm1;


Budeğişken tanımlama satırından sonraprojeye dahil edilmiş olan Form1 adındaki form ,Form1 adlı nesne özellikli değişken ile temsil edilir .Var deyimi ile başlatılan tanım-lama bloğundan Implemantion bildiri deyimi ile , Unit'in asıl program satırlarına geçilmek-tedir.Unitlerde istenilen sayıda yordam veya fonksiyon bulunabilmektedir .Başlangıçda Unit1 de işlem yapmaya yönelik herhangi bir program satırı yoktur.Pascal programlama dilinin ku-rallarına göre Unitler ve Programlar End deyimi ile sona erdiği için Unit'in en son satırında
sonunda nokta (.) işareti olan "End" deyimi var.


Message Box( ) ile Ekrana Mesaj Yazmak

Delphi'de ekrana mesaj vermekte kullanılan ShowMessage deyiminin yanında bir de MessageBox ( ) adında bir method var.Bu method ile ekrana bir diyalog kutusu içnde mesaj verilir hem de kullanıcıya seçim yapma imkanı sağlanır.MessageBox metodundan önce Apli-
cation nesnesini yazmak gerekir.MessageBox ( )metodu hakkında bilgi vermek için Delphi penceresine ait menü çubuğundan File menüsünden New Project komutunu verip yeni bir Delphi projesi hazırladım çalışma anında Formun üzerinde tıklama yapıldığı zaman MessageBox ( ) metodunun işletilmesini isrediğim için , üzerinde çalıştığım ve Form1 adında bir tek form içeren projenin UNIT.PAS adındaki Unıtıne FormClick adında bir yordam ekledim .MessageBox( )metodunun nasıl kullanıldığı yordamı bir inceleyin.

Verilen örnek MessageBox kullanımında diyalog kutusuna getirilecek düğmeler "mb_OKCancel "parametresi ile seçilmektadir.Buna göre bu örnekte diyalog kutusuna OK ve Cancel düğmeleri gelir."mb_DefButton1" sabit bilgisi ile diyalog kutusu ekrana geldiğinde ilk düğmenin seçili durumda ilması sağlanmaktadır.

Yalnızca bir Form İçeren ve FormClick Yordamı yukarıdaki gibi düzenlenen proje ça-lıştırılıp, çalışma anında formun üzerinde tıklama yapılıp FormClick yordamının işletilmesi sağlanırsa aşağıdaki gibi bir ekran görüntüsü elde edilir.

Verilen bu ekran görüntüsünden tesbit edebileceğiniz gibi MessageBox( ) metodu ile diyalog kutusuna OK ve Cancel düğmelerinin getirilmesi için seçim yapılmasına rağmen diyalog kutusuna Tamam ve İptal düğmeleri geldi .Bunun nedeni kullandığım Windows sürümünün Türkçe olmasıdır.




3.BÖLÜM
KONTROLLER ve NESNELER


Nesne yönelimli bir program geliştirme aracı olan Delphi ile iyi programlar yazmanın yolu kontroller ve nesneler hakkında bilgi sahibi olmaktan geçiyor. Bu nedenle bu bölümde Delphi'de nesnelerin nasıl kullanıldığı , nesnelerin özelliklerinde nasıl değişiklik yapıldığı konusunda bilgi vereceğim.

Metin Kutusu (EDİT) Nesnesi

Metin kutusu nesnesini Delphi projelerinde daha doğrusu formların üzerinde kullanabilmek için ,Compenent Paletteden yararlanılır.Compenent Palette ab harfleri olan düğme ile Formlara metin kutusu eklenir.

Ekran görüntüsünden tesbit edeceğiniz gibi ,Forma eklenen ilk metin kutusunun içe-riği varsayım olarak "Edit1" şeklinde .Bu sırada Object Inspector penceresine bakacak olursanız , Forma dahil edilen ilk Edit nesnesinin adını temsil eden özelliğin (name) "Edit1" bilgisini içerdiğini görürsünüz.Hazırlanan bu metin kutusunun varsayılan özelliklerini Object İnspector penceresinden görebilirsiniz.



Düğmeler - Buttton Kontrolü

Delphi projeleri dahilinde kullanılabilir çok sayıda denetim bulunmaktadır. Component
Palette araç çubuğundaki her düğme bir kontrolü temsil etmektedir.

Component Palette arç çubuğundan Button(düğme) nesnesini temsil eden düğme fare ile seçili duruma getirildikden sonra form üzerine tıklama yapılarak forma düğme ekleme iş-lemi tamamlanır.Formun Label nesnesi ve düğme eklenmiş hali aşşağıda verildi.

Forma eklenmiş olan ilk düğme başlığı ve program içindeki adı varsayım olarak "Button1" seçilir.Bunu ekran görüntüsünden tesbit edebilirsiniz.Bu düğmenin varsayılan başlığınğ Object İnspectorda'ki CAPTİON özelliği sayasinde değiştirebilirsiniz.



4.BÖLÜM
DEĞİŞKEN TANIMLAMAK

Quick Basic , Visual Basic , ve xBASE program geliştirme araçlarının aksine ,
Delphi , proje dahilinde kullanılacak bütün değişkenlerin önceden tanımlanmasını
zorunlu kılmaktadır. Henüz tanımlanmayan bir değişkeni Delphi projesi içinde kul-
lanma şansınız yoktur.Basic ve xBASE sınıfı veri tabanı programlarında , programcı
gerek duyduğu zaman önceden hazırlık yapmaya gerek kalmadan elde ettiği değeri
bir değişken adı belirterek bellekte saklıyabiliyordu. Bu bölümde fazla ayrıntıya gir-
meden Delphi ile işe yarar programlar yazabilmek için değişken hakkında gerektiği
kadar bilgi vereceğiz. eğer elinizde Pascal üzerine yazılmış kaynaklar varsa , onlar-
dan yararlanabilirsiniz.

Diğer taraftan Delphi gibi görsel program geliştirme araçları dahilinde kullanı-
lan çok sayıda hazır nesne bulunmaktadır. Bu nesneler gerçekte dizi değişkenler gibi
işlev gördüğü için programcının değişken tanımlama ihtiyacını azalmaktadır. Örneğin
dışarıdan girişi yapılan bilgileri saklamak için ayrıca değişken tanımlamaya ihtiyaç
yoktur. Çünkü dışarıdan girilen veya dosyadan okunup ekrana yazılan bilgiler için
forma eklenmiş olan metin kutuları nesnelerine ait Text özellğinden yararlanılmakta-
dır.

Char Bilgi Tipi

Eğer proje dahilinde tek karakterlik bilgileri gecici olarak bellekte saklama
gereği duyuyorsanız , Var bildirim deyimi ile başlatılan blokta Delphi'nin hazır Char
tipinden yararlanarak değişken tanımlayabilirsiniz. Char tipinden yararlanarak değiş-
kenlerde ASCII karakter kümesindeki 256 karakterden biri saklanabilir.

Var
EvetHayır : Char;

Bu şekilde tanımlanan değişkene daha sonra istenen karakter aktarılabilir.
Char tipindeki değişkenlere aktarılan ASCII karakter kümesindeki bazı bilgiler ekran-
da veya yazıcıda görüntülenebilen bir karakteri temsil etmeyip , bir etkiyi temsil et-
mektedir. Bu tip bilgileri doğrudan Chr() fonksiyonundan yaralanılabilir. Char tipinde-
ki değişkende saklanan bilgilerin ASCII kodunu öğrenmek istiyorsanız , Ord() fonksi-
yonundan yararlanabilirsiniz.Daha önceden bilindiği gibi Char ve String tipine sahip
bir değişkene sabit bir bilgi aktarılırken , sabit bilgi tek tırnak (' ') içine alınmaktadır.


procedure TForm1.FormClick(Sender:TObject);
var
Cevap:Char;
Durum:Char;
begin
Cevap:='E';
Durum:=Chr:(69);
Edit.Text:=Cevap;
Edit2.Text:=Durum;
end;


String Bilgi Tipi

Birden fazla karakteri bellekte veya dosyada saklamak için string tipindeki değiş- kenlerden yaranılır. String bildiri deyimi ile değişken tanımlama işlemi yapılırken , köşeli parantez içinde değişkende en fazla kaç karakterin saklanmak istendiği belitilir.

Var
Ad : String[10];
Soyad : String[15];

Bu iki değişken tanımlama satırı ile en fazla 10 karakter uzunluğunda bil-
gi alabilecek "Ad" değişkeni ve en fazla 15 karakter bilgi alabilecek "Soyad" değişkeni
tanımlanmaktadır. Değişkenin belirtilen uzunluğundan daha fazla bilgi aktarılacak
olunursa , değişkene aktarılan bilginin bir kısmı kesilebilir. Uzunluğu 1 olarak seçilen
String tipindeki bir değişkenin , Char tipindeki bir değişkenden bir farkı yoktur. Aşa-
ğıda verilen ekran görüntüsünde String tipinde 3 adet değişkenin tanımlandığı 3 prog-
ram satırı vardır.
procedure TForm1.FormClick(Sender:TObject);
var
Ad :String[10];
Soyad :String[15];
Adres :String[30];
begin
Ad:='Tamer ';
Soyad:='AYDIN';
Adres:=InputBox('Bilgi Girişi','Adresi Giriniz','');
Edit1.Text:= Ad;
Edit2.Text:= Soyad;
Edit3.Text:=Adres;
end;
Ad ve Soyad adındaki ilk iki değişkene doğrudan bilgi aktarma işlemi yapılırken , Ad-
res değişkenine InputBox() fonksiyonu aracılığı ile bilgi aktarılmaktadır. String tipin-
deki değişkenlere yalnızca karaktersel bilgiler aktarılabilir.Sayısal veye tarihsel tipde-
ki bilgileri String tipindeki değişikenlere aktarma gereği duyarsanız , IntToStr() gibi
tip dönüştürme fonksiyonlarından yaralanmanız gerekir. Daha sonra bu fonksiyonlar
hakkında bilgi verilecektir.


Boolean Bilgi Tipi

Boolean tipi ile tanımlanan değişkenler bellekte yalnızca 1 byte yer
kaplar ve bu değişkenler yalnızca True ve False değerlerini alabilirler. Eğer üzerinde
çalıştığınız projede Doğru ve Yanlış gibi yalnızca iki değer alabilecek değişkenlere
gerek duyuyorsanız , Delphi'nin Boolean tipinden yararlanarak değişken tanımlaya-
bilirsiniz.

Var
EvetHayır : Boolean;
DogruYanlıs : Boolean;

Boolean tipindeki bilgilerin nasıl kullanıldığını göstermek için üzerin-
de çalıştığım projenin tek formunun Click yordamını aşağıda verilen şekilde düzenle-
dim. Bu örnekte önce Boolean tipinden yaralanarak Sonuc adında bir değişken ta-
nımladım Daha sonra InputBox() fonksiyonu yardımı ile Integr tipindeki değişkene
bilgi girişi yaptım.




procedure TForm1.FormClick(Sender:TObject);
var
Sonuç:Boolen;
Final:Boolen;
begin
Final:=StrToInt(InputBox('Final Notunuz:','Not Girişi',''));
Sonuç:=Final>50;
IF Sonuç =True Then
ShowMessage('Geçer Not Aldınız');
IF Sonuç =False Then
ShowMessage ('Alınan Not Geçerli değil');
end;
Boolean tipindeki sonuc değişkenine bilgi aktarmak için "Final" adın-
daki değişkenin içeriğini 50 sabit değeri ile karşılaştırdım. Final değişkeninin içeriği
50'den büyük ise Sonuc değişkenine True , 50'den büyük değil ise False ddeğeri akta-
rılır.


Integer Bilgi Tipi

Ondalık nokta içermeyen tam sayısal bilgileri bellekte tutmak için
Integer tipinden yaralanarak değişken tanımlama işlemi yapılır. Ancak Delphi proje-
si dahilinde tam sayısal bilgiler için değişken tanımlamak için Integer bildiri deyimin-
den başka Byte , ShortInt , LongInt ve Word bildiri deyimleriden de yaralanılmakta-
dır.

Integer bildiri deyimi ile tanımlana değişkenlere -32768 ile +32767
arasında değişebilen sayısal değerler aktarılabilirken , Byte bildiri deyimi ile 0 ile 255
arasında değişen değerler aktarılabilir. Yine LongInt tipindeki değişkenlere ,
-2.147.483.648 ile +2.147.483.647 , ShortInt tipindeki değişkenlere -128 ile +127 ara-
sında değişen tam sayısal bilgiler aktarılabilir.Aşağıda verilen örnek yordamda Integer
tip deyimleri ile tanımladığım 5 değişkene alabilecekleri en yüksek sayısal bilgileri ak-
tardım.

procedure TForm1.FormClick(Sender:TObject);
Var
Sayı1:Byte;
Sayı2:ShortInt;
Sayı3:Integer;
Sayı4:Word;
Sayı5:LongInt;
begin
Sayı1:=940;
Sayı2:=17;
Sayı3:=94017;
Sayı4:=124344;
Sayı5:=1234567;
end;


Real Veri Tipi

Ondalık nokta içeren sayısal bilgileri bellekte saklamak için Real tip
deyiminden yararlanarak değişken tanımlama işlemi yapabilirsiniz. Ondalık nokta içe-
ren sayısal bilgileri bellkete saklamak için değişken tanımlarken Real deyiminden baş-
ka , Single , Double , Extend ve Comp bildiri deyimleri kullanılabilir.

Dizi Değişkenler

Daha önce başka bir program geliştirme aracı ile program yazanlar
değişken tanımlamanın bellekte gecici olarak ayni program çalıştığı sürece bilgi sakla-
yabilmek için yer ayırma veye rezervasyon yapmadan başka bir şey olmadığını bilirler.
Örnek olarak parogramcının programına eklediği bir yordamda çok büyük değere sahip
olmayan tamsayı bir bilgiyi bellekte gecici olarak saklama gereği duyduğunu varsaya-
lım. Bu durumda , programcı Var deyimi ile başlatılan blokta Integer bildiri deyimi ile
değişken tanımlaması yapar.

Örneğin programcı bir yordam içnde kaç kez tekrarlanacağı önceden
bilinmeyen bir döngüyü kullanmak durumunda olsun. Eğer döngünün kaç kez tekrarla-
nacağı programın yazımı aşamasında belli olyasdı , döndü için değişkene gerek duyul-
mazdı. Madem döngünü kaç kez tekrarlanacağı önceden belli değilse bunun kullanıcı-
dan sorulması gerekir. Kullanıcının döngü sayısı ile ilgili olarak çalışma anında girdiği
bilginin döngüde kalındığı sürece bellekte saklanması gerkir.


Tanımlana değişken için belleğin nersinde yer ayrılacağı konusu
Delphi ile Windows'un sorunudur. Ancak bellekte ayrılacak yer miktarı , bellekte sak-
lanacak bilgini tipine bağlı olarak programcı tarfından belirlenir. Bizim örnekte tamsayı
bir bilgiyi saklamak için bellekte yer ayırma işlemi yaptığımız için 2 byte'lık yer rezer-
ve edilir. Eğer tamsayı yerine LongInt bilgiler için değişken tenımlamsı yapmış olsay-
dık bu kez bellekte ilgili değişken için 4 byte'lık yer ayrılırdı. Belleğin bilgi aktarılmak
üzere rezerve edilen yerini temsilen değişkenin adı kullanılır.

Bilgileri saklamak üzere Integer bildiri deyimi ile bellekte 2 byte'lık yer ayırma işlemi yapılır. Belleğin tamsayı bilgileri saklamak üzere ayrılan yerine ise TurSayisi adını vermiştik.Belleğin TurSayisi adı verilen bu yerine bilgi aktarmak veya daha önceden aktarılan bilgileri kullanmak için sürekli olarak belleği rezerve edilen yerin adından yararlanılır. InputBox() fonksiyonu ile klavyeden girilen bilgi , bellğin TurSayisi olarak adlandırılan yerine aktarılıyor. Bellekte gecici olarak bilgi saklamk için yer ayırma işlemine değişken tanımlama adı verilmektedir. Bu işlemi kendiniz için bir otele telefon edip oda ayıtma işlemine benzetebilirsiniz.

Ancak bazen bellekte bilgi saklamk için birden fazla yere gerek du-
yulur. Aynen otelde birden fazla oda ayırtma işlemi gibi. Her byte'tı bir kişilik odaya
benzetebiliriz. Eğer tamsayı bilgiler için yer ayırma işlemi yapmak istiyorsanız iki kişi-
lik bir oda , LongInt-Uzun tamsayı bilgiler için yer ayırma işlemi yapıyorsanız 4 yataklı
bir ayırmanız gerekir. Ancak iki çift söz konusu ise otelde yan yana iki kişilik 2 oda
ayırtmak istersiniz.

Bir Fizik öğretmenin değişik sayıda öğrencinin bulunduğu birden
fazla sınıfın dersine girdiğini düşünelim. Bu öğretmen çğrencinlerin Fizik dersinden al-
dıkları notları bilgisayarda değerlendirmek (ortalamasını almak ) üzere Delphi ile basit
bir program yazmak istesin. Girilen bu notların klavyeden girildikden sonra değerlen-
dirme yapılana değin bellekte saklanması gerekir. Başka bir değişle öğretmen her öğren-
cinin notunu değerlendirme yapana değin bellekte saklamak zorunda. Bunun için de de-
ğişken tanımlama işlemi yapacak.

Söz konusu öğretmen dizi değişkenler konusunda tecrübeli değilse
, önce en fazla mevcuda sahip sınıfın öğrenci sayısı kadar değiişken tanımlar. Ardından
her öğrencinin notunu o öğrenci için tanımlanan değişkene aktarılır. Burada öğrenciler
için tanımlanan bütün değişkenler aynı özelliğe sahiptir.
procedure TForm1.FormClick(Sender:TObject);
ögrenci1: Integer;
ögrenci2: Integer;
ögrenci3: Integer;
ögrenci4: Integer;
ögrenci5: Integer;
ögrenci6: Integer;

Aynı özellik ve işleve sahip değişkenleri ayrı ayrı tanımlamak pra-
tik değildir. Bu ve benzeri durumlarda aynı tipdeki değişkenleri ayrı ayrı tanımlamak
yerine dizi değişkenlerden yararlanılır . Yukarıda ekran görüntüsü verilen değişken ta-
nımlama örneğinde Integer deyimi ile her seferinde 1 adet değişken tanımlanıyor. Ancak
istenirse bir seferde aynı özelliğe sahip birden fazla değişken tanımlanabilir.Aynı özelli-
ğe sahip birden fazla değişkeni bir seferde tanımlamak için Array deyiminden yararla-
nılmaktadır. Array deyimi ile değişken tanımlanırken , köşeli parantezlerin içine önce
dizi değişkeninin ilk elemanın , ardından son elamanın sıra numarası belirtilir. Ardından
dizi değişkenin tipi belirtilir.

Var
Ogrenci : Array[1..20] Of Integer;

Bu değişken tanımlama satırı ile aynı anda 20 adet değişken ta-
nımlandı. Parantez içine yazılan sayısal bilgi ile kaç adet değişkenin tanımlanacağı be-
lirlenir. Bu şekilde tanımlanan değişkenlere dizi deşinken adı verilmektedir.

Değişken tanımlama işleminin sonunda bellekte yan yana duran
ve aynı özelliğe sahip değişkenlere bilgi aktarmak için , bu 20 değişkenden hangisi kul-
lanılmak isteniyorsa o değişkenin dizi içindeki sıra numarasını değişken adına köşeli
parantezler içinde eklenmelidir. Örnek olarak tanımlanan bu 20 değişkenden ilkine dışa-
rıdan bilgi aktarmak için aşağıdaki gibi bir parogram satırı yazılabilir.

Ogrenci[1] = StrToInt(InputBox('İlk Öğrencinin Notunu Girin ','Not Girişi ',' ')

Eğer dizi içinde 2.sırada yer alan değişkene bilgi aktarılmak isteni-
yorsa , bu kez program içindeki sırasını gösteren sayısal değer değişken adının bir kısmı
olarak kullanılıyor. Bundan çıkarılması gereken sonuç şudur : Verilen örnekte olduğu
gibi benzer işlevleri olan ve aynı tipdeki birden fazla değişkeni ayrı ayrı tanımlamak
yerine bir seferde dizi değişken olarak tanımlamak gerekir.

procedure TForm1.FormClick(Sender:Tobject);
var
Ögrenci:Array [1..20] of İnteger;
Tur:İnteger;
Toplam:İnteger;
Ortalama:Strıng[10];
begin
toplam:=0;
For Tur:= 1 to 20 do
Begin
ögrenci[tur]:=StrToInt(InputBox(IntToStr(tur)+
'.Öğrencinin Notu:','',''));
Toplam:=Toplam+Ogrencı[tur];
end;
ortalama:=FloatToStr(Toplam/4);
show;
Canvas.Font.Size:=14;
Canvas.Textout(20,20,'Ortalama Not:'+Ortalama);
end;


Bu örnek proje çalıştırılıp FormClick yordamı işletilirse , For-Do
döngü oluşturma deyimi ile öğrenci sayısı (burada 20) kadar tekrarlamak üzere her
öğrencinin aldığı not InputBox() fonksiyonu ile Ogrenci adını verdiğimiz dizi değişke-
nin ilgili elemanına aktarılır.



5.BÖLÜM
BLOK KONTROL DEYİMLERİ

IF-THEN Deyimi

IF deyimi , program akışını IF deyimi ile birlikte verilen koşula
bağlı olarak belirlenen program satırlarına veya Begin ve End deyimleri ile oluşturu-
lan işlem bloğundaki program satırlarının işletilmesini veya söz konusu program
bloğunun işletilmeyip atlanılmasını sağlar.

IF ifade THEN
Begin
..............
End

Eğer IF deyimine parametre olarak verilen "ifade" mantıksal doğru
değerini içeriyorsa , Begin ile End deyimleri arasında yer alan bütün satırlar sıra ile tek
tek işletilir. "ifade" , mantıksal yanlış yani False değerini içeriyorsa , bu kez IF ile End
arasında yer alan bütün satırlar atlanılıp program işletimi End deyiminden sonra gelen
ilk satıra geçer. IF deyimi ile birlikte kullanılan THEN yardımcı deyimi kullanılmazsa
hata meydana gelir.

IF Cevap := 'E' THEN
Begin
..............
End

Bu IF - THEN örneğinde IF deyimine parametre (ifade) olarak
Cevap := 'E' koşulu verildi. Eğer Cevap değişkeni 'E' değerine sahip ise , Begin deyimi
ile End deyimi arasında kaln bütün program satırları sıra ile işletilir. Cevap değişkeni
'E' dışında başka bir değer içeriyorsa bu kez Begin ile End deyimleri arasında kalan
program satırları işletilmeyip programın işletimi End deyiminden sonraki satıra geçer.
Begin ile End deyimleri ile sınırları belirlenen işlem bloğunda yalnızca bir program
satırı varsa , Begin ile blok başını ve End deyimi ile blok sonunu belirtmeye gerek
kalmaz.

Cevap = InputBox('Programdan Çıkılsın Mı [E/H] ', 'Programda Çıkış',' ');
IF Cevap = 'E' THEN
Begin
Halt;
End;

Bu işlem bloğundan önce kullanıcıdan programdan çıkılıp çıkılma-
yacağı konusunda onay alınmaktadır. InputBox() fonksiyonu aracılığı ile ekrana geti-
rilen diyalog kutusunda verilen cevap , "Cevap" değişkenine aktarılmaktadır. Cevap
değişkenine "E" değeri aktarılmışsa IF deyimine parametre olarak verilen karşılaştırma-
nın sonucu doğru olacağından Begin ile End deyimleri arasında bulunan tek program
satırı işletilir ve bu satırdaki Halt deyimi ile programının işletimine son verilir. Şimdi,
blok başını ve sonunu belirten Begin ve End deyimini kullanmadan bu işlem bloğu ile
aynı işleve sahip ikinci bir işlem bloğu vereceğim.

Cevap = InputBox('Pprogramdan Çıkılsın Mı [E/H]','Programda Çıkış',' ');
IF Cevap = 'E' THEN Halt;

İşlem bloğu tek satırdan meydana geldiği için bloğun başını ve so-

nunu Begin ve End deyimleri ile belirtmeye gerek yoktur. Eğer Cevap değişkeni 'E' de-
ğerini içermiyorsa , Then deyiminden sonra yazılanlar işletilmeyip programın işletimi
IF deyiminden sonra gelen ilk satıra geçer. Programalrın kolay okunmasını sağlamak
için işlem bloğu tek satırdan meydana gelse bile , blok başının ve sonunu belirtmek
için Begin ve End deyimlerini kullanmanız önerilir.

Şimdeye kadar verilen IF - Then deyimi kullanım örneklerinde
IF deyimi parametre olarak verilen karşılaştırma doğru değerine sahipse Begin ile End
deyimi arasında kalan program satırları işletiliyordu. Karşılaştırmanın sonucu mantık-
sal yanlış değerine sahip olduğu zaman , işlem bloğu içinde kalan program satırları iş-
letilmeyip program akışı End deyiminden sonraki satıra geçiyordu. Ancak bazen IF de-
yimine parametre olarak verilen karşılaştırma işleminin sonucuna bağlı olarak yerine
getirilecek birden fazla işlem söz konusu olabilir. Bu durumda IF - Then deyiminde
yapılması gereken değişiklikleri anlatmadan önce baist bir parogram parvası vereceğim.

procedure TForm1.FormClick(sender:TObject);
var
Puan:Integer;
Begin
puan:=StrToInt(InputBox('Not Girişi','Notu Girin',''));
IF Puan < 50 Then
begin
ShowMessage('Bu Öğrenci Zayıf Not Aldı');
end;
IF Puan >=50 Then
begin
Showmessage('Bu Öğrenci Geçti');
end;
end;

İki adet IF - Then işlem bloğu içeren bu örnek yordamı önce satır
satır incelemeyi deneyin. Yordamdan önce InputBox() donksiyonu ile Puan değişkenine
aktarılmak üzere dışarıdan bilgi girişi yapılmaktadır. Ardından Puan değişkeninin içeri-
ğinin 50'den küçük olup olmadığını IF deyimi ile araştırılmaktadır. IF deyimine para-
metre olarak verilen bu arştırma veya karşılaştırmanın sonucu mantıksal doğru olduğu
zaman yani girişi yapılan not 50'den küçükse , işlem bloğundaki tek satırdaki Show-
Message() fonksiyonu ile girişi yapılan notun zayıf olduğunu belirten bir mesaj ekrana
verilmektedir.


Girişi yapılan not 50'den küçük değilse ilk işlem bloğundaki prog-
ram satırı işletilmeden programın akışı End deyiminden sonraki satıra geçer. Bir sonra-
ki satırda ikinci işlem bloğunu başlatan bir IF deyimi daha var. İkinci işlem bloğunda
ise girişi yapılan notun 50'ye eşit veya 50'den büyük olup olmadığı araştırılıyor. Girişi
yapılan not 50'ye eşit veya 50'den büyükse , bu kez ikinci işlem bloğundaki program
satırı işletilir ve ekrana bir diyalog kutusu içinde mesaj verilir.



Bu örnekteki işlem bloklarının sayısı istenildiği gibi arttırılıp geçer
not alan öğrencinin Orta , İyi ve Pekiyi not alıp almadığını araştırmak mümkündür.
Ancak içeriği araştırılan değişkenin alma olasılığı olan her değer için ayrı bir IF - Then
işlem bloğu hazırlamak partik değildir
.





procedure TForm1.FormClick(sender:TObject);
var
Puan:Integer;
Begin
puan:=StrToInt(InputBox('Not Girişi','Notu Girin',''));
IF Puan < 50 Then
begin
ShowMessage('Bu Öğrenci Zayıf Not Aldı');
end;
Else
begin
Showmessage('Bu Öğrenci Geçti');
end;
end;

Örnek programda Puan değişkenin içeriği 50'den küçükse Begin
ile End deyimleri arasında kalan program satırları işletilir. Bu durumda ELSE deyi-
minden End deyimine kadar olan program satırları işletilmeyip programın akışı End
deyiminin bulunduğu satırı izleye satıra geçer. Eğer Puan değişkenin içeriği 50'den
küçük değilse (else) , bu kez işlem bloğunda Else deyiminden sonraki Begin ve End
deyimleri arasında bulunan program satırları işletilir. Bu işlem bloğu kalıbı , yapılan
karşılaştırma ile ilgili yalnızca iki ihtimal söz konusu oluduğu zaman kullanılır.

Yapılan karşılaştırmada ikiden fazla olasılık varsa birden fazla
ELSE deyimi kullanılabilir. Aşağıda verilen işlem bloğu kalıbında toplam 3 olasılık
için karşılaştırma ve karşılaştırmanın sonucuna göre işlm görecek 3 adet program satı-
rı bulunur.

IF ifade 1 Then
Begin
.............
End;
IF ifade 2 Then
Begin
..............
End;
IF ifade 3 Then
Begin
..............
End;

Eğer birinci karşılaştırma (ifade 1) mantıksal doğru değerine sahip
ise , ilk Begin deyiminin bulunduğu satır ile ilk End deyiminin bulunduğu satıra kadar
olan program satırlarının işletilir. Ardından programın işletimi blok sonunu işaret eden
End deyimlerinden sonraki satıra geçer. Bu durumda işlem bloğunda ELSE yardımcı
deyimleri ile hazırlanan karşılaştırma işlemlerinin sonucuna bakılmaz. IF deyimine pa-
rametre olarak verilen ifade 1 mantıksal yanlış değerine sahipse , bu kez ilk ELSE
deyimine parametre olarak verilen ifade 2'nin sonucuna bakılır. ifade 2 doğru değere
sahipse , ilk ELSE ile 2. ELSE deyimleri arasında kalan program satırları işletilir.

procedure TForm1.FormClick(sender:TObject);
var
Puan:Integer;
Begin
puan:=StrToInt(InputBox('Not Girişi','Notu Girin',''));
IF Puan < 50 Then
begin
ShowMessage('Bu Öğrenci Zayıf Not Aldı');
end;
Else
IF Puan >=50 And (Puan < 60) Then
begin
Showmessage('Bu Öğrenci Geçti');
end;
Else
IF (Puan > 60) And (Puan < 80) Then
begin
Showmessage('Bu Öğrenci İyi Not Aldıi');
end;

end;
RESIM : 183

ELSE'lerin sayısı istenildiği kadar arttırılabilir. Ancak iç içe ve kar-
maşık kontrol blokları hazırlamak programın okunurluğunu azaltacağından gerekme-
dikçe iç içe ve karmaşık if - else 'lerden kaçınmak gerekir. Genel yazılıştaki "ifade"
yerine , bir fonksiyonun geri döndüreceği mantıksal değeri ifade olarak kullanmak
mümkündür.


CASE - OF Deyimi

CASE - OF deyimi işlev bakımından IF - Then deyimine çok benze-
mektedir. Bazı durumlarda özelllikle çok sayıda iç içe IF - Then işlem blokları kullanıl-
dığı zaman programın okunurluğu azalır ve programı izlemek zorlaşır. İşte bu gibi du-
rumlarda CASE - OF deyiminden yararlanmak gerekir. İsterseniz IF deyimi ile CASE
deyimini birlikte kullanabilirsiniz.

Genel Yazılışı

CASE Kontrol Değişkeni OF
ifade 1
Begin
..........
End;
ifade 2
Begin
..........
End;
ELSE
Begin
..........
End;
End;

Genel yazılıştan tespit edileceği gibi blok başlatan CASE deyimin-
den sonra yapılacak karşılaştırmalarda kullanılacak bir kontrol değişkeni bulunmak-
tadır. Eğer kontrol değişkeninin içeriği "ifade 1" olarak verilen değerle aynı ise birinci
ifadenin içeriğini araştıran CASE deyiminden bir sonraki Begin ve End deyimleri ara-
sında yer alan program satırları işletilir ve programın akışı Case ile başlatılan bloğun
sonunu işaret End deyimini izleyen satıra geçer.

Eğer ikinci koşul doğru değerine sahip ise , bu kez ifade 2'den Begin
ve End deyimleri arasındaki program satırlarını işletir. CASE ile END deyimleri araında
kullanılan bütün ifade'ler mantıksal yanlış sonucunu veriyorsa ve ELSE seçeneği varsa ,
ELSE'den sonraki Begin - End bloğu arasında bulunan program satırları işletilir.



WHILE - DO Deyimi

WHILE - DO blok kontrol deyimi , verilen şarta bağlı olarak blokla-
nan program satırlarının bir döngü halinde tekrar tekrar işletilmesini sağlar. Eğer
While - Do blok kontrol deyimi ile tekrar tekrar işletilecek program satırları birden fazla
ise , işletilecek satırların başına "Begin" , sonuna ise "End;" deyiminin getilmesi
gerekir.

Genel Yazılışı

WHILE ifade DO
Begin
........
Break
........
End;

Genel yazılışta verilen Break yardımcı deyimnin kullanılması
isteğe bağlıdır. WHILE - DO deyimine parametre olarak verilen "ifade" doğru değe-
rine sahip olduğunu ve Break deyimi ile müdahale edilmediği sürece WHILE - DO
ile işaret edilen program satırları bir döngü halinde tekrar tekrar işletilir. "ifade" yerine
IF deyiminde olduğu gibi mantıksal bir karşılaştırma bir değişken veya tek başına man-
tıksal doğru (True) ile mantıksal yanlış (False) kullanılabilir.

WHILE - DO deyiminin genel kullanış biçiminde bulunan ve kulla-
nılması isteğe bağlı olan Break yardımıcı deyimi , döngüden "ifade" ile belirtilen şarta
bağlı kalmadan çıkmayı sağlar. Genel alışkanlıkla yazılan Braek deyimi ile çıkılacak
şekilde oluşturulan WHILE - DO döngülerinde "ifade" olarak mantıksal sabit bir değer
veya değişken kullanılır.

WHILE True DO
Begin
............
IF kosul Then
Break;
............
End;

Verilen bu WHILE - DO döngüsünün her turunda IF deyimi ile
"kosul" test edilir. Eğer kosul mantıksal doğru değerini içeriyorsa , programın işletimi
döngüden çıkarılarak blok sonunu işaret eden End deyimini izleyen satıra geçer.
Döngü kontrol ifadesi olarak mantıksal sabit yani True kullanılması
halinde döngüden Break deyimi ile çıkılmadığı sürece döngü sonsuz olur. Bu nedenle
yukarıdaki gibi döngülerde mutlaka döngüden çıkabilmek için belirli şartlara bağlı ola-
rak Break deyiminin işletilmesi sağlanmalıdır.

procedure TForm1.FormClick(sender:Tobject);
var
Ad:Strıng[10];
Begin
Ad:=InputBox('Adınız','','');
IF Ad='Tamer Aydın' Then
Break;
End;
end;


FOR - DO Deyimi

WHILE - DO ile oluşturulan döngülerden önce dahilinde bulunan
progarm satırlarının kaç kez tekrarlanacağı bilinmez. FOR - DO ile oluşturulan döngü-
lerin kaç kez tekrarlanacağı önceden belirlenir. WHILE - DO döngüsünde olduğu gibi
istenirse belli bir şart dahilinde For - Do döngüsünden her hangi bir anda çıkılabilir.

Genel Yazılışı

FOR Döngü Değişkeni = İlk Değer TO Son Değer DO
Begin
............
[Break]
.............
End;

Genel yazılıştaki Döngü Değişkeni kullanılmadan önce tanımlan-
malıdır. FOR deyimine ikinci parametre olarak verilen İlk Değer döngü değişkeninin
alacağı ilk değerdir. Son Değer ise döngü değişkeninin alabileceği son değerdir. Eğer
İlk Değer Son Değerden daha büyük ise , TO yerine DOWNTO deyimi kullanılmalıdır.

FOR X = 1 TO 10 DO
Begin
............
End;

Bu döngü örneğinde X döngü değişkeni , 1 döngü değişkeninin
başlangıç değeri ve 10 döngü değişkeninin son değeridir. Bu döngüde FOR - DO deyi-
minden sonraki ilk blok içindeki progarm satırları 10 kez arka arkaya işletilir. Break
deyimi WHILE - DO deyiminde olduğu gibi programın akışını blok F0R - Do ile kontrol
edilen bloğun sonuna aktarır.





6.BÖLÜM

VERİ TABANI
UYGULAMALARI


Veri Tabanı Dosyaları Üzerinde
İşlem Yapmak


Bu bölümde Database Desktop veya dBASE, Paradox gibi veri tabanı programları ile hazırlanmış olunan veri tabanı dosyaları üzerinde Delphi projeleri dahilinde nasıl işlem yapıldığı konusunda bilgi vereceğiz. Bu işlemi daha önce hazırladığım ADRES.DBF basit veri tabanı dosyası üzerinde anlatacağım. Bunun için önce File mönüsünden New Project komutunu vererek yalnızca bir Form içeren yeni bir proje hazırladım.

Bu amaçla ilk yapılacak işlem, Component Palette araç çubuğundan Data Access sayfasını açmaktır. Bu amaçla Component Palette araç çubuğundan Data Access sekmesi seçilmelidir.

Daha önceden hazırlanmış bir veri tabanı dosyası üzerinde çalışmak için ilk gerek duyulan denetim Table (1)'dır. Table düğmesi seçili durumdayken form üzerinde tıklama yaparak Table nesnesini forma ekledim. Bunu aşağıda verilen ekran görüntüsünde görebilirsiniz.

Table nesnemizi formumuza bu şekilde ekledikten sonra Object Inspector penceresinden bu nesnenin özelliklerinde gerekli olan değişiklikler yapılmalıdır.
Delphi, forma eklenen ilk Table nesnesine varsayım olarak "Table1" adını verir. Bu isim Name özelliğinden istenildiği (değişken isimlendirme kurallarına uyulmak şartıyla) gibi değiştirilebilir. Table nesnemize hangi veri tabanı dosyasıyla çalışmak istediğimizi bildirmek zorundayız. İlk olarak Database Name özelliğine bir Alias seçimi yapılır. Veri tabanı dosyamızı hangi Alias'a dayandırarak hazırladıysak o seçilir. Buraya direkt olarak Veri tabanı dosyamızın bulunduğu yol da yazılabilir(Örn: c:\Delphi\DBler). Bizim veri tabanımız "c:\DBproje" dizininde bulunduğu için Database Name özelliğini aşağıdaki gibi ayarladık. Şimdi de veri tabanı dosyamızı Table nesnesine tanıtalım. Bunun için TableName özelliğinde liste kutusundan daha önce hazırladığımız veri tabanımızı seçmeliyiz(ilaclar.db).

Daha sonra Table nesnesinin Active özelliği True yapılmalıdır. Bu işlemle Table nesnesi veri tabanımızı açar. Bu işlemi programımız çalışma anında da yapabilir.


Veri tabanı dosyamızdaki alanlara Table kontrolüyle kolayca erişebilmek için "Fields editor..." komutundan faydalanalım. Bunun için Table nesnemizi seçili duruma getirdikten faremizin sağ tuşuna basalım. Karşımıza çıkan mönüden "Fields editor..." komutunu seçelim.

Karşımıza çıkan pencereden "Add..." butonuna basalım. Karşımıza Add Fields penceresi çıkacak ve bu pencerenin içinde veri tabanımızda bulunan alanların isimleri yer alacak. Hepsini seçtikten sonra OK düğmesine bastıktan sonra bütün alanlar bir kontrol olarak tanımlanmış olacak (Örn: Table1.IlacinKodu:TStringField). Karşımızdaki pencereden Define butonuyla alanların türleri tanımlanmalıdır. Böylece aktif kayıdın "Ilacın Kodu" alanındaki bilgi Table1.IlacinKodu nesnesinin Text özelliğinde saklanır. Veri dosyasındaki alanlara ulaşmanın diğer bir yolu da Table nesnesinin bir özelliği olan FieldByName'dir. "Ilac Adi" alanına ulaşmak için Table1.FieldByName('Ilac Adi').AsString özelliği kullanılır.

Delphi'de veri tabanı dosyalarında pratik bir biçimde işlem yapmak için Table nesnesi yeterli olmuyor. Table kontrolüne yardımcı olması için formumuza DataSource kontrolünü de ilave etmeliyiz. Table nesnemiz ile dosyamıza erişim sağlanırken DataSource nesnesinden veri tabanı dosyamızın içeriği ekrana getirilirken, kayıtlar arasında dolaşılırken yararlanılır. Table kontrolünü formumuza eklediğimiz gibi DataSource kontrolünü de aynı şekilde ekleyelim.


Daha sonra Object Inspector penceresinden gerekli değişiklikler yapılır. DataSource nesnesi ile ilgili ilk yapılması gereken DataSet özelliğine üzerinde çalışılan forma daha önce eklenmiş Table (veya Query) nesnelerinden birisini tanıtmaktır. Bunun için DataSet özelliğinin yanındaki liste kutusundan istenilen nesne seçilir(Örn: Table1).

Table ve DataSource nesneleri aracılığı ile açılan veri tabanı dosyasındaki kayıtlara kullanıcının erişim sağlayabilmesi veya veri tabanı dosyasındaki kayıtların içeriğini formun üzerinde görüntüleyebilmek için Data Controls sekmesindeki DBEdit nesnesinden yararlanacağız.

DBEdit nesnesini formumuza ekliyelim. Veri tabanı dosyamızdaki her alan için bir DBEdit nesnesi eklemeliyiz(eğer görüntülenmesini & değiştirilmesini istiyorsak). Formumuza eklenen ilk DBEdit nesnesinin adı Delphi tarafından DBEdit1 olarak verilir ve istenirse bu değiştirilebilir.
Sıra geldi bu nesne ile veri tabanımızdaki alanlarla irtibatı sağlamaya. Bunun için DBEdit nesnesinin DataSource özelliğini (birden çok veri tabanı dosyası kullanılıyor ve birden çok DataSource nesnesi varsa)hangi veri tabanındaki alanları ifade etmesi isteniyorsa o dosyaya ait DataSource nesnesi belirtilmelidir(Örn: DataSource1). Sıra geldi nesnemizin veri tabanımızın hangi alanını ifade edeceğinin ayarlanmasına. Bunun için Object Inspector penceresinde (DBEdit nesnesi seçili durumda iken) DataField özelliğinin yanındaki liste kutusundan istenilen alan seçilmelidir(Örn:Ilacin Kodu). Bundan sonra bu nesne program çalışırken table nesnemiz hangi kayıt üzerinde ise o kayıdın seçtiğimiz alanını görüntüler.

Aynı işlemleri veri tabanımızdaki diğer alanlar için yapalım.

Veri tabanı dosyamızdaki kayıtlar üzerinde dolaşmak,değiştirmek,silmek ve yeni kayıt eklemek gibi işlemleri yapmamızı kolaylaştıran adeta kayıtlar üzerinde sörf yaptıran nesnemiz DBNavigator'ü Data Controls sekmesinde bulabilirsiniz.

Bu nesneyi formumuza ekledikten sonra Object Inspector penceresinden bu nesneye ait DataSource özelliği diğer nesneler gibi (DataSource1 olarak ) ayarlanmalıdır.


Bu nesne ile aşağıda ki işlemler yapılabilir:

İlk kayıda gitmek, Son kayıda gitmek, Bir önceki kayıda gitmek, Bir sonraki kayıda gitmek, Kayıt eklemek, Kayıt silmek, Kayıt değiştirme.


DBNavigator nesnesinin birtakım özelliklerine değinelim:


ConfirmDelete özelliği normalde True değerini alır.Bu durumda bu nesne ile silme işlemi gerçekleştirilebilir. False olması durumunda silme işlemine izin vermez.


ShowHint özelliği True yapıldıktan sonra programda çalışma anında fare imleci DBNavigator nesnesinin üzerinde iken hangi buton üzerinde ise o butona ait işlemin İngilizcisi ipucu olarak gösterilir. Kendimiz Türkçe (veya başka dilde) ipuçları yazabiliriz. Bunun için Object Inspector penceresinden DBNavigator nesnesi seçili durumda iken Hints özelliği yanındaki butonuna bastıktan sonra karşımıza çıkan String Editör penceresinde her satıra DBNavigator'ün soldan sağa doğru butonlara ait ipuçlarını yazabiliriz.

İstenilen butonlar görünmez hale getirilebilir. Örneğin silme butonunun gerekli olmadığı yerlerde görünmemesi için VisibleButtons özelliğine çift tıkladıktan sonra karşımıza çıkan ayrıntılardan nbDelete özelliği False yapılmalı. Edit butonunun görünmez olması için ayrıntılardan nbEdit özelliği False yapılmalı.

Sıra geldi Data Controls sekmesinde DBGrid nesnesine. Sadece bu nesne ile veri tabanı dosyamıza ait alanların tümünü ve tüm kayıtları görmek, değiştirmek, silmek, eklemek mümkün olabiliyor. DBGrid nesnesini formumuza yerleştirdikten sonra DataSource özelliği ayarlanmalıdır(Örn: DataSource1). Program çalıştırıldıktan sonra bu nesne aracılığıyla yukarıda bahsettiğimiz bütün işlemler gerçekleştirilebilir. Bu nesnenin Allign özelliği alClient yapılırsa bu nesnemiz tüm formu kaplayacaktır. Formumuzun boyutları değiştirilse bile nesnemiz de aynı boyuta kendisini ayarlayacaktır. Program çalışırken DBGrid nesnesi ile kayıt eklemek için "INSERT" tuşuna basılır. Üzerinde bulunulan kayıdın silinmesi için "DELETE" tuşuna basılır


7.BÖLÜM
ÖRNEK BİR PROGRAM

Birim Dönüştürme Programı

program donustur;

uses
unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Spin;

type
TAnaForm = class(TForm)
Giris: TEdit;
Donustur: TButton;
GirisEtiket: TLabel;
Button1: TButton;
GirisGrubu: TRadioGroup;
DonusumGrubu: TRadioGroup;
Ondalik: TSpinEdit;
Label1: TLabel;
Kopya: TButton;
Sonuc: TEdit;
CikisEtiket: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure DonusturClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure GirisGrubuClick(Sender: TObject);
procedure DonusumGrubuClick(Sender: TObject);
procedure OndalikChange(Sender: TObject);
procedure KopyaClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
AnaForm: TAnaForm;
Katsayi: Array [1..3,1..3] of Real;
implementation

{$R *.DFM}

procedure TAnaForm.DonusturClick(Sender: TObject);
var
Girdi, Cikti: Real;
Code: Integer;
Yazi: string;
begin
Val(Giris.Text, Girdi, Code);
Cikti := Girdi * Katsayi[GirisGrubu.ItemIndex+1,DonusumGrubu.ItemIndex+1];
Str(Cikti:0:Ondalik.Value,Yazi);
Sonuc.Text := Yazi;
CikisEtiket.Caption := DonusumGrubu.Items[DonusumGrubu.ItemIndex];
end;


procedure TAnaForm.Button1Click(Sender: TObject);
begin
Application.Terminate;
end;

procedure TAnaForm.GirisGrubuClick(Sender: TObject);
begin
GirisEtiket.Caption := GirisGrubu.Items[GirisGrubu.ItemIndex] + ' =';
DonusturClick(Self);
end;

procedure TAnaForm.DonusumGrubuClick(Sender: TObject);
begin
DonusturClick(Self);
end;

procedure TAnaForm.OndalikChange(Sender: TObject);
begin
DonusturClick(Self);
end;

procedure TAnaForm.KopyaClick(Sender: TObject);
begin
With Sonuc as TEdit do
begin
SelectAll;
CopyToClipboard;
end;
Giris.SetFocus;
end;

initialization
Katsayi[1, 1] := 1;
Katsayi[1, 2] := 2.5714;
Katsayi[1, 3] := 1440.00;
Katsayi[2, 1] := 0.3889;
Katsayi[2, 2] := 1;
Katsayi[2, 3] := 3702.857;
Katsayi[3, 1] := 0.0007;
Katsayi[3, 2] := 0.0018;
Katsayi[3, 3] := 1;
end.

Değerlendirmeler

0 (0)

0 Kullanıcı

Üye Ol veya Giriş Yap

Bu içeriğe yorum atmak istiyorsanız hemen üye olun veya giriş yapın.

Discord ile Bağlan
Twitch ile Bağlan
Steam ile Bağlan
Google ile Bağlan
Yorumlar (1)
Xearth
Xearth 2010-03-10 22:50

[i]Çok yararlı bir döküman teşekkür ederim kanglaoo...[/i]

Sadece kayıtlı kullanıcılar yeni yorum yapabilir.


Ultima-Strike Discord
Benzer Sayfalar
  • Genis bir baslangıc stone pvp ler icin

    2009-07-24 13:46

  • (Video) Harita Yapımı Başlangıç Tutorial

    2008-10-18 03:33

  • Pvp Serveri Icin Yazılmıs Baslangıc Stone

    2007-06-16 21:21



  • Son Forumlar
  • Sayfalar
  • Administraktor
    Üyeliği 15 yıl ve üzerinde olanlar.

    Ultima Online 3 saat önce

  • Nefrelius
    Alcor UO Reborn

    Sunucular 5 gün önce

  • System_Error
    Client Patlaması

    Ultima Online 1 hafta önce

  • georgm15
    CS2 turnuvaları tartışmalı başladı.

    Counter-Strike 2 1 hafta önce

  • georgm15
    Counter-Strike 1.6 İndir - Tek Link Hızlı-

    Counter-Strike 1 hafta önce

  • Cihangir algın
    Razor Kullanımı

    RunUo Scripting 3 hafta önce

  • Lucretius
    Rampage Pvp

    Sunucular 4 hafta önce

  • Lucretius
    Nephilim Pvp

    Sunucular 4 hafta önce

  • redi4817
    NightUO

    Sunucular 4 hafta önce

  • Cengiz MERDİT
    Sphere 56T Nightly Sürümü

    Ultima Online 1 ay önce

  • aygun
    Esgaroth UO

    Sunucular 1 ay önce

  • deonist
    Alysa Pvp ( Aktif ! )

    Sunucular 1 ay önce

  • mthN
    Nebula Uo gerçekleri

    Ultima Online 2 ay önce

  • buffa
    Kullanılması Gereken Rate Ayarları

    Counter-Strike 2 ay önce

  • Lucretius
    Aktif Satılık Server !

    Sunucular 2 ay önce

  • Skill seçimlerinizi planlamak artık çok daha kolay

    Ultima Online Karakter Yapılandırma Aracı Bölümü Açıldı!

    2024-10-31 22:47

  • Ultima Online topluluğu, ClassicUO'nun sadece web client olarak kullanılabileceğinin açıklanmasının ardından tepkili.

    Resmi UO, Oyuncuları İkiye Böldü: Web Client Yeterli mi?

    2024-10-14 17:45

  • Ultima Online, ClassicUO ile resmi işbirliği yapıyor! Performans iyileştirmeleri, geniş oyun penceresi ve daha fazlası geliyor.

    Ultima Online, ClassicUO ile Resmi İşbirliğine Gidiyor

    2024-09-26 14:21

  • Centred#

    2024-07-08 22:50

  • CentrED+ 7.9

    2024-07-08 22:34

  • Distance(uzaklık) Sorgusu Hakkında

    2024-06-19 22:05

  • UoFiddler

    2024-06-01 02:19

  • UoFiddler ile Map Kopyalama

    2024-05-31 21:17

Menü
  • ANASAYFA
  • FORUM
  • DOKÜMAN
  • İNDİR
  • İLETİŞİM
  • Bağlantılar
  • CS 1.6 indir
  • CS 1.6 Türkçe
  • CS 1.6 Bot
  • CS 1.6 CFG
  • CS 1.6 Rate Ayarları
  • UO Server
  • Ghost Mouse indir
  • FPS Nedir?
  • Ultima Online PVP Server
  • Makroman
  • UO Karakter Yapılandırma
    © 2004 - 2025 Ultima-Strike. Her hakkı saklıdır.