Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Class Helper ile Listview Loop
#1
Class Helper ların nasıl kullanıldığını küçük bir örnekle anlatmak istiyorum. Öncelikle Class helperlar classlara istediğimiz özellikleri kazandırıp kullanmak için delphinin verdiği güzel özelliklerden bir tanesi. Ben örneğimde Listview itemları içinde dönerek Listitem ile ilgili işlemler yapabildiğim bir Listview class helper yazdım. 

Örneğimde kullandığım helper:

  TListViewClassHelper = class helper for TListView
   function Loop(const Proc:TProc<TListItem>) :TListView;
   function LoopC(Criteria : TCriteria;const Proc:TProc<TListItem>) :TListView;
 end;

Birinci helperda Listview içinde dönerken aynı zamanda eğer bir procedure yazarsanız listitemı kullanabileceğiniz bir döngüye girmektedir.

1. Helper Kullanımı:

  lvContacts
           .Loop(
                 procedure (A:TListItem)
                 begin
                   memo1.Lines.Add(A.Caption);
                 end
                 );

Görüldüğü gibi lvContacts Listview imdeki 'A' ListItem ın Caption ını kullanabiliyorum ve işlem yaptırabiliyorum.

İkinci helperda ise birde kriter ekleyerek Listitem da döndüğüm alanı kısıtlayabiliyorum. Bunun için bir Criteria Classı oluşturdum. Kriterleri buraya ekleyerek Helperda döneceğim alanı kısıtlıyorum.

Criteria Classı:

  TOperator = (opEqual,opGreater,opLower);

 TCriteria = class
     FColumn : string;
     FValue  : string;
     FOperator : TOperator;
   public
     function AddColumn(s: string) :TCriteria;
     function AddValue(s: string) :TCriteria;
     function SelectOperator(o:TOperator) :TCriteria;
     class function CreateCriteria:TCriteria;
 end;

2. Helper Kullanımı:

  lvContacts
           .LoopC(
                 TCriteria
                   .CreateCriteria
                     .AddColumn('Adı')
                     .AddValue('Hakan')
                     .SelectOperator(opEqual),
                 procedure (A:TListItem)
                 begin
                   memo1.Lines.Add('Sıra No:'+IntToStr(A.Index)+',Adı:'+ A.SubItems[0]);
                 end
                 );

Görüldüğü gibi Listview de 'Adı' kolonu 'Hakan' a eşit olan ListItem larda gezerek işlem yaptırabiliyoruz.


Görünümü:
NpAJlY.gif

Kaynak kodlar:
Linkleri Görebilmeniz İçin Giriş yap veya Üye Olkaynak kodları indirebilirsiniz | Yandex Disk
WWW
Cevapla
#2
Güzel örnek yalnız 2. örnekte create ettiğiniz TCriteria instance'ını yok etmediğinizin farkında mısınız? 
Ayrıca create işlemi için constructor yerine class function kullanmanızın özel bir nedeni mi var?

Bu tarz paylaşımlarınızı bence yandex disk yerine github ya da bitbucket üzerinde paylaşsanız daha güzel olabilir.

Başarılar
Cevapla
#3
Doğru söylüyorsun çok dikkat etmemiştim örneği hazırlarken. Dediğin gibi yapıp daha önce versiyon kontrol sistemlerine bakmış ama denememiştim. Bitbucket hesabı açıp örneği oraya koydum.

Örneği biraz daha geliştirip kaynak kodları Bitbucket e koydum ilgilenen arkadaşlar buradan takip edebilir.

Görünüm:
3085903929-ListviewClassHelper2.gif

Kaynak kodlar:
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol indirip bakabilirsiniz.
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  ListView - CheckBox Kullanmak Fesih ARSLAN 6 1.740 18-05-2018, Saat: 00:34
Son Yorum: engerex
  ListView - DynamicAppearance Fesih ARSLAN 6 1.846 09-03-2018, Saat: 10:30
Son Yorum: Bay_Y
  Class Helper da Generic Collection Kullanma witalihakko 1 264 08-02-2018, Saat: 10:48
Son Yorum: klavye
  AnonymousThread ile ListView'e Veri Yükleme witalihakko 3 764 15-03-2017, Saat: 11:54
Son Yorum: Tuğrul HELVACI
  ListView - ImageList Icon Almak Fesih ARSLAN 3 1.809 18-10-2016, Saat: 09:35
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi