Etiket arşivi: Delphi

TNotifyEvent

Data üreten bir nesnem var: Diyelim ki buna haberleşme ile dışarıdan veri geliyor. Bu nesne üzerinde gerekli parsing işlerini yapıyorum, integrity check yapıyorum ve veriyi bir buffer’a yüklüyorum. Bu nesne bir formun parçası ya da ayrı bir ünitede tanımlı bir sınıf.
Öte yandan uygulamamda bu veriyi başka yerlerde, başka başka şekillerde kullanmam gerek. Mesela bir trend grafiğine çizim, bir faceplate nesnesini güncelleme ya da bu veriyi giriş kabul eden bir kontrol çevriminde….
Veriyi alma ve protokol dahilinde haberleşme kontrolünü yapma işini veriyi kullanma işinden basit biçimde ayırmak istiyorsam bunu şöyle yapıyorum:

Veriyle ilk uğraştığım yerdeki sınıfın private alanında bir TNotifyEvent değişken tanımlıyorum:


private
   FPrivateEvent : TNotifyEvent;

Sonra, nesnenin published alanında onMyEvent diye bir bir property tanımlıyorum:

published
   property onMyEvent: TNotifyEvent read FPrivateEvent write FPrivateEvent;

Dış dünyayı bu olayı kullanarak uyarmak istediğim yerde (mesela gelen veriyi tarayan parser’ın sorgularının başarılı döndüğü durumda) şunu yapıyorum:

   if Assigned(onMyEvent) then onMyEvent(self);

Bu olay tetiklendiğinde işlem yapmak istediğim yerde, öncelikle yapacağım işlemi içeren procedure’ü tanımlıyorum:

   private
     procedure ProcessMyEvent(Sender: TObject);

Birden çok kaynak nesne söz konusuysa buradaki sender parametresini ayırt etmede kullanabilirim. Öte yandan, burada veriyi taşıma gereksinimi duymadığım, sadece olayın tetiklendiğini belirtmek istediğim durumdaki event tetiklemesini anlattım. Eğer datayı taşımam gerekiyorsa kendi event handler’ımı oluşturabilirim. Bu başka bir hikaye…

Eğer handler ayrı bir formda tanımlıysa o formun başlangıcında (onActivate iyi bir yer, eğer ana form üzerinde tanımlama yapıyorsak creation order canımızı sıkmamış olur) elimizdeki event handler procedure’ünü (ProcessMyEvent) veri kaynağı olan nesnenin event’ine atamamız gerek:

   mySourceObject.onMyEvent:= userform.ProcessMyEvent;

Ben bu yöntemi kendi cihazlarımla haberleştiğim PC programlarını geliştirirken kullanıyorum. İşin haberleşme arayüzünü bir form (ya da görsel bile olması gerekmeyen bir nesne) üzerinde bir kere hallettikten sonra bunu hiç değiştirmeden farklı arayüzler ya da uygulamalarda aynı haberleşmeyi kullanabiliyorum.

Seninle niye konuşayım ki?

“Çok sosyal biri olmadığım” eleştirilerini alıyorum. Evet.. Çevremde görüp de sohbet etmeye can atmadığım, anlatacakları şeyleri hiç merak etmediğim pek çok insan var.

Bir şeyi yapabilecek durumda olmamakla o şeyi yapmayı tercih etmemek arasında çok büyük bir fark vardır. İnsanlar sonuç odaklı olmanın iyi bir şey olduğunu öğrenerek yetiştikleri için çoğu zaman bu ayrımın farkında olmazlar çünkü sonuçta iki durum da aynı sonucu doğurmaktadır.

Çevrenizde gördüğünüz namuslu insanların pek çoğu namussuzluk yapmaktan korktukları için namusludurlar. Bu insanlar için siz doğanıza kolay gelen bir şeyi yapmıyorsanız bu yapamadığınız içindir..

İnsanlarla niçin konuşuruz? Onları dinlemek niye hoşumuza gider? Sorunun, konuştuğunuz kişiye bağlı olarak pek çok cevabı olabilir.  Ama eğer cevaplardan biri kendini yalnız hissetmemekse bu çoğu durumda benim için kesinlikle geçerli olmuyor. İnsan, tercihlerinin arkasında durmalıdır.

Şu cümleye bir bakın:

viewconfig.datawatch[i]:=
       TBigBarFacePlate.Create(
       mainform.PageControl1.Pages[watchconfig[i].pageindex],
       i, watchconfig[i].left, watchconfig[i].top);

Delphi compiler’ı bununla ne kastettiğimi anlıyor. Bir hedefe indeksli olarak yönlenmenin ne demek istediğini çok sağlam bir biçimde biliyor. Ne istediğim çok somut. Kullandığım her sözcüğün ve noktalama işaretinin bir anlamı var. Bir şey ima etmiyorum. Manipülasyon yapmıyorum. Sadece önceden belirlenmiş kurallara bağlı kalarak derdimi ona anlatıyorum. O da anlıyor.  İşte bu, mükemmel iletişimdir. Ve bazı insanların neden “nerd” olmayı tercih ettiklerini, bazılarınınsa niye onları hiç anlayamadıklarını bize çok iyi anlatır.