Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

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 - DynamicAppearance Fesih ARSLAN 8 2.143 10 saat önce
Son Yorum: Fesih ARSLAN
  Interposer Class Nedir, Nasıl Kullanılır uparlayan 13 602 08-09-2018, Saat: 01:21
Son Yorum: uparlayan
  ListView - CheckBox Kullanmak Fesih ARSLAN 10 2.175 07-09-2018, Saat: 21:25
Son Yorum: engerex
  Class Helper da Generic Collection Kullanma witalihakko 1 379 08-02-2018, Saat: 10:48
Son Yorum: klavye
  AnonymousThread ile ListView'e Veri Yükleme witalihakko 3 963 15-03-2017, Saat: 11:54
Son Yorum: Tuğrul HELVACI



Konuyu Okuyanlar: 1 Ziyaretçi