Delphi ile Thread(Kanal) Kullanımı - Bölüm 2

Bu bölümde kanalları nasıl eÅŸ zamanlı olarak çalıştırabileceÄŸinizi göreceksiniz. Bunun için kritik bölgeler ve muteksler ile tanışacaksınız. Ayrıca kanal uyumlu olmayan VCL’in, kanallar ile nasıl kullanılabileceÄŸini de göreceksiniz. Bununla beraber kanal kullanımındaki yaÅŸanan bazı problemlere de deÄŸinmeye çalışacağız. Özellikle veritabanlarını kanallar ile kullanmada uyulması gereken püf noktalarına da deÄŸinmeye çalışacağız.

Aslında bu bölüm gerçekten uzun oldu. Normalde VCL kullanımını üçüncü bir bölüme taşımayı düÅŸünüyordum. Ama bu konuda istekler olunca birleÅŸtrip yayınlamayı düÅŸüdüm. İçeride sizi iki sayfalık bir makale bekliyor. Bu yüzden sayfa sonunda bitti zannedip kapatmayın!

Hazırsanız başlayalım.

Yazının kalanını okuyun »

Delphi ile Thread(Kanal) Kullanımı - Bölüm 1

Yaptığımız projelerin bir bölümü eninde sonunda bu konuya dayanıyor. Genelde kanal gerekli olduÄŸu halde Timer ya da Application.ProcessMessages gibi çarelere gitmeye çalışıyoruz Ve devamında hem görsel hem de iÅŸleyiÅŸ açısından istemediÄŸimiz sonuçlarla karşılaşıyoruz. Halbuki kanalların kullanılması sanıldığı kadar zor deÄŸildir. Bu ön yargıyı bu makalede aÅŸmaya çalışacağız.

Bu makale, ileri seviye Windows programcılığına geçiÅŸ kapısıdır. Bu makeledeki konuları öÄŸrendikten sonra Win32 programcılığının en güçlü özelliklerini öÄŸrenmiÅŸ olacaksınız.

Yanlız "ileri seviye" tabiri gözünüzü korkutmasın. Çünkü makeleyi bitirdiÄŸinizde thread kullanımının aslında ne kadar kolay olduÄŸunu göreceksiniz. Bununla birlikte bu makalede bu konu ile ilgili her ayrıntıyı anlatabilmemiz için yüzlerce sayfalık kitap yazmamız gereklidir. Bu yüzden burada iÅŸin mantığını kapıp, ihtiyacınız oldukça yardım dosyalarına müracaat etmeniz gerekebilir.

Kanallar hakkında hiç bir bilginiz olmayabilir. Bu makalede iÅŸin temelinden alacağız ve makaleyi bitirdiÄŸinizde kendi programlarınıza kanal ekleyebilecek duruma geleceÄŸinize inanıyorum.

Bu makale serisinde kanallar temelden anlatılmakla beraber, ileri seviye kanal kullanımı, VCL bileşenlerinde kanal kullanımı ve Muteksler de ana konularımız arasına girecektir.

Yazının kalanını okuyun »

Enine Boyuna Generics - Bölüm 2

Bir önceki bölümde Generics hakkında bazı terminolojiler üzerinde durduk. Ayrıca ilk baÅŸta verdiÄŸimiz örnek ile, bir sınıfı veya bir metodu object yaklaşımı ile nasıl genlleÅŸtirilebileceÄŸini gördük. Önceki makaleyi okuduktan sonra objcet yaklaşımı ile Generics arasındaki farkı idrak ettiÄŸinize inanıyorum. Ve Generics’in avantajlarını ve kolaylığını anladığınızı düÅŸünüyorum.

Bu bölümde Sınırlandırıcıları(Constraints) göstermeye çalışacağız. Hazırsanız buyrun.

Yazının kalanını okuyun »

Enine Boyuna Generics - Bölüm 1

Bir iki önceki makalemizde, Delphi gramerine katılan generics ve parametrize tipleri yüzeysel olarak tanıtmıştık. Generics, RAD Studio 2007′ nin çıkması ile artık sadece beta tester’larını deÄŸil, tüm Delphi programcılarını ilgilendiren bir konu olmuÅŸtur. Gerçi ÅŸu an için sadece .NET ortamında kullanabildiÄŸimiz bu özellik bir sonraki sürümde Win32 için de kullanılabilir bir gramer olacaktır. BaÅŸlangıç için önceki makalemizi okuyabilir ya da direk buradan baÅŸlayabilirsiniz. Zira bu bölümde Generics ile ilgili temel bilgiler vereceÄŸiz.

Yazının kalanını okuyun »

Delphi 7 ile Şimdiki Delphi Sürümleri Arasındaki Farklar

BildiÄŸiniz gibi VCL, .NET ortamına taşınırken derleyici bazında bir çok deÄŸiÅŸikliÄŸe ve geliÅŸtirmeye gidildi. Bu geliÅŸtirmeler, hem Delphi.NET derleyicisini hem bildiÄŸimiz klasik Delphi for Win32 derleyicisini etkiledi. Tabi bu geliÅŸtirmeler, en çok biz programcıların iÅŸine yaradı.

Bu makalemizde bu yeniliklere deÄŸinmeye çalışacağız. Bunlardan bir kısmını önceki makalelerimizde ayrıntılı olarak iÅŸlemiÅŸtik. Burada sadece bu sitede bahsetmediÄŸimiz kısımlar bahsedilecek ve önceden bahsettiklerimize linkler içerecektir.

Yazının kalanını okuyun »

Delphi ve Operator Overloading

"Operator Overloading"(operator aşırı yükleme), Delphi’ye Delphi.NET ile birlikte gelen class helper’lar gibi yeni özelliklerden birisidir. Bu teknik, class helper’lar gibi hem Win32 hem de .NET için kullanabilirsiniz.

Delphi’ye, belki de çok uzun zaman önce eklenmesi gereken bu özellik ile, herhangi bir sınıf veya record için toplama(+), çıkarma(-), çarpma(*) gibi operatörlere bazı özel anlamlar yükleyebiliyoruz. C++ programcılarının hiç de yabancı olmadıkları bu teknik ile kendimize özel veri tipleri tanımlayıp, bu tiplerin Integer, string gibi baÅŸka tipler ile etkileÅŸimlerinin nasıl sonuç vereceÄŸini belirleyebilirsiniz.

Yazının kalanını okuyun »

Delphi.NET’in Yeni Oyuncağı “Class Helper”

.Net ortamı için sadece Delphi’de bulunan bir nesne özelliÄŸi ile tanışalım bugün, Class Helper(Sınıf Hizmetçisi, Yardımcısı, ya da ne isim verirseniz.). C# kullanıcıları, 2.0 sürümü ile benzer bir tip olan "Partial Type" ile tanıştılar. Ama partial tipler hali hazırda derlenmiÅŸ kodlar üzerinde iÅŸlem yapamazlar. Ama class helper’lar yapabilirler! Yani derlenmiÅŸ bir assembly’ de bulunan bir sınıf üzerine de class helper yazılabilir.

Nedir bu Class Helper? Yenilir mi, içilir mi, grameri nasıldır, ne iÅŸimize yarayacak? Bütün bu soruların cevaplarını bu kısa makalemizde vermeye çalışacağız.

Yazının kalanını okuyun »

Başka bir bilgisayarda debug yapın!

Uzun uÄŸraÅŸlar vererek hazırladığınız projeniz üzerinde bir çok testler yaptınız, hataları bulup giderdiniz. Ardından programı son kullanıcıya verdiniz. Kullanıcı belli bir süre sonra size telefon açtı ve programın hata verdiÄŸini söyledi. Siz de hatayı nasıl çıkarttığını öÄŸrenip, aynı ÅŸeyi kendi bilgisayarınızda denediniz ama ne yazık ki sizin bilgisayarınızda böyle bir hata oluÅŸmadı ve siz kafayı yeme hadlerine yaklaÅŸtınız.

Bu senaryo hemen hemen çoÄŸu programıcının başına gelebilecek hadiselerden. Ve çok sinir bozucu bir durum. O an herkesin içinden, son kullanıcının bilgisayarına Delphi, C++ Builder, ya da VS’yi kurup programı orada test etmek geçer. Ama bu her zaman için müsait olmayan bir durum. Üstelik kaybolan zaman da cabası.

Bu gibi sorunların üstesinden gelebilmek için Remote Debugging denen bir sistem geliÅŸtirilmiÅŸtir. Kullanıcının bilgisayarına Remote Debugger programı kurulur ve siz kendi bilgisayarınızdan uzaktaki bilgisayara baÄŸlanarak debug iÅŸleminizi yaparsınız. Ve hatanın ne olduÄŸunu anlamaya çalışırsınız.

Bir çok geliÅŸtirme ortamı remote debug iÅŸlemine izin vermektedir. Bizim bu yazıda bahsedeceÄŸimiz iÅŸlem, Delphi ve C++ Builder için olacak. Bir kaç adımda bu iÅŸlemin nasıl yapıldığını öÄŸrenin ve yukarıdaki senaryonun aktörlerinden biri olmayın.

Yazının kalanını okuyun »

Delphi programcıları, Generics ile tanışıyor…

Åžu an betası test edilen Highlander sürümünde göreceÄŸimiz generic tipler, aslında c++ programcılarına pek de yabancı olmayan bir terim. .Net 2.0 ile birlikte, managed kodlar generics ile tanıştı. Haliyle Delphi de, highlander sürümü ile birlikte .net 2.0′ı ve generics’i destekliyor. Ama IDE ve kod editörü tam manasıyla generics’e destek vermeyecek. Ama derleyici olarak generics’in tüm özelliklerinden faydalanabileceÄŸiz. Özellikle generics için refactoring bulunmayacak. Ayrıca help insight ‘da da generic tipler "<>" ÅŸeklinde görünecek. Ayrıca editor, generic tipleri generic tip olarak nitelememekte. Generic tipi ayrı bir sınıf olarak almakta. Her neyse bu gibi sorunlar bir update ile ya da 2008′in ilk çeyreÄŸinde çıkması beklenen Tiburon sürümünde halledilecektir. Önemli olan generic tipleri derleyici bazında tam olarak kullanabileceÄŸimiz.

Bütün bunları geçelim ve generic tiplere yabancı olanlar için bir kaç küçük örnek verelim.

Yazının kalanını okuyun »

Fonksiyon Çağırım Mekanizmaları

Gerek C++ programlamada gerekse Delphi ve diÄŸer programlama dillerinde fonksiyonların stdcall, cdecl, pascal gibi terimler ile tanımlandığını görmüÅŸüzdür. EÄŸer biraz da merakımız olmuÅŸsa bunların az çok neyi ifade ettiklerini bir yerlerden okumuÅŸuzdur. DLL yazanlar ve baÅŸka bir dilde yazılmış bir DLL’i kullanmaya çalışanlar mutlaka bu terimlerden en az biri ile aÅŸina olmuÅŸtur. Çünkü DLL yazıp bunu dağıtacağınızda bu terimleri biliyor olmalısınız. Bu makalede bu terimlerin derinlerine ineceÄŸiz ve Delphi inline assembler ile kullanımına örnek vermeye çalışacağız.

Yazının kalanını okuyun »

Delphi ve C++ Builder ile Assembler

Bu makalede, baÅŸlangıç düzeyi için, Borland Inline Assembler(Basm) kullanımını göstermeye çalışacağız. Basm kullanarak Delphi’de ve C++ builderda assembler kullanarak, kodlarınızı daha da hızlandırabilirsiniz. BildiÄŸinizi gibi Delphi ve C++ Builder’a monte edilen FastMM projesi, temelde çokca kullanılan fonksiyonların, optimize edilmiÅŸ assembler hallerini barındırmaktadır. Böylelikle hem derleme performansı artmakta, hem de runtime’da çalışan kod daha verimli ve hızlı çalışmaktadır. Fakat derleyici her ne kadar kodu optimize etse de ileride göreceÄŸiniz gibi bazı yerlerde yapay zeka yetersiz kalmaktadır. Bu yüzden bu kısımlara müdahale edip kodların boyutunu azaltıp, performansını artırmaya çalışacağız.

Ayrıca derleyicinin kod üretimi(code generation) safhasının nasıl iÅŸlediÄŸi hakkında da fikir sahibi olacaksınız.

Örneklerimizi Delphi üzerinde yapacağız. Az da olsa assembler bildiÄŸinizi kabul ediyorum.

Yazının kalanını okuyun »

Bileşen Yazım Klavuzu - 3

BileÅŸen yazımı hakkındaki bu son makalemizde ileri düzey konulara el atacağız. Bu makalede belirli tipler için, özellikle kendi özellik tiplerimiz için nasıl editörler tayin edebileceÄŸimizi göreceÄŸiz. Ayrıca alt özellikler ile iki bileÅŸeni birleÅŸtirme iÅŸlemine de göz atacağız. Hazırsanız buyrun.

Yazının kalanını okuyun »

Bileşen Yazım Klavuzu - 2

Önceki bölümde bileÅŸen yazımına giriÅŸ yaptık. Ayrıca nesneye dayalı programlamadan iÅŸimize yarayan kısımlarını ele aldık. EÄŸer ilk bölümü okumadıysanız buradan ilk bölüme ulaÅŸabilirsiniz. İlk bölümdeki temel bilgileri aldıysanız, daha ileri konulara geçebiliriz.

Bu ikinci bölümde, daha çok, özelliklerin kalıcılığının saÄŸlanması üzerine durmayı düÅŸünüyorum. Hazırsanız buyrun.

Yazının kalanını okuyun »

Bileşen Yazım Klavuzu - 1

Delphi, gerçekten güçlü özelliklerle donatılmış bir geliÅŸtirme ortamıdır. Bir çok sınıflar ve yapılar ile IDE özelleÅŸtirilebilir. Kendi yazacağınız ya da dışarıdan kullanacağınız bileÅŸenler ile programlama alanınızı özelleÅŸtirebilirsiniz. Hatta daha da ileri gidip Expert dediÄŸimiz IDE eklentileri yazarak, IDE’ye olmayan yeni özellikler ekleyebilirsiniz. Bu makale serisinde VCL ve VCL.NET için bileÅŸen yazımını göstereceÄŸiz. Tabi ki, bileÅŸen yazımına deÄŸinirken Delphi’nin sahip olduÄŸu belli baÅŸlı Nesne Programlama tekniklerine de deÄŸinmeden geçmeyeceÄŸiz. Tercih ettiÄŸimiz dil Object Pascal’dır. Ama C++’a da kodlar çevrilebilir.

Ve tavsiyem baÅŸka bir bileÅŸen kullanacağınıza kendi bileÅŸeninizi kendiniz yazın! Nasıl mı? Cevabı iÅŸte bu makalede…

Yazının kalanını okuyun »

Son Yaprak

Son Yaprak

Son yaprağımız düÅŸmeden topraÄŸa;

Å?u teknolojiyi yoketmek için deÄŸil;

YaÅŸamak için kullanmayı öÄŸrenmeliyiz…