Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      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
  Class Helper da Generic Collection Kullanma witalihakko 1 100 08-02-2018, Saat: 10:48
Son Yorum: klavye
  ListView - DynamicAppearance Fesih ARSLAN 5 1.307 01-12-2017, Saat: 16:30
Son Yorum: webprog
  AnonymousThread ile ListView'e Veri Yükleme witalihakko 3 540 15-03-2017, Saat: 11:54
Son Yorum: Tuğrul HELVACI
  ListView - ImageList Icon Almak Fesih ARSLAN 3 1.552 18-10-2016, Saat: 09:35
Son Yorum: Fesih ARSLAN
  ListView - CheckBox Kullanmak Fesih ARSLAN 2 1.390 17-10-2016, Saat: 15:42
Son Yorum: Fesih ARSLAN



Konuyu Okuyanlar: 1 Ziyaretçi