Önsöz
MS-DOS'un sıkıcı siyah-beyaz kıyafetlerini çıkartıp, o cıvıl cıvıl Windows kullanıcı
arayüzünü giymesiyle Pascal'da kendine yeni bir imaj arayışına girişti.
Pascal 7.0 ile gelen Object Pascal ve TWin kütüphanesi bu yeni pencereler
dünyasında kendisine bir yer aradıysada Pascal bu yeni dünyadaki asıl patlamasını
Delphi 1.0 ile gerçekleştirdi, bunu 32 bitlik sürümü Delphi 2.0 izledi ve daha
sonra Windows 95/NT sürümü olan 3.0 ile bu yerini iyice sağlamlaştırdı.
Şu anda piyasada en son olarak 4.0 sürümü bulunmakta. Bu alandaki en ciddi
rakiplerinden biri olan Visual Basic'e göre piyasada yüzünü göstermekte biraz
geç kalmasına rağmen bir çırpıda rakibinin önüne geçip bir çok uygulama geliştiricinin
tercihi haline gelmeyi bildi.
Terminoloji
Delphi ders notlarının daha iyi anlaşılabilmesi için ortak bir dil kullanmamız
gerektiğine inanıyoruz bu yüzden ders notlarının anlatılmasında kullanılacak
bazı terimlerin anlamlarını yeri geldikçe bu sayfa altında vermeye çalışacağız.
Class
Nesneye Dayalı (Object Oriented) programlamada belli bir işlevi yerine getirmesi
için kurulmuş, fonksiyonlardan ve verilerden oluşan yapıya class(sınıf) denir.
Property
Bir class'ın belli özelliklerinin sakladığı ve kullanıcı tarafından değiştirilmesine
veya kontrol edilmesine izin verilen değişkene property(özellik) denir.
Event
Programın çalışması sırasında dışarıdan girişlere göre değeri değişen özel
property'lere event(olay) denir.
Method
Bir class üzerinde çalışan procedure ve fonksiyonlara method(metod) denir.
Procedure ve fonksiyonlarla ilgili daha detaylı bilgi için Pascal ayfasına
bakabilirsiniz.
Component
Görsel bir programlama dilinde belli bir işlemi yapmak için tasarlanmış
property, event ve methodlar içeren küçük program parçasına component(bileşen) denir.
Form
Görsel bir programlama dilinde program yazarken kullandığımız her türlü komponenti,
üzerine yerleştirebildiğimiz ve programımızın kullanıcı ara yüzünü oluşturduğumuz
pencerelere form denir.
Delphi Sürümleri
Delphi piyasaya üç sürüm halinde sunulmaktadır:
Standart , Profesyonel ve Client/Server Suite.
Borland (yeni adıyla Inprise) bu sürüm çeşitlerini her ürününde kullanmaktadır.
Standart Sürüm:
Bu sürüm Delphi ile yeni tanışanları hedefliyor. Bu sürüm Delphi ile
Windows programları yazmak için gereken tüm özelliklere sahip.Standart sürümü
kullanıyorsanız InstallShield, Database Explorer, Visual Query Builder gibi
araçları kullanamazsınız.
Profesyonel Sürüm:
Bu sürüm profesyonel programcıları hedefliyor. Standart sürümün özelliklerinin
yanında aşağıdaki özellikleri de içeriyor (Delphi 3 için):
1. VCL'nin kaynak kodu
2. InstallShield Express
3. Database Explorer
4. TChart bileşeni
5. ActiveX ve ActiveForm geliştirme desteği
6. Internet Solutions Pack
7. ODBC Bağlantısı
8. Open Tools API'si
Client/Server Suite:
Bu sürüm client/server (istemci/sunucu) uygulamaları geliştiren programcıları hedefliyor. Bu sürüm Profesyonel sürümün tüm özelliklerinin yanında aşağıdaki özellikleri de içeriyor.
1. Decision Cube CrossTab bileşeni
2. Çok Geniş bir Web hizmet birimi desteği
3. Doğal Client/Server BDE bağlantısı için SQL Links
4. BDE Driver Development Kit
5. SQL Monitor
6. Visual Query Builder
7. CASE Tool Expert
8. Data Pump Expert
Delphi 5 Enterprise
Delphi 5 Enterprise internet ve dağıtık hesaplama için yüksek üretkenlik çözümüdür. Delphi'nin InternetExpress'i, e-ticareti destekleyen, esnek, yayılabilen sistemleri oluşturmak için HTML 4 ve XML'i kullanan Web Client Page Wizard'ı, dağıtık HTML uygulamaları oluşturmak için MIDAS PageProducer ve WebBroker'ı içerir. ADOExpress ile her türlü bilgiye hızlı erişim kazanırsınız ve TeamSource ile bütün geliştirme takımınızın üretkenliğini arttırabilirsiniz. CORBA, COM ve MTS gibi bütün dağıtık hesaplama standartlarını kullanan MIDAS'ı kullanarak internet uygulamalarınızı arttırabilirsiniz. 200'ün üstünde tekrar kullanılabilen bileşenleri ve kaynağıyla birlikte Visual Component Library kullanan güvenilir uygulamaları oluşturabilir, hata ayıklayabilir ve programlarınızı yayabilirsiniz. Kilit veritabanı sistemleri oluşturmak için Interbase Express'i kullanabilirsiniz. Ayrıca bu paket InterBase, MS SQL, Informix, Sybase ve Oracle için Native SQL Link'leri içermektedir.
Delphi 5 Professional
Delphi 5 Professional, web ve veritabanı uygulamaları oluşturmak için en hızlı, en üretken Windows geliştirme aracıdır. Delphi 5 Professional , profesyonel IDE, WebBroker, Native Internet Components, InterBase Express ve güvenilir hata ayıklama araçlarını içerir. Project Browser, Code Explorer ve Data Module Designer görüntüleriyle kodunuzu anlayabilir ve araştırabilirsiniz.İşiniz için bileşenleri Frame'ler ile görsel olarak oluşturabilirsiniz. MS Office otomasyon kontrolcülerinin tamamını içeren COM nesne ve sunucularını oluşturup yeniden kullanın. Delphi 150 tekrar kullanılabilir bileşeni ile üretkenliği arttıtır ve bütün uygulama evresini yönetir. Güvenilir uygulamaları pazara daha hızlı getirmek için dünyanın en hızlı 32-bit derleyicisini ve Advanced Project Manager' i kullanır.
Delphi 5 Standard
Delphi 5 Standard , sürükle ve bırak görsel programlama, örnekler ve 85'in üstündeki tekrar kullanılabilir bileşenli Visual Component Library ile Windows altında uygulama geliştirmeyi kolaylaştırır. Kolay ve çabucak Word, Excel, PowerPoint ve Outlook için MS Office bileşenleri gibi COM nesnelerini otomatikleştiren Windows uygulamaları oluşturabilir, hata ayıklayabilir ve yayabilirsiniz. Kodu sizin için tamamlayan CodeInsight Wizard'ı kullanabilir, Tek bir satır kod yazmadan tekrar kullanılabilir bileşenleri oluşturmak için Componenet Template'leri kullanabilirsiniz. Artı Microsoft Windows 95 ve Windows NT, Win32 API, COM, ActiveX ve OLE Automation'ı içeren endüstri standartları için tam destek hakkı kazanın. Geliştirme ortamınızı tamamen kişiselleştirmek için Dockable Toolbars ve Dockable Windows'u bu pakette kullanabilirsiniz.
Delphi 5 Yenilikler
XML: Delphi 5, veri dağıtımını ve değişimini kolaylaştırır!
Verilerinizi web'e çabucak ulaştıran yüksek hızlı Internet uygulamaları
geliştirebilirsiniz. Delphi'nin XML veri desteği esnek olduğu için internetteki
e-ticaret'i desteklemek için genişletilebilir sistemleri kurmanızı sağlar.
HTML 4 : Web için nitelikli Dynamic Thin-client
Delphi 5, HTML 4 ve XML kullanan dinamik ultra-thin istemciler kurmanız için
ihtiyacınız olan gücü getiriyor. Bu size nitelikli ve isteklerinize yanıt veren
istemci uygulamalarını Internete hızlı yayma olanağı tanır.
ADO: Bütün bilgi kaynaklarına hızlı erişim.
Delphi 5 e-posta ve dosya sistemleri de dahil olmak üzere her türlü veri
tabanına hızlı erişim sağlar. Microsoft'un ActiveX Veri Nesnesini ve OLEDB
teknolojisini kullanarak son-kullanıcılarınızın daha iyi ticari karar vermeleri
için ihtiyaç duydukları veri evrenine anında erişim kazanabilirsiniz.
Delphi'nin açık veri bileşenlerini kullanarak, kısa zamanda ticari verilerinizi
internette müşterilerinize, son kullanıcılarınıza ve bütün hedef kitlenize
götüren sistemler kurabilirsiniz. ADO son kullanıcınızın istemci işletim
sisteminin standart bir parçası haline geldiğinden, programlarınız kolayca
yayılabilecek.
InterBase Express: Yüksek performanslı sistemler
InterBase Express ile, VAR'lar, SI'lar ve ISV'ler programları, çabuk dağıtılabilen
yüksek performanslı sistemleri inşa edebilirsiniz. Delphi ve InterBase ile,
yüksek üretkenlik, yüksek performanslı geliştirme yapabilirsiniz. Ayrıca yüksek hızlı,
az bakım isteyen, small-footprint ilişkisel veri tabanı birleştirilmiştir.
Interbase Express ile mükemmel gömülü sistemler oluşturmak için artık Borland
Database Engine ile geliştirme ve dağıtma yapmanıza gerek kalmayacak.
TeamSource: Bütün geliştirme takımınıza üretkenlikte cesaret verin
Delphi 5 ile bütün takımınız, birlikte daha iyi ve daha hızlı çalışacak.
TeamSource kaynak kodunuzu yönetim biçiminizde bir devrimdir. TeamSource,
varolan kaynak kodu yönetiminizin ve sürüm motorunuzun üzerinde oluşturulur ve
bunları büyük dağıtık takımlar için kaynak kodu yönetimini basitleştiren
yüksek üretkenlikli iş akışı modeli ile yayar.
Borland Çeviri Takımı: Dünya çapında yeni pazarları keşfedin!
Delphi 5 ile, programlarınız için pazar bütün gezegeni kapsayacak şekilde büyümüştür. Borland Çeviri Takımında programlarınızı yeni dil ve kültürler için hızlı bir şekilde globalleştirmek veya yerelleştirmek için ihtiyacınız olan herşey mevcut. Programlarınızı daha hızlı pazarlayabilmek için aynı anda birden fazla bölge için geliştirebilirsiniz. Delphi, kaynakların tercümesini yönetir ve uluslarası geliştirmenizi ivmelendirmek için çevrilmiş nesnelerin bir örneğini tutar.
MIDAS: Internet uygulamalarınız için ölçülebilirlik.
MIDAS ile Internet tabanlı uygulamaların taleplerini karşılayan sistemler inşa
edebilirsiniz. MIDAS işlem hacminizin ölçüsü programları dağıtmak için Delphi'nin
yüksek üretkenliği üzerine inşa edilmiştir. Son kullanıcı sayısını arttırır.
Çok sayıda web tarayıcısı istemcilerinin , internetteki veya intranet inizdeki
Windows istemcilerinin kolaylıkla üstesinden gelebilecek Internet uygulamalarını
oluşturabilirsiniz.MIDAS, varolan sistemleriniz ile e-ticaret uygulamalarının
birleştirilmesini kolaylaştırmak için CORBA, COM ve MTS gibi bütün dağıtık hesap
standartlarını kullanır. MIDAS'taki birçok yeni özellikten bazıları:
" Mobil ve düşük bant genişliği durumlarında daha fazla kontrol için
Stateless DataBroker
" Programlarınızı firewall'un dışına güvenli bir şekilde taşıyabilmek için
WebConnection bileşenleri
" Geliştirilmiş ölçülebilirlik için sunucu nesne havuzlama
IDE: Geliştirici için yüksek üretkenlik.
Delphi 5 IDE, kodu okuma, yazma ve araştırma işlemini kolaylaştırarak
geliştiricinin üretkenliğini yüksek ölçüde artırır. Kod editörü bir ünite
içinde veya ilişkili üniteler arasında gezinmeyi kolaylaştırır. Proje
yöneticisindeki Sürükle ve Bırak desteği herhangi bir açık projeden veya
Windows Gezgini dosya diyalogundan projeye dosyaları eklemeyi kolaylaştırır.
Proje yöneticisinin çoklu proje desteğini kullanarak, EXE ve DLL dosyaları
gibi birden fazla hedefte kolay derleme yapabilirsiniz. Delphi'nin görsel
form dizayncısı ile hızlı bir şekilde Internet, dağıtık hesap ve Windows
uygulanmalarını görsel olarak bir panelden bileşenleri seçerek oluşturabilirsiniz.
Delphi 5 birçok yeni özellik ve VCL'e artırımlar içerir:
" Geliştirme ortamınızın daha fazla kontrolü için kişiselleştirilebilen
Masaüstü Ayarları
" Editörü çalışma şeklinize göre ayarlayabileceğiniz Editor Key mapping
" Kodunuzu daha iyi anlamak ve VCL'i taramak için proje çapında araştırma
" Programınızda verinin ayrıntılı anlatılabilirlik kazanması için Tree ve
Data Diagram View ile DataModule Dizayncısı
" Proje yöneticisi ve derleyicisi için bütünleşmiş RC Dosyaları
" Uygulamanızın takvimini tutmak için Yapılacaklar listesi
" Programınızın özelliklerini ayarlamak için Denetim Masası
Visual Component Library: Kod tekrar kullanımında son nokta Delphi ile güvenilir ve verimli uygulamalar oluşturmak için nesne tabanlı uygulama gücünü, kendi yararınıza kullanırsınız. Delphi'nin ispatlanmış nesne tabanlı bileşen yapısı ile kendi bileşenlerinizi inşa edin. Delphi 5 (Delphi Enterprise'da) 200'ün üstünde Internet ve Windows uygulamalarınız için pazarlama hızını dramatik arttıran bileşenleri içeren Visual Component Library içerir. Yeni Frame özelliği ile işiniz için görsel olarak bileşenler inşa edeceğinizden üretkenliğiniz artacak. Kaynak koda açık erişim ile VCL' in şıklığını keşfedeceksiniz. (Şimdi Decision Cube bileşenleri ve ek Property Editors için ek kaynak kod içerir). Delphi ile bileşen tabanlı geliştirme, Windows ya da Internet uygulamaları gibi en zor geliştirme görevlerini basitleştirir. Delphi 5 VCL ile ilgili birçok yeni özellik ve artırımlar içerir:
" Karmaşık bileşenler derlemek ve inşa etmek için Frameler
" Uygulamanızla HTML arattırmayı birleştirmek için WebBrowser bileşeni
" Word, Excel ve Outlook gibi Office uygulamaları ile kendi programlarınızı hızlı bir şekilde entegre etmek için MS Office otomasyon bileşenleri kümesi
" Öğrenme ve üretkenliği arttırmak için Property Category'ler
" Özellik seçeneklerini basitleştirmek için Property Editor'ünde Owner Draw desteği
" Windows API üzerinde daha fazla kontrol için Advanced Custom Draw fonksiyonlarına geliştirilmiş destek
Karmaşık projeleri pazara daha hızlı taşımak için gelişmiş hata ayıklama
Delphi ile, en karmaşık projelerde bile hataları bulmak ve ayıklamak daha önce hiç daha basit olmamıştı. Delphi'nin geliştirilmiş hata ayıklayıcısı kodunuzun ne yapacağını anlamanıza ve kontrol etmenize yardımcı olur. Breakpoint'ler ile kodda istediğimniz noktada yoğunlaşabilirsiniz. Şimdi breakpoint'te yapılması gereken işi ayarlayıp breakpoint'leri gruplayarak kodunuzun ilgilendiğiniz bölümlerini çabucak hata ayıklayabilirsiniz. Delphi 5 hata ayıklayıcısı için birçok yeni özellik ve artırımlar içerir:
" Pano ve sürükle ve bırak desteği de dahil olmak üzere, editör ile hata ayıklama pencerelerinin entegrasyonu ve kolay kullanılabilirlik
" Daha hızlı araştırma için Breakpoint ToolTip'leri
" Hata ayıklama işlemi üzerinde daha fazla kontrol için Breakpoint Action'ları
" Birden fazla breakpoint'i daha kolay kontrol için Breakpoint Groups
" DCUlar ve Hata Ayıklama sembol arama yolları ile daha kolay hata ayıklama
" Artırılmış düşük seviyeli hata ayıklama için MMX desteğiyle birlikte FPU görüşü
" Çok-işlem hata ayıklama
" Merkezileşmşt çok-işlemli hata ayıklama için Temporary Process Option'ları
" İşlem sınırlarını geçmek için Çapraz işlem hata ayıklama
" Üretilmiş işlemleri ayıklama
" Çalışan işleme ekleme yapma ve hata ayıklama
Kullanıcı Arayüzü
Borland (Inprise) program yazılan ortamlarını, ürünlerinde IDE diye tanımlar.
IDE:
Integrated Development Environment (Tümleşik Geliştirme Ortamı)
Delphi'de çalışma ortamı Menu Bar, SpeedBar, Component Palette, Form, Object Inspector ve Code Editor arayüzünden oluşur. Çalışma ortamını anlamadan iyi bir program yazılamaz. Bu yüzden IDE'yi iyi anlamak gerekir.
Ana Menü
Tüm windows uygulamalarında olduğu gibi Delphi'de menü programcı için en önemli araçtır. Delphi ana menüsünü kullanarak neler yapacağımıza bir gözatalım.
Delphi Ana Menüsü kullandığınız sürüme göre farklılıklar gösterebilir biz örneğimizde Delphi 3 Client/Server sürümü kullandık.
File
File menüsü altında delphinin en temel işlemleri olan yeni proje yaratma, varolan bir projeyi çağırma, kaydetme veya kapatma bu menüden yapılmakta. Şimdi bu menüyü daha yakından inceleyelim.
New
New seçildiğinde ileride anlatacağımız Yeni Bileşenler (New Items) ekranı gelir.
New Application, New Form, New Data Module
Bunlar sırasıyla yeni bir uygulama, yeni bir form ve yeni bir Veri Kaynağı yaratmak için kullanılırlar.
Save, Save As, Close, Print, Exit
Temel windows uygulamalarında da sıkça kullanılan bu menü komutları Delphi'de benzer şekilde kullanılırlar.
Save Project As
Projeyi başka bir isimle kaydetmek için kullanılır.
Save All, Close All
Bunlar sırasıyla o anda açık olan proje, unit, form, vb. herşeyi kaydetmek veya kapatmak için kullanılırlar.
Use Unit
Bir unit'in başka bir unit'i tanıyabilmesi için o unit'e "uses unit_ismi" şeklinde bir satır ekler.
Add to Project, Remove From Project
Bu menü komutları bir projeye yeni bir unit eklemek veya projeden bir unit çıkartmak için kullanılırlar.
Delphi İçin Buton Efektleri (Web Türü Buton)
Web türü buton yapmanın amacı bildiğiniz gibi delphinin standart buttonları genellikle klasik programlar için kullanılır . Şimdi yapacağımız button kendi çizdiğimiz 3 resimden oluşuyor. Öncelikle 3 adet aynı boyda aynı textli button çizin. 1. Resim ; buttonun Sabit yani Form üzerindeki duruşudur 2. Resim ; Programımız çalışırken mouse ile aynı buttonun üzerine geldiğimize buttonun alacağı şekil olacaktır. 3.Resim ; Programımız çalışırken yaptığımız button tıklanınca alacağı şekildir.
Dikkat ettiyseniz bu taktik HTLM (Web ) için button hazırlanması taktiği ile aynıdır. Şimdi bu taktiği kullanmaya başlayalım . Öncelikle Form üzerine Image kontrolünü ekleyelim ve resim olarak yaptığımız 1. resmi ekleyelim. Şımdi sıra Programımıza değişken tanımlayalım;
SetMouse : boolean;
Değişken tanımlama işimiz bitince Image Mouse Down olayına aşağıdaki kodları yazınız
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SetMouse := true; //Mouse Resmin üzerinde Basık olduğunu anlamamız için
image1.Picture.LoadFromFile('start-3.bmp'); //Mouse Click Durumunda
end;
Daha Sonra image Mouse Move Olayına aşağıdaki kodları yazınız
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
image1.Picture.LoadFromFile('start-2.bmp'); //Mouse Buttonun üzerine gelince buttonun alacağı şekil
if SetMouse then
image1.Picture.LoadFromFile('start-3.bmp'); //Mouse Click Durumunda Buttonun üzerindeki şekil
end;
Mouse button üzerinde click vaziyetinde olup olmadığını değişkene aktarmak için Image Mouse up olayına aşağıdaki kodu yazınız
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
SetMouse := false; //Mouse Click Durumunda Değil
end;
Button Görüntüleri Tamamlandı şimdi Click Yordamını yapalım. Image Click olayına aşağıdaki kodu yazınız .
procedure TForm1.Image1OnClick(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
image1.Picture.LoadFromFile('start-3.jpg');
ShowMessage('Button Tıklandı ');
end;
Buttonla olan işimiz bitti Mouse buttonumuzun üzerinde olmadığı zaman için mouse şeklini yapalım bunun için Form Mouse Move Olayına Aşağıdaki kodları yazınız.
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
image1.Picture.LoadFromFile('start-1.jpg');
end;
Ve işlemimiz bitti. Programınızda birden fazla Bu tür button koymanız için Bütün buttonlar için aynı işlemi yapınız. Form Mouse Move olayına her button için yukarıdaki program satırını yazınız.
Örnek:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
image1.Picture.LoadFromFile('Connect-1.jpg');
image2.Picture.LoadFromFile('DeConnect-1.jpg');
image3.Picture.LoadFromFile('Atack-1.jpg');
image4.Picture.LoadFromFile('Exit-1.jpg');
end;
şeklinde yapınız .
Bildiğiniz gibi Web' de bu taktiği kullanmamız için Button için yaptığımız resimlerin HTLM de belirtilen Dizinde olması gerekir .Yani Bizim yukarıda yaptığımız olayda resim dosyalarının yerini belirtmememizin amacı resim Button Resim Dosyalarının Program ile aynı dizinde olmasıdır. Bu yüzden sorunun ne olduğunu anladınız galiba yani program bu açıktan dolayı kullanıcı tarıfından değiştirilebilir. Winamp MP3 çalıcıyı bilirsiniz . Winamp SKIN'nin ne olduğunu da biliyorsunuz sanırım , Yani demek istediğim Winamp SKIN'de de bu taktik kullanılmıştır .
Aslında bu sorun değil , çünkü bu olayı IMAGE LIST Kontrolü de yapar. IMAGE LIST bir Olay için kullanılan birden fazla resim için kullanılan resim dosyaları olmadan programın bağımsız çalışması için kullanılır. IMAGE LIST Delphinin Win32 sekmesinde bulunur . Gif taktiğine benzer bir taktikle çalışır, biraz incelerseniz kolaylıkla kullanabilirsiniz. Bu arada Delphinin Additional sekmesinde bulunan BitBTN kontrolüyle de buna benzer ama kolay Button kullanabilirsiniz.
Delphiye Yeni Bir Bileşen
Delphi'ye yeni bir bileşen (component) ilave etmek için; eğer ilk kez ilave ediyorsak; Component | Install Component menüsünü kullanabiliriz. Bu işlem yapılıp onay verildikten sonra bileşen Delphi'ye derlenecek ve Dclusr30.dpk ismi ve "Delphi User Components" takma adı ile yeni component'lerinizi ilave edebilmeniz için bir component paketi oluşturulacaktır. Bundan sonra yeni bir component ilave etmek Component | Install Packages menü adımından yapılmalıdır. Bu adımı takip ettiğimizde karşımıza Delphi üzerinde bulunan component paketleri listelenecektir. Bu kısımda takma adı "Delphi User Components" yazan paketi işaretleyip Edit tuşuna basmalısınız. Çıkan pencerede "Compile, Add, Remove, Options, Install, Update" gibi button'lar göreceksiniz. Bu button'lardan "Add" button'u yeni bir component'i ilave edeceğimiz manasını taşır. Component'i ilave ettikten sonra Delphi'ye tanıtabilmemiz için Compile button'una basmamız gerekir. Delphi tam bu aşamada component'in "Register" procedure'ünün altında bulunan "RegisterComponents" in içindeki palet adını alarak component'inizi o sayfanın altına koyar. Ayrıca Dclusr30.Dpl adlı bir dosyayıda oluşturur. Bu pencerede gördüğümüz Options kısmından pek çok değişiklik yapılabilmektedir. Bunların başyıda "Delphi User Components" olan başlık bilgisi istediğiniz bir ifade ile değiştirilebilir.
Windows API
Windowsda hemen hemen her görsel bileşen bir penceredir ve her pencerenin Windows'un aklında tuttuğu bir tutacağı vardır.Buna programcılık ortamında "Handle" denir. Bu tutacak (Handle) vasıtası ile görsel olan tüm kontrollere erişebilirsiniz ve onları istediğiniz gibi kontrol edebilirsiniz. Esas problem bu penceresel denetimin tutacağını (handle) nasıl bulacağımızdadır. Bunun için Windows API'nin içinde FindWindow ve FindWindowEx adlı fonksiyonlar mevcuttur. Bu fonksiyonlar herhangi bir pencereye başlığı (caption) yada sınıf adı ile erişip geri dönüşte de pencere tutacağını döndürürler.Bu sayede penceresel denetimlere istenilen yaptırılabilir. Bazı penceresel denetimlere sınıf adı ile erişmek gerekir.
Çünki bazılarının başlık bilgileri mevcut değildir.Örneğin TaskBar için bir başlık bilgisi yoktur. Öyleyse TaskBar ve onun gibi başlık bilgisi olmayan penceresel denetimlere nasıl erişeceğiz. Bunun için benim sizlere tavsiyem Borland Delphi ile gelen WinSight programını kullanmanızdır. Bu program vasıtası ile Windows altında o anda çalışan programların tutacaklarını, sınıf adlarını, çocuk pencerelerinin ad ve tutacakları gibi gerekli bilgileri elde edebilirsiniz.
Windows mesajların gelip gittiği bir işletim sistemidir. Şimdi mesaj kavramını biraz açıklamak gerekir. Mesaj herhangi bir programın, görsel yada görsel olmayan tüm Windows kontrollerinin ne yapması gerektiğini yada ne yaptığını anlamamızı sağlayan bir yapıdır.
Windows bir mesajlar hiyerarşisinden oluşmuştur. Windows'ta olup biten herşeyin bir mesajı vardır. Örneğin bir button'un üzerine gelmek, onun üzerinde mouse ile dolaşmak, sağ kliklemek, sol kliklemek, aktif pencereyi değiştirmek, herhangi bir tuşa basmak, herhangi bir tuşu bırakmak bunların hepsi aktif pencereye dolayısıyla İşletim sistemine gönderilen mesajlardır.
Örneğin herhangi bir pencere üzerinde bir tuşa basarsanız Windows hemen bir Wm_Keydown, Wm_Char vb. mesajları uygulama penceresine gönderecektir. Yani bir mesaj oluşturacaktır. Bu mesaja bağlı bir kodunuz mevcut ise o olay oluştuktan (yani mesaj gönderildikten) sonra var olan kod çalıştırılacaktır. Windows'un API yardımında "Wm_" kelimesi arattığınızda mesajlar hakkında daha detaılı bilgi bulabilme imkanına sahip olursunuz.
Bazı durumlarda Windows'u mesaj konusunda zorlamak gerekir. Gerçekte olmayan bir olayı Windows'a olmuş olarak nasıl gösterebiliriz...?
Örneğin yaptığımız bir programın olay yöneticilerinden bir tanesinin tuşa basma olayına yönlendiğini düşünelim. Yani programımızın aktif formunun üzerinde klavye'nin herhangi bir tuşuna basılınca herhangi bir olayın gerçekleşeceğini düşünelim. Bu gibi bir durum sözkonusu iken başka bir uygulama aktif durumdayken acaba bu isteğimizi nasıl gerçekleştireceğiz..?
Yine bu iş için Windows'un API fonksiyonlarından iki tanesini anlatmak isterim. Bunlardan birincisi SendMessage, ikincisi PostMessage fonksiyonlarıdır. Bu fonksiyonlar Windows ortamına harici mesajlar gönderebilmenizi sağlar.
SendMessage fonksiyonu ile Windows ortamına gönderilen mesajlar "Message queue" adı verilen mesaj kuyruğunun en sonuna atılır ve en üstteki mesajdan en alttakine doğru işletim sistemince sıra ile işlenir. Bu fonksiyon vasıtası ile gönderilen mesajların aktivasyonunu görmek biraz geç olabilir ama daha sağlıklıdır.
PostMessage fonksiyonu ise Windows Mesaj kuyruğunun en başına yerleşir. Yani mesaj gönderilir gönderilmez aktif hale geçer ve etkisini kısa bir zaman içinde görebilirsiniz.
Şimdi kısa bir örnek verelim..
1. Eğer winsight programınız var ise onu açın.
2. Windows'un Calculator (Hesap makinası) programını çalıştırın.
3. Winsight programında Hesap mkinasını bulunca onun sol tarafında sınıf adı olarak "sciCalc" göreceksiniz.
4. Şimdi WinSight programını kapatın. (Zira hafızada çok yer kaplar).
5. Şimdi hesap makinasının pencere tutacağını almamız gerekir. (Sınıf adını bildiğimiz için bu çok kolay..)
6. Bunun için H:=FindWindow(PChar('SciCalc'),Nil); yazmak yeterlidir. (Burada H, HWND tipinde bir değişkendir.)
7. Bunu bulduktan sonra bu pencereye elimizde var olan tutacağı vasıtası ile istenilen mesaj gönderilebilir. Örneğin tuşa basma olayı, şöyleki programımızın OnKeyDown olay yöneticisinde PostMessage(H,WM_Keydown,Key,0); şeklinde bir kod yazarsak Hesap makinasında basılan tuşların aktive olduğunu göreceksiniz.
TCP/IP Protokolünü Kullanarak Pingleme
Delphi 3 ile TCP/IP kontrolünü kullanmak için Internet sekmesinden TCP/IP kontrolünü ve Standart sekmesinden de Button kontrolünü Form'unuza ekleyin. Daha Sonra Button1Click procedürüne şu komut dizisini yazın:
procedure TForm1.Button1Click(Sender: TObject);
var
LocalName, LocalIp, RemoteIp, RemoteHost:string;
begin
{Değişkenlerimize TCP1 Kontrolünden Datalar Aktarılıyor}
LocalName := TCP1.LocalHostName;
LocalIp := TCP1.LocalIP ;
RemoteIp := TCP1.RemoteHostIP ;
RemoteHost:= TCP1.RemoteHost ;
{Sıra Geldi Kullanıcıya Aktarmaya}
Canvas.TextOut(20,20,'Local Name : '+LocalName);
Canvas.TextOut(20,50,'Local Ip : '+LocalIp);
Canvas.TextOut(20,80,'Remote Ip : '+RemoteIp);
Canvas.TextOut(20,120,'Remote Host :'+RemoteHost);
end;
Delphi ile MS Access Database'ine Bağlantı
Delphi'den MS Access Databaseine ulaşabilmek için sırasıyla yapılması gerekenler aşağıdaki gibidir:
1. Windows Control Panel'i açın
2. ODBC simgesini çift tıklayın
3. User DSN tabına gelin ve Add butonuna basın
4. Driver olarak "Microsoft Access Driver (.mdb)" yi seçin ve Finish butonuna basın
5. Data Source Name'i olarak kullanmak istediğiniz bir isim verin. Description kısmına isterseniz database'inizle ilgili bir açıklama yazabilirsiniz.
6. Daha sonra Select butonuna basarak database isminizi verin
7. Advanced butonuna basarak kullanıcı adı ve şifresi tanımlayabilirsiniz (zorunlu değil)
8. OK butonuna basıp ODBC ekranını kapatın
9. Şimdi programınıza bir TDatabase objesi ekleyin
10. AliasName olarak ODBC ayarlarında verdiğiniz (5) Data Source Name'i seçin
11. Database Name olarak istediğiniz bir isim yazın
12. Eğer 7. basamakta bir kullanıcı adı ve şifresi girmediyseniz login ekranın çıkmaması için LoginPrompt seçeneğini false yapın
Eğer database'in bir kullanıcı adı ve şifresi varsa LoginPrompt seçeneğini False yapmanız durumunda database'e ulaşamazsınız.
13. Programınıza bit TTable ekleyin
14. Database Name kısmına TDatabase bileşeninde Database Name kısmına 11. adımda verdiğiniz ismi seçin
15. Programınıza bit TDataSource ekleyin
16. DataSet değeri olarak 13. adımda eklediğiniz TTable adını verin
Artık MS Access Database'ine bağlı bir table'a sahipsiniz.
Delphi Dosya Uzantıları
Delphi tarafından yaratılan dosyaların uzantıları ne anlama geliyor ve bu dosyalar ne işe yarıyor biliyormusunuz? İşte size bu dosya uzantılarının açıklamalı bir listesi.
DPR - Delphi Proje Dosyası.
Programınızı derlediğinizde oluşan çalışabilir programın adı DPR uzantılı proje dosyasının adıyla aynı olur
~DP - Proje dosyasının en son kayıt işleminden önceki yedeği
PAS - Bir unit veya form'a ait kaynak kod dosyası.
~PA - Bir .PAS dosyasının en son kayıt işleminden önceki yedeği.
DFM - PAS uzantılı bir dosyayla aynı ismi taşır ve Bileşen(Component)'lerin binary olarak ilk değerlerini saklar.
DFM uzantılı dosyalar kod ile belirttiğiniz ilk değerleri değilde daha çok tasarım modundayken belirttiğiniz değerleri içerir.
DFM uzantılı dosyaları sıradan bir text editörü ile açarsanız içeriğini göremezsiniz, fakat delphi ile açarsanız içeriğini görebilirsiniz.
~DF - Bir .DFM dosyasının en son kayıt işleminden önceki yedeği.
DCU - Derlenmiş Delpi unit. Kavram olarak OBJ dosyalarıyla aynı işe yarar.
DSM - Sembol bilgi dosyası. Bu dosya delphi projesinin çalışabilir hali oluşturulurken dahili debugger tarafından oluşturulur.
OPT - Proje Seçenekler dosyası. Derleyici(compiler) ve Bağlayıcı(Linker) ayarlarını, hangi formun ana form olduğunu, uygulamanızın hagi icon'u kullandığı gibi bilgileri içerir.
RES - Windows Kaynak dosyası; Delph tarafından derleme esnasında otomatik olarak yaratılır.
EXE - Çalışabilir uygulama dosyası.
Açılış Formu
Programlarınız açılırken bir form getirin. Splash Screen nasıl yapılır?
Project Source'u açın. Eğer bir çok form kullanıyorsanız projenizde Application.CreateForm(TForm2, Form2); satırından sonra diğer formları da aynen form2 gibi yaratın. Ve bir alt satırına ekleyin:
Application.CreateForm(Tform3, Form3); /gibi…
name:form1 /SplashScreen olarak kullanılacak form
name:form2 /Ana formumuz.
View|Project Source (View menüsünden Project Source seçeneğini seçerek açabilirsiniz.)
Daha sonra aşağıdaki kodu programınıza ekleyin.
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1},
Unit2 in 'Unit2.pas' {Form2};
{$R *.RES}
begin
form1:=TForm1.Create(application);
form1.show;
form1.update;
Application.CreateForm(TForm2, Form2);
form1.hide;
form1.Free;
Application.Run;
end.
Dolaştır!
Herhengi bir nesneyi formun üzerinde sürükleyip dolaştırın. Nesnenizi Nasıl taşırsınız:
Örnek:
Name property'si "Button1" olan bir butonu form üzerinde sürükleyelim…
Procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
sc_DragMove=$F012;
begin
ReleaseCapture;
Button1.Perform(WM_SYSCOMMAND, sc_DragMove, 0);
end;
Transparan Form
Herhengi bir nesneyi formun üzerinde sürükleyip dolaştırın. Nesnenizi Nasıl taşırsınız:
Örnek: Name property'si "Button1" olan bir butonu form üzerinde sürükleyelim…
Procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
sc_DragMove=$F012;
begin
ReleaseCapture;
Button1.Perform(WM_SYSCOMMAND, sc_DragMove, 0);
end;
Transparan Form (2)
Diğer transparan form oluşturma stilinden farklı olarak bu kodla transparan formlar üzerinde image nesnelerini de görebiliyorsunuz. Öncelikle formunuzun create eventine şu kodu yazın:
procedure TForm1.FormCreate(Sender: TObject);
begin
Brush.Style:=bsClear;
end;
Daha sonra formunuza bir image nesnesi koyun ve bir resim yerleştirin. Resmin Transpan özelliğini True yapın. Formunuzun BordeStyle özelliğini bsNone yapın, BorderIcon özelliğini [ ] yapın. Programı çalıştırın.
Transparan formlardan ne şekillerde yararlanabileceğinizi düşünün. İlerleyen zamanlarda nerelerde kullanabileceğiniz konusunda bilgiler vereceğiz. İşinize ne kadar çok yararlı olabileceğini göreceksiniz.
Programınızı Uyutun
Programınızı istediğiniz süre kadar Suspend yapabilirsiniz. Nasıl mı?:
Örnek:
Name property'si "Button1" olan bir butona basılınca programımız 10 saniye uyusun….
procedure TForm1.Button1Click (Sender: Tobject);
begin
sleep(10000); //Buradaki 10000 değeri milisecond olarak programın suspend olacığı zaman
end;
Windows Api' leri İle Dosya Kopyalama
Bilindiği üzere eski pascal'cılar hemen bir dosya mantığı kullanarak dosya kopyalama yoluna girerler gayette güzel olur ama biraz daha derine inmek gerekirse yani kullanıcı tarafından açık olan bir dosyayı kopyalamak istenirse eğer aşağıdaki (Klasik Pascal Kopya) kodu bir işe yaramaz bura da Windows' un Api 'lerine ihtiyaç duyarız.
Birinci Yol
Kalıp :
BOOL CopyFile(
LPCTSTR lpExistingFileName, // Kaynak Dosya
LPCTSTR lpNewFileName, //Hedef Dosya
BOOL bFailIfExists // Dosyanın Var olup Olmadığı ve ne yapması Gerektiği True/False );
Ör :
Result:=CopyFile(PChar(SrcTableName),PChar(DestName),True);
Bu Kopyalama işlemi Çok hızlı olup Dosyanın aktif veya pasif olması önemli değil kopyalar.
İkinci Yol
Bu işlem Windows'un standart Kopya işlemini yapar.
SehellApi Dosyasında Detaylı bir şekilde görebilirsiniz.
Kalıp :
TSHFileOpStructW = packed record
Wnd: HWND; //Aktif Window Handle
wFunc: UINT; // Yapılacak İşlem Koya,Silme vs..
pFrom: PWideChar; // Kaynak Dosya
pTo: PWideChar; // Hedef Dosya
fFlags: FILEOP_FLAGS; // Default 0
fAnyOperationsAborted: BOOL; // Olayı İptal Etmek yada Etmemek
hNameMappings: Pointer;
lpszProgressTitle: PWideChar; //Pencere Başlığı
end;
Ör :
Var FO : TSHFileOpStruct;
Aborted : Boolean;
With Fo Do
Begin
Wnd:=Handle;
WFunc:=FO_COPY;
PFrom:=pchar(St1.Cells[0,F]);
pTo:=pchar(St1.Cells[1,F]);
FFlags:=0;
fAnyOperationsAborted:=Aborted;
End;
try
SHFileOperation(FO);
finally
end;
Klasik Pascal Dosya Kopyalaması
AssignFile(FromF, OpenDialog1.FileName);
Reset(FromF, 1); { Record size = 1 }
if SaveDialog1.Execute then { Display Save dialog box}
begin
AssignFile(ToF, SaveDialog1.FileName); { Open output file }
Rewrite(ToF, 1); { Record size = 1 }
Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
+ ' bytes...');
repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
BlockWrite(ToF, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten NumRead);
CloseFile(FromF);
CloseFile(ToF);
end;
end;
Açık Windows Uygulamalarının Gösterilmesi
Burada EnumWindows API fonksiyonuyla bir window handle ve pointer parametreleri çağrılarak gizli ve görünür uygulamalar listelenir.
//AnaForm üzerine bir ListBox1 ve Button1 ekleyin
//implementation {$R *.DFM} altyna a?a?ydaki fonksiyonu yaz
function EnumWindowsProc(Wnd : HWnd;Form : TForm1) : Boolean;
Export; {$ifdef Win32} StdCall; {$endif}
var
Buffer : Array[0..99] of char;
begin
GetWindowText(Wnd,Buffer,100);
if StrLen(Buffer)
<> 0 then
Form1.ListBox1.Items.Add(StrPas(Buffer));
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
//Tüm gizli ve görünür uygulamalary listele
EnumWindows(@EnumWindowsProc,LongInt(Self));
end;
Delphide Yazılan Kodla Exe Çalıştırma
Aşağıdaki örnek kod verilen web sitesini Internet Explorer' ı çalıştırarak açar.
procedure TForm1.Button1Click(Sender: TObject);
begin
winexec('C:\Program Files\Internet Explorer\iexplore.exe wwww.programlama.com',SW_MAXIMIZE);
end;
Enter Tuşu Kullanımı
Windows programlarında bir alttaki alana geçmek için TAB tuşu kullanılır.Ancak DOS programlarından gelen alışkanlıkla kullanıcılar hep Enter ile alt alana geçmek ister ve bu bir tik olmuştur.
Delphide Enter tuşu ile bir alt alana geçmek için bir yöntem;
" Formun Keypreview olayını True yapılır.
" Form üzerinde herhangiki tüm bileşenlere Default false yaplır.
" formun onKeypres olayına aşağıdaki function ilave edilir.
procedure TAdresformu.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then begin
Key := #0;
if (Sender is TDBGrid) then
TDBGrid(Sender).Perform(WM_KeyDown,VK_Tab,0)
else
Perform(Wm_NextDlgCtl,0,0);
end;
Database'de Türkçe Problemi
BDE administor programında configuration/dirvers/native/[kullandığın dosya türü] seçeneklerinde langdriver kısmını türkçe bir sürücü olarak değiştir. Bunu yaptıktan sonra delphi ile türkçe karakterleri görebilirsiniz
Bu ayarı yaptıktan sonra Database Desktopta Türkçe karakterler yine görünmeyecek.
Delphi'ye Giriş
Visual dillerden biri olan Delphi Programlama dili ile istediğiniz programları yapmak artık zor değil.
Programlarda kullanılabilecek standart işlemler birer kontrol olarak tasarlanmış olup programcının kullanımına sunulmuştur.Örneğin;Personel bilgileri girilen bir program yapılırsa,personelin adı,soyadı ,doğum yeri ve tarihi gibi bilgilerin girileceği Edit kutusu,Kullanıcının neyi girmesi gerektiğini belirten Label,değişik seçeneklerden birini seçme imkanı sağlayan aşağı doğru açılan ComboBox kutusu,komut butonları ,Personelin bir listesini gösterecek bir Liste kutusu ( ListBox ).Bunları kolayca forma taşıyarak programızın ekranını tasarlayabiliriz.Tek yapılması gereken Form üzerindeki kontrolleri oluşturmak için Ana formun üzerinde bulunan Componentlerden ilgili ikonları seçmek ve formumuza tıklamak.
Object Inspector Penceresi
Formumuza koyduğumuz kontrol elemanlarının özellikleri ve aldığı değerler Object Inspector Penceresinde görülür.Object Inspector ; Properties ( Özelliğin Adı ), Events ( Özelliğin Değeri ) 2 kısımdan oluşur.Örneğin Formumuza Label1 koyalım.Label1'i Mouse ile seçelim.F11 tuşuna tıklayarak Object Inspector penceresini açalım.Burada Label1'e ait olan Object Inspector penceresinin açıldığını görürüz.Örneğin Label1 ismini değiştirmek istersek Caption özelliğine gelip karşısındaki kutucuktan Label1 sözcüğünü silip istediğimiz kelimeyi yazacağız. ( Örneğin Personelin Adı ).Bunun gibi Object Inspector'deki değerleri değiştirebiliriz.Örneğin Label1'e ait Object Inspector'deki Properties kısmındaki değeri alClient seçtiğimiz zaman kontrol elemanının (Label1) Formun her tarafını kapladığını görürüz.Yine Font kısmında Label1'in yazı karekterini büyütebilir ve rengini değiştirebiliriz.Yine Örnek verecek olursak Formumuza aşağı açılır kutucuk ( ComboBox1) koyalım.Bu kontrol elemanına ait Object Inspector'de Items'in yanındaki kutuya tıklayarak açılan formda ComboBox açılırken görmek istediğimiz kelimeleri yazalım.
Programı Çalıştırma
Programı F9 tuşuna basılarak çalıştırılır.Programı çalıştırmak için kodların yazılmasına gerek yoktur.Tasarım halinde de programımızı çalıştırabiliriz.
Kod Yazma
Kod yazmak istenilen kontrol elemanı seçilir ve bu elemana ait Object Inspector'deki Events özelliğinden yararlanılır.Burada ilgili kontrol elemanına tıklanınca programın bitmesi isteniyorsa OnClick kısmına kod yazılır.Eğer iki kez tıklanınca programın bitmesi isteniyorsa OnDblClick kısmına kod yazılır veya mouse ile ilgili kontrol elemanının üzerinden geçerken mesaj vermek istiyorsak OnMouseMove kısmına kodumuzu yazacağız.
Örnek:Şimdiye kadar öğrendiğimiz bilgilere göre aşağıdaki programı yapalım.Formumuza ; Ana Formdaki Standart Component'inden 5 tane Label,3 tane Edit.Text,2 tane ComboBox,1 tane ListBox, 5 tane de Buton yerleştirelim. Bu kontrol elemanlarının OnClick kısımlarına aşağıdaki kodları yazalım.
procedure TForm1.Button1.Click(Sender: TObject);
begin //Ekle butonuna yazılacak kod
Listbox1.Items.Add ( Edit1.Text+' ' +Edit2.Text+' '+Edit3.Text+' '+ ComboBox1.Text+' 'Combobox2.Text);
end;
procedure TForm1.Button2.Click(Sender: TObject);
begin // Sil Düğmesi
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;
procedure TForm1.Button3.Click(Sender: TObject);
begin // Kaydet düğmesi
ListBox1.Items.SaveToFile ('liste.dat');//Liste adlı dosya oluşturarak bilgiyi kaydeder.
end;
procedure TForm1.Button4.Click(Sender: TObject);
begin // yükle düğmesi
ListBox1.Items.LoadFromFile('liste.dat');// Bilgileri Listbox1'e yükler.
end;
procedure TForm1.Button5.Click(Sender: TObject);
begin // Programı kapatma düğmesi
Close;
end;
Birden Fazla Form Kullanma
Programa yeni bir form eklemek için File menüsünden NewForm seçeneği kullanılır.Programda birden fazla form varsa bu formlara erişmek için View-Forms menüsü kullanılır.(Diğer formlara Shift + F12 kısayol tuşuylada ulaşabilirsiniz)
Component Palet
Form üzerinde oluşturulacak ekran görüntüsü ise Delphi'nin ana formundaki
Component Palet üzerindeki kontrol elemanları tarafından yapılır. Component Palet'ten seçilen kontrol elemanları mouse ile Form üzerine kolayca yerleştirilir.Componentler gruplanarak yerleştirilmiştir.Her grup bir çok farklı componentten oluşmaktadır.
Yeni Component'ler Ekleme
Delphi'ye yeni componentler ve activeX kontrolleri eklenebilmektedir.Yeni bir Component eklemek için Component menüsündeki Import ActiveX Control komutu kullanılır.Açılan pencerede yüklü ActiveX kontrolleri listelenir.Eklenilmek istenilen ActiveX kontrolü listede yok ise Add düğmesi ile OCX dosyası bulunup listeye eklenebilir.Penceredeki Palette Page kutusundan eklemek istenilen kontrolün hangi kısma ekleneceği seçildikten sonra Install düğmesi ile Delphi'ye alınabilir.
Component Şablonları ( Template ) oluşturmak
Program tasarımında en çok yapılan işlemler,sık kullanılan bileşen yada bileşen grupları bir şablon olarak kaydedilerek aynen standart bir bileşen gibi tekrar kullanılabilir.
Project Manager Penceresi
Project Manager penceresi normalde ekranda görülmez.View / Project Manager menü seçeneği ile görüntülebilir.Bu pencere içinde programımıza ait Formlar ve Unitler gösterilir.Bu pencere içindeki dosyalarDPR uzantılı bir dosyada tutulur.Projeden bir dosyayı çıkarmak için Remove seçeneğini,yeni bir dosya eklemek için New seçeneği kullanılır
Delphi'de Kullanılan Dosya Tipleri
.pas Her unitin kaynak kodlarını içeren dosyalardır.Delphi'de oluşturulan formlara ait kodlar da PAS uzantılı dosyalarda saklanır.
.dfm Form Dosyalarıdır.Delphi'de oluşturulan formlar ve üzerindeki kontrollere ait bilgiler bu uzantıdaki dosyalara kaydedilir.
.dsk Projemize ait masa üstü ayarları bu dosyaya kaydedilir.Hangi formun açık olduğu , ekrandaki koordinatları gibi bilgiler bu dosyada tutulur.
.dof Project / Options diyalog penceresindeki ayarları içeren dosya.
.exe Çalıştırılabilir program dosyası.Application projeleri çalıştırıldığında onlara ait EXE dosya,projeye verilen isimle otomatik olarak oluşturulmaktadır.
.dcu Derlenmiş unit dosyaları bu uzantı ile kaydedilir.Bir uygulamayı çalıştırdığımız zaman ilk önce unitler derlenir ve EXE hale getirilir.
.dpr Proje Kaynak Dosyası.Delphi'deki projeler bu tür dosyalara kaydedilir.
.res Derlenmiş Binary Kaynak ( Resource ) Dosyaları.Windows tarafından standartlaştırılan bu formattaki dosyalarda resim,ikon,kursor gibi bilgiler bulunur.
Değişkenler
Değişken Tanımı
" Delphi'de değişkenler kullanılmadan önce tanımlanma mecburiyeti vardır.Değişken adları 63 karakteri geçmemelidir.63.karakterden sonrası gözardı edilir.
" Değişken adları sembolleri içermemelidir.($ , * , % vb. )
" Bir değişken tanımlama işi Var bloğunda yapılmalıdır.
" Bir değişkenin tanımı iki kısımdan meydana gelir.1.kısım değişkenin adını , 2. kısım ise değişkenin tipini belirler.
Var
a,b : integer ;
i : integer ;
Aciklama : string ;
Medenihal : Boolean ;
Kesirli : real ;
Veri Tipleri
Tamsayı Tipleri
ShorInt:1 Byte'lık işaretli tamsayı tipidir.( - 128 ) ile 127 arasında değer alır.
SmallInt:2 Byte'lık işaretli tamsayıdır. ( -32768 ) ile 32767 arasında değer alır.
LongInt:4 Byte'lık işaretli tamsayı tipidir. ( - 2147483647 ) ile 2147483647 arasında değer alabilir.
Integer:LongInt tipi gibidir.4 Byte'lık işaretli tamsayı tipidir.( - 2147483647 ) ile 2147483647 arasında değer alabilir.
Byte:1 Byte'lık işaretsiz bir tamsayı tipidir.0 ile 255 arasında değer alabilir.
Word:2 Byte'lık işaretsiz tamsayı tipidir.0 ile 65535 arasında değer alabilir.
Cardinal: 4 Byte'lık işaretsiz tamsayı tipidir.0 ile 2147483647 arasında değer alabilir.
Int64:64 bitlik tamsayılar tanımlanabilmektedir.( -9 x 10^18 ) ile 9 x 10^18 arasında değer alabilmektedir.
LongWord:0 ile 4294967295 arası değerler alır.İşaretsiz tamsayıdır.Delphi 4 versiyonuyla birlikte geliştirilmiştir.
Variant:16 Byte'lik bir değişken tipidir.Bu tipteki bir değişkene hem sayısal hem de string ifadeler aktarılabilir.
Örnek:
Var
i : variant ;
a : integer ;
k : int64 ;
begin
i := 'Bahadir';
a := 12345 ;
k :=123456789 ;
end;
Reel Sayı Tipleri
Single:4 Byte'lık ondalık sayı tipidir. 1.5 x 10^(-45) ile 3.4 x 10^38 arasında değer alır.
Real48:6 Byte'lık ondalık sayı tipidir. 2.9 x 10^(-39) ile 1.7 x 10^38 arasında değer alabilir.
Real ve Double:8 Byte'lık ondalık sayı tipidir. 5.0 x 10^(-324) ile 1.7 x 10^308 arasında değer alabilir.
Extended:10 Byte'lık ondalık sayı tipidir. 3.4 x 10^(-4932) ile 1.1 x 10^4932 arasında değer alabilir.
Comp:8 Byte'lık ondalık sayı tipidir. -2^63 + 1 ile 2^63 - 1 arasında değer alabilir.
Currency:8 Byte'lık - 922337203685477.5808 ile + 922337203685477.5807 aralığında işaretli bir sayı tipidir.
Boolean Tipi
Boolean:True ve False değerlerinden birini içerir.1 Byte'lık yer kaplar.
Karakter Tipleri
Char:Bir karakter içeren 1 Byte'lık veri tipidir.Bu değişkenler sadece bir karakter barındırabilirler.Örnek: ' B ', ' 2 '
AnsiChar:Char tipi ile aynı özelliklere sahiptir.
WideChar:2 Byte'lık bir karakter tipidir.
String Tipleri
ShortString:255 karaktere kadar karakter ataması yapabilen veri tipidir.Bellekte 1 Byte'lık yer kaplar.
AnsiString:Bu tip stringler Dinamiktir ve belli bir sınırı yoktur.Yani ne kadar karakter atanırsa o kadar bellekte yer kaplar.
String:AnsiString tipiyle aynı özelliklere sahiptir.
PChar:64 KByte'a kadar atama yapılabilen #0 karakteri ile biten string tipidir.
Delphi'de Kullanılan Operatörler
Operatör Açıklama Örnek
+ Toplama a:=b+c;
- Çıkarma a:=b-c;
* Çarpma a:=b*c;
/ Bölme a:=b/c;
Div Tamsayı Bölme a:=b div 10;
:= Atama a:=12;
= Eşittir if( a=12) then ShowMessages('a eşit 12');
< > Eşit Değil if( a< >12) then ShowMessages('a eşit değil 12');
< Küçük if( a<12) then ShowMessages('a küçük 12');
> Büyük if( a>12) then ShowMessages('a büyük 12');
>= Büyük eşit if( a >=12) then ShowMessages('a büyük eşit 23');
<= Küçük eşit if( a<=12) then ShowMessages('a küçük eşit 23');
And Mantıksal AND if( a>=12) and ( a<15 ) then ShowMessages('a değerleri gerçekleşti);
Or Mantıksal Or if (a>12) or (a<15) then ShowMessages('a değerinin İkisi veya biri gerçekleşti.');
Not Mantıksal Not if not (a< 12) then ShowMessages('a değeri 12'den büyük değil.');
^ Pointer Operatörü a:=b*c^;
@ Pointer Adresi a:=@b;
$ Heksadecimal Operatörü a:=$FF;
[] Dizi Operatörü a:Array [1..99] of integer;
. Nokta Operatörü Personelin.Adı:='Bahadir';
Diziler
Dizi tanımı Var bloğunda aşağıdaki şekilde yapılır.
Var
Diziadi:array[altsınır..üstsınır] of tip
İki boyutlu dizi şöyledir :Diziadi:array[altsınır1..üstsınır1,altsınır2..üstsınır2] of tip
Örnek:
Var
a:array[1..50]of integer;
Dinamik Dizi Tanımlama
Dinamik Dizi;boyutunun derleme aşamasında belirlenmesi gerekmeyen dizilere denir ve program çalışırken dizinin boyutu belirlenebilir.
var diziadı:array of tip
Herhangibir anda bu dizinin boyutu SetLength fonksiyonu ile belirlenir.
Setlength(diziadı,boyutu);
Örnek: SetLength(i,12) ; // i dizisini 12 elemanlı yap.
Çok Boyutlu Dizi
Dizi birden fazla boyutluda olabilir.Bu durumda her boyut için tanım kısmında bir array of ifadesi kullanılır.
Var Diziadı : array of array of array of ... tip
Örnek:
3 boyutlu bir a dizisi tanımlanırken;
Var a : array of array of array of Integer ;
Çok boyutlu dizinin boyutu SetLength ( a , 2 , 4 ,6 ) ; gibi tanımlanır.
Sabitler
Sabitler değişmeyen değerler içerirler.Bu değer programın başından sonuna kadar değeri aynıdır.Bir sabit tanıtımı Const bloğunda yapılmalıdır.
Const
Sabitadı=değeri;
Örnek:Const
i = 100;
adi = 'Bahadir';
İlk Değer Atama ve Static Değişken Tanımı
Değişkenlere ilk değerin atanması ve bu değişkenin değerini prosedürün çalışması bittikten sonra da korunması için Const kısmı altında değişken tanımı yapılır.
Const
değiskeninadi : Tipi = İlkdeğeri;
Örnek:Const
i : integer = 0 ;
Bir Diziye İlk Değer Atama
Const
Diziadi : Array[altsınır..üstsınır] of tipi = (değer1 , değer2 ,...) ; şeklindedir.
Örnek:
Const
Mevsimler:Array[1..4] of string = (' İlkbahar ' , ' Yaz ' , ' Sonbahar ' , ' Kış ' );
Pointerler
Pointerler bir değeri değil, değerin bulunduğu adresi gösterir.
PAnsiString:AnsiString tipinde bir değişkeni gösteren pointer.
PByteArray:TbyteArray tipinde bir değişkeni gösteren pointer.Çoğunlukla bellekte ayrılmış bölgelerdeki her byte ulaşılabilmek için kullanılır.
PCurrency:Currency tipindeki bir değişkeni gösteren pointer.
PExtended:Extended tipindeki bir değişkeni gösteren pointer.
PShortString:ShortString tipindeki bir değişkeni gösteren pointer.
PWordArray:TWordArray tipindeki bir değişkeni gösteren pointer.
Herhangi bir değişken için ^ karakteri kullanılarak kolayca pointer tanımlanabilir.
Örnek:
Var
ptr : PAnsiString ;
p: ^integer ; // integer tipindeki değişkeni gösteren pointer.
Pointerlerin Barındıracağı Adres
Pointerin barındıracağı adresi belirleme işi @ karakteri ile yapılır.
p := @ i ; // p pointeri i adresini barındıracaktır.
ptr := @ a[1] ; // ptr pointeri ile dizinin ilk adresini barındıracak.
Pointer Kullanımı
Pointer, tiplerin önüne ^işareti koyularak tanımlanırlar.
Örnek:var
x : ^integer ;
y : ^string ;
Şartlı Çalıştırma Deyimleri
Programlar normal zamanda satır satır çalışırlar.İsteğe bağlı olarak belli şartlar aranarak programın bir kısmının çalıştırılmasını veya çalıştırılmamasını sağlayabiliriz.
İf Döngüsü
if döngüsünün genel yapısı aşağıdaki gibidir.
If şart then
Komut ;
Else
diğer komut ;
Örnek:var
i : integer ;
begin
i := 0;
i := i + 1 ;
if i = 1 then begin
Label1.Caption := 'Doğru ';
end
else
if i<>1 then begin
Label1.Caption := 'Yanlış ';
end;
end;
Case Döngüsü
Bir değişkenin aldığı bir çok değere göre ayrı komutların çalıştırılması gereken durumlarda Case döngüsü kullanılır.Genel yapısı aşağıdaki gibidir.
Case değişken of
durum1 : Komutlar ;
durum2 : Komutlar ;
......
durumn : komutlar ;
Else komutlar ;
end;
yukarda dikkat edilirse değişken ; durumlara uyan değerler aldığı zaman ilgili komutlar çalışacak eğer değişkenin değeri hiçbirine uymuyorsa Else' den sonraki komut çalışacaktır.Aşağıdaki örneği inceleyelim.
Case x of
1 : label1.Caption := ' Merhaba ' ;
2 : label1.Caption := ' Dünya ' ;
3 : Edit1.Text := ' Bahadir Sahin ' ;
else
Edit1.Text := ' Hoşçakal ' ;
end;
For Döngüsü
For döngüsünün genel yapısı aşağıdaki gibidir.
For i := ilkdeğer to sondeğer do
begin
komut ;
end ;
Burada to kullanıldığı için i artarak değerler alır.downto kullanıldığı zaman değer i değerleri azalarak gider.
For i := ilkdeğer downto sondeğer do
begin
komut ;
end ;
Örnek : var
i : array [ 1 .. 20 ] of string ;
k : integer ;
begin
for i := 1 to 20 do
i [ k ] := InputBox( ' i değer girişi ' ,Inttostr (k ) + '.nin adı ' , ' ' ) ;
end ;
While - Do Döngüsü
Bir şart gerçekleştiği zaman çalışması gereken program bloklarında kullanılır.Genel yapısı aşağıdaki gibidir.
While şart do
Begin
Komutlar ;
end ;
Örnek :
var
i : integer ;
Begin
i := 0 ;
while i < 10 do
Begin
Label1.Caption := inttostr ( i ) ;
i := i + 1 ;
end ;
Repeat - Until Döngüsü
Genel yapısı aşağıdaki gibidir.şart gerçekleşene kadar çalışması gereken kısımlarda kullanılır.
Repeat
Komut ;
Until Şart ;
Örnek: var
i : integer ;
begin
repeat
i := 50 ;
Until (i>0) and ( i < 50 )
end ;
Döngü Kontrol İfadeleri
Bazı durumlarda döngü bitmeden döngüden çıkılmak istenebilir.Bu gibi durumlarda döngü kontrol deyimlerini kullanmak gerekir. Bunlardan bazıları Break, Continue gibi deyimlerdir.
Break
Break kontrol deyimi For,While veya Repeat döngülerinden birinde döngüden çıkmak için kullanılır.Aşağıdaki örneği inceleyelim.
Örnek :
procedure TForm1.Button1.Click ( Sender : TObject ) ;
var
i : array [1 .. 20 ] of string ;
k : integer ;
begin
for i := 1 to 20 do
if i [ k ] = 'Bahadir' then begin
break ;
if > 50 then begin
ShowMessages (' Aranan kayıt bulunamadı. Tekrar deneyiniz...' ) ;
end
else
ShowMessages (Inttostr ( k ) + ' . kişi' ) ;
end ;
end ;
Continue
Continue ; For , While veya Repeat döngülerinde bazı şartlar gerçekleştiğinde döngünün sonuna gitmeden tekrar başa dönmesini sağlar.
Örnek:
var
i : integer ;
Begin
for i := 1 to 20 do
if i<10
continue ;
end ;
ShowMessages( Inttostr ( i ) ) ;
end ;
Exit
Exit; mevcut program bloğundan,bloğun sonuna ulaşmadan çıkmaya yarar.
Örnek : var i : integer ;
begin
i := strtoint ( Edit1. Text ) ;
if i <10 then begin
exit ;
end
else
Edit1.Text := 'i'nin değerleri 10'dan büyük.' ;
end ;
end;
Halt
Programdan çıkış sağlar.
Örnek:Begin
Form1.Halt ; // Programdan çıkış sağlar.
end ;
Whit - Do
Herhangi bir kontrol elemanının birden fazla özelliğini değiştirmek için yada metodlara ulaşmak için kullanılır.Genel kullanımım şekli aşağıdaki gibidir.
With kontroladi do
Begin
....
end ;