Mega Code Archive

 
Categories / Delphi / Strings
 

Delphi başlangıç

Ö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 ;