Archive for the “ipucu” Category


Delphi sınıflarının benden çekeceği var :) Ne yapsalar nasıl saklasalar değişkenleri bir şekilde ulaşıyoruz. :) Private özellikleri değiştirme yönteminden sonra daha değişik bir konu olan protected özelliklere ulaşmayı anlatacağım bu makalemde..

Delphi’de en yaygın olarak kullanılan 4 adet erişim belirleyicisi vardır.Bunlar private, protected, public, ve published‘dır. Bunların ne işe yaradıklarından detaylıca bahsetmeyeceğim.Konumuz protected. Protected bloğunda tanımlanmış olan tüm üyeler sınıfın tasarımcısı tarafından sınıf kullanıcılarından gizlenmiştir. Ancak bu sınıfı miras alan sınıflarda erişime açıktırlar. Mesela bir formumuz olsun ve üzerinde 3 adet TEdit nesnemiz olsun. Edit bileşenlerimizin hepsinin OnClick yordamını aynı yere ayarlayalım ve OnClick yordamında aktif olan kontrolün rengini kırmızı yapmak isteyelim. Hadi bakalım kodlamaya başlayalım:

(more…)

Comments No Comments »

Delphi gerçekten de çok güçlü bir dildir..Ama onu hepimiz yeterince iyi kullanabiliyormuyuz işte orası tatışılır. Sizlerle birkaç ilginç kullanımı paylaşmak ve dilim döndüğünce anlatmak istiyorum.Mesela hemen hemen her Delphi programcısı herhangi bir nesnenin OnClick olay yöneticisinde belli başlı kodlar yazmıştır.Tüm OnClickler şöyle görünür.


procedure ...Click(Sender : TObject);

Peki düşündük mü acaba , “yahu bu Sender : TObject de nereden geliyor ?” diye.. Bu tanım aslında TNotifyEvent adlı bir tanımdan gelmektedir. Delphi Help’i açar ve TNotifyEvent’de neymiş diyip bakarsanız şöyle bir tanım göreceksiniz:
(more…)

Comments 4 Comments »

Reqursive fonksiyon kendi kendisini çağıran fonksiyonlara verilen genel addır. Alt alta hiyerarşik yapılarda yada içinden çıkılması zor bazı matematiksel hesaplamalarda çok kullanışlı bir yapıdır.Örneğin en bilinen örneği faktoriyel hesabıdır.Bilindiği üzere faktöriyel hesabı birbirini takip eden sayıların çarpımları ile yapılmaktadır ve ünlem (!) işareti ile ifade edilir. Örneğin 3 faktöriyel (3!) = 1 * 2 * 3 = 6 dır.
5! = 1 * 2 * 3 * 4 * 5 = 120 dir. Gelin bu faktöriyel hesabını yapabilen bir fonksiyonun Delphi’de ne kadar kolay kodlanabildiğine hep beraber göz atalım.

(more…)

Comments 6 Comments »

Sevgili Sadettin’in güzel anlatılmış nesne kopyalama örneğinden sonra Furkan arkadaşımızın yorumu bana bu makaleyi yazma ihtiyacı hissettirdi.Diyelim ki bir class tasarladık süsledik püsledik, cillop gibi oldu. Ama bu class’ımızı istediğimiz zaman hafızadaki o anki görünümü ile saklamak ve tüm özellikleri ile yine istediğimiz bir anda tekrar yüklemek istedik. Programcı değilmiyiz isteriz biz herşeyi ;)
Bunun için başladık araştırmalara nasıl saklarım nasıl yüklerim vs. diye..Birde baktık kı Sadettin bunun için birşeyler yazmış sağolsun.Biraz da Delphi Help’i kurcaladık, eh güzel artık yazabiliriz. Yazdık bitirdik, save de ettik. Bir yükledik baktıkkı sadece published property’ler saklanmış dolayısı ile onlar okunmuş.Haydaa dedik bu da ne ki şimdi..Object Inspector’a ihtiyacım yok ki benim bütün property’lerimi published tanımlayayım.. Hatta ben mazoşist birisiyim, private olan property’lerim bile saklansın abi! dediniz. Eee ne olacak şimdi ?

(more…)

Comments 8 Comments »

Şimdi size anlatacağım biraz tehlikeli bir duruma sebep olabilir..En azından programların yada tasarladığınız component’lerin sağlıklı çalışması açısından sıkıntılar doğurabilir. Bu açıdan şimdiden dikkatli olmakta fayda olduğu konusunda uyarmak isterim. Diyelim ki bir component tasarladık, component’imizi kullanacak arkadaşlarımız için bazı metodları ve property’leri public yaptık.Ancak değiştirilmesini istemediğimiz çok can alıcı bir özelliği de public kısmında sadece okunabilir yaptık. Ya bu değiştirilebilirse o zaman ne yaparız ? Lafla olmuyor, hemen koda geçelim:

(more…)

Comments No Comments »

Şimdi veritiplerinin kıyaslanması ile alakalı bir dökümana ne gerek var diye düşünebilirsiniz haklı da olabilirsiniz :) Ama ben yine değişik bir yolla nasıl yapıldığını göstermeye çalışacağım.. Ve bu yol çok esnek bir yol olacak. Şimdi sizlerle bir fonksiyon yazacağız, bu fonksiyon içerisine karşılaştırılacak veritiplerini alacak ve byte byte kıyaslama yapacak.(En sağlam yöntem :) ) Ardından da sonucu boolean olarak döndürecek.

Yazmaya başlayalım..

(more…)

Comments No Comments »

Delphi’de hazır olarak gelmekte olan TDownloadURL adlı bir Action var. Bu Action internetten dosya indirme islemini cok kolaylastiriyor. Download islemi sirasinda meydana gelen her turlu olayi isleyebilmemiz icin bize OnDownloadProgess adli bir olay sunuyor. Biz simdi bu olayi kullanarak internetten dosya indirirken o ana kadar inen byte miktarini hem title da hem de bir progressbar uzerinde gosterecez.

(more…)

Comments 5 Comments »

Genelde evet ancak Record’lar ile Parse işlemleri de yapılabilir. Şöyle düşünelim kayıt deseni sabit olan bir dosyanız olsun.Örneğin:

Adı Soyadı(14 karakter) + Yasi(2 karakter) + Doğum Tarihi(10 Karakter) olan bir dosya yapısına sahip olduğumuzu düşünelim. Bu gibi bir durumda bu dosya içerisinden verileri okurken Copy fonksiyonu ile istediğimiz alanların başlangıç ve bitiş noktalarını bildiğimiz için verileri elde ederiz. Ama gelin biz bunun için record yapısından istifade edelim.(Tabii burada verileri untyped record olarak save edebilir ve bir record’un içerisine otomatik de okuyabilirsiniz ama ben size daha az bilinen bir yolu göstermeye çalışacağım.)


TBolParcalaYonet = record

AdiSoyadi : array[0..13] of Char;

Yasi : array[0..1] of Char;

DogumTarihi : array[0..9] of Char;

end;

var

myStr : String;

myRec : TBolParcalaYonet;
begin

myStr := ‘Tuğrul HELVACI3110.03.1975′
myRec:= TBolParcalaYonet(myStr);

ShowMessage(myRec.AdiSoyadi); // Tuğrul HELVACI

ShowMessahe(myRec.Yasi); // 31

ShowMessage(myRec.DogumTarihi); // 10.03.1975

end;

Görüldüğü üzere bir string ifade bir record’a cast edilerek parçalara ayrılabilmiştir.

Bir diğer ilginç kullanım alanı ise sayılarda ortaya çıkmaktadır..Herhangi bir sayısal veritipi üzerinde byte byte işlem yapmak istediğinizde yine imdadınıza recordlar yetişiyor.Elbette pek çok farklı alternatif var shr, shl gibi, ancak bu seferki konumuz record’lar..

Diyelim ki bir word değişkenimiz var ve word değişkenler hafızada 2 byte yer kaplarlar.Yani 16 adet bitten oluşurlar ve hepinizinde malumudur ki bitler içerisinde 0 ve 1 sayılarından başka bir değer tutamazlar. Matematiksel olarak ikili sayı sistemine göre 16 adet bitin (işaretli değil ise) tutabileceği maksimum değer 65.535 dir. ( 2 üzeri 16 - 1 )

Bir byte’ın tutabileceği değer ise (2 üzeri 8 - 1) yani 255′dir. Şimdi recordumuzu aşağıdaki şekilde yazalım.


TByteRec = record

Lo : Byte;

Hi : Byte;

end;

var

myWordValue : Word;

begin

TByteRec(myWordValue).Lo := 255; // Bir byte'ın alabileceği maksimum değer.

TByteRec(myWordValue).Hi := 255;
ShowMessage(InttoStr(myWordValue)); // Ekranda 65.535 değerini gösterir.

end;

Geri kalan denemeler size bırakılmıştır. Daha iyi anlayabilmek için word’ün 2 byte olduğunu ve her byte’ın 8 bitten oluştuğunu unutmayınız. Ve size yardımcı bir uygulama olarak Windows’un hesap makinasını önerebilirim. Hesap makinasında bilimsel görünümü açıp İkilik sayı sistemini seçer ve 16 adet 1 basar, ardından da decimal görünüm seçerseniz karşınıza 65.535 rakamı çıkacaktır. ;)
Saygılar, sevgiler..

Tuğrul HELVACI

Comments 1 Comment »