20 Temmuz 2014 Pazar

Delphi Class Helper Özelliği


   Delphi ile class helper denemeleri yapmaya başladım ve ilk denememi yazayım dedim. Delphi XE sürümlerinden sonra class ve record lar için helper özelliği koymuş. Bu özellik gerçekten harika bir yaklaşım olmuş delphi için. Neden mi? Bu özellik sayesinde ana kodları değiştirmeden faklı classlara istediğiniz function ve procedure leri ekleyebiliyorsunuz.
   Bende bir deneme yaptım ve geçekten çok hoşuma gitti. Bu işi öğrendikten sonra eminim bir çok uygulamanızda bu yöntemi uygulayacaksınız. Şimdi gel gelelim nasıl uygulanıyor ne gibi artıları var. Benim yaptığım uygulamayı kısaca anlatacak olursak panel üzerindeki bileşenleri control etmenize yarıyor. Bu ne demek peki. Forma bir panel koydunuz ve bu panelde keşke şu özellikte olsaydı dediniz. O zaman ne yapıyoruz bu istediğiniz özelliği panele helper ile ekliyoruz.

    Öncelikle nasıl yapacağımızı göstereyim. Bunun için öncelikle helper kod bloğumuzu ekliyoruz. 


  TPnlControl = class helper For TPanel
  private
  public 
  end;

     Herşey bu kadar basit. Artık TPanel bileşenimize istediğimiz özellikleri ekleyebiliriz. 



implementation dan önce yazılacak kodlar


  FItems = (sEdit,sComboBox,sRichEdit,sListBox,sListView,sTreeView);
  TItems = set of FItems;

  FEnabled = (eEnabled,eDisabled);
  TErisim = set of FEnabled;

  FClear   = (tClear,tNotClear);
  TTemizle   = set of FClear;

  TPnlControl = class helper For TPanel
  private
  public
    function  ToStringCount(Items:TItems) : String;
    procedure PnlEditCrossControl(Enable : TErisim ; Clear:TTemizle);
    procedure PnlComboboxCrossControl(Enable : TErisim ; Clear:TTemizle);
    procedure PnlRichEditCrossControl(Enable : TErisim ; Clear:TTemizle);
    procedure PnlListBoxCrossControl(Enable  : TErisim ; Clear:TTemizle);
    procedure PnlListViewCrossControl(Enable : TErisim ; Clear:TTemizle);
    procedure PnlTreeViewCrossControl(Enable : TErisim ; Clear:TTemizle);

    Function  PnlEditsSelected(Index:Integer)     : TObject ;
    Function  PnlComboboxsSelected(Index:Integer) : TObject ;
    Function  PnlRichEditsSelected(Index:Integer) : TObject ;
    Function  PnlListBoxsSelected(Index:Integer)  : TObject ;
    Function  PnlListViewsSelected(Index:Integer) : TObject ;
    Function  PnlTreeViewsSelected(Index:Integer) : TObject ;

    procedure PnlAllItemCrossControl(Enabled,Clear : Boolean);
    procedure PnlClearAllItems;

    procedure PnlSelectIs(ComponentName:String);
    function  PnlItemCounts(Items:TItems) : Integer;
    function  PnlAllItemCounts : Integer;
  end;



  Ben Panel üzerindeki bazı bileşenlerin görünmesi, temizlenmesi, seçilmesi ve sayısını ekledim. Aynı özellikleri TForm içinde siz yapabilirsiniz. Edit için yazdığım seçme temizleme ve erişme kodları




procedure TPnlControl.PnlEditCrossControl(Enable: TErisim; Clear: TTemizle);
var Index : Integer;
begin
  For Index := 0 to self.PnlItemCounts([sEdit])-1 do
    Begin
      If eEnabled in Enable Then
        Begin
          (Self.PnlEditsSelected(Index) As TEdit).Enabled := True;
          if tClear in Clear then (Self.PnlEditsSelected(Index) As TEdit).Clear
          Else Continue;
        End
      Else
        Begin
          (Self.PnlEditsSelected(Index) As TEdit).Enabled := False;
          if tClear in Clear then (Self.PnlEditsSelected(Index) As TEdit).Clear
          Else Continue;
        End
    End;
end;

Function TPnlControl.PnlEditsSelected(Index: Integer):TObject;
var
  Items : Array of TObject;
  i,i2 : Integer;
begin
  SetLength(Items,self.PnlItemCounts([sEdit]));
  i2 := 0;
  For i := 0 to self.ControlCount-1 Do
    Begin
      If Self.Controls[i] is TEdit Then
        Begin
          Items[i2] := Self.Controls[i] as TEdit;
          Inc(i2);
        End;
    End;
  Result := Items[Index];
end;


Böylece TPanel üzerindeki istediğimiz her bileşeni control edebiliriz. Kullanımı ise




















1 yorum:

  1. Merhaba, paylaşımınız için teşekkürler güzel bir konu olmuş. Fakat ben öğrenmek adına şunu sormak isterim Mesela bir panele arka plan resmi atama özelliği eklemek istedim. Gösterdiğini bu yolla nasıl ekleyeceğim anlayamadım. Bu konuyu biraz daha açık anlatabilirmisiniz.
    Teşekkürler.

    YanıtlaSil