Müdavim Girişi

E-Posta
Parola

Ücretsiz Kayıt Ol


Online Müdavimler (0 Kişi)
  • Online Kişi Bulunmadı

Yazar Hakkında
x
İsmail Kocacan
İsmail Kocacan is experienced on many development platforms and continues to learn technologies. Since the age of 16-17, dealing with software technologies. And continuous learning, teaching, research, continues to develop.
Delphi Hiyerarşik Nesne Tasarımı

Herkese selamlar saygılar;

 
Daha önce yazmış olduğum “C# Hiyerarşik Nesne Tasarımı” adlı yazımda demiştimki OOP mantığı olan tüm programlama dillerinde bu tasarımı uygulayabilirsiniz.
 
Şimdi bu tasarımı Programlama dillerinin babası Delphi ile nasıl yapabiliriz bunu anlatıcam. Bu tasarımı Delphi deki Generic yapılarlarla yapıcaz. Kullanacağım Delphi Sürümü Delphi XE dir. Sonra vay ben yaptım çalışmadı. Hay senin yazacağın yazıya…
diye arkamdan sövmeyin
Başlıyoruz.
Umain. Pas

{
 Delphi Hiyerarşik Nesne Tasarımı
 By İsmail Kocacan
 ismailkocacan@gmail.com
}
unitUMain;
 
interface
 
uses
  Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
  Dialogs,ComCtrls,Generics.Defaults,Generics.Collections,StdCtrls;
 
type
  // TPersonel = record
  // ID: Integer;
  // ParentID: Integer;
  // Ad: string;
  // Soyad: string;
  // Unvan: string;
  // end;
 
  TPersonelX=class(TObject)
  private
  protected
  public
    ID:Integer;
    ParentID:Integer;
    Ad:string;
    Soyad:string;
    Unvan:string;
  published
  end;
 
  TPersonelListesi=class(TObjectList<TPersonelX>)
  private
  protected
  public
    ProcedureEkle(PersonelX:TPersonelX);
    ProcedureSil(PersonelX:TPersonelX);
    functionListele:TObjectList<TPersonelX>;
    functionWhere(ID:Integer):TObjectList<TPersonelX>;
  published
  end;
 
type
  TForm1=class(TForm)
    TreeView1:TTreeView;
    procedureFormCreate(Sender:TObject);
    procedureTreeView1Click(Sender:TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1:TForm1;
  // Global Değişkenler
  dugum:TTreeNode;
  Liste:TPersonelListesi;
  personell:TPersonelX;
 
implementation
 
{$R *.dfm}
 
ProcedureTPersonelListesi.Ekle(PersonelX:TPersonelX);
begin
  Self.Add(PersonelX);
end;
 
ProcedureTPersonelListesi.Sil(PersonelX:TPersonelX);
begin
  Self.Remove(PersonelX);
end;
 
functionTPersonelListesi.Listele:TObjectList<TPersonelX>;
var
  XPersonel:TPersonelX;
  Personeller:TObjectList<TPersonelX>;
  I:Integer;
begin
  forI:=0toSelf.Count-1do
  begin
    Personeller.Add(Self.Items[I]);
  end;
  Result:=Personeller;
end;
 
{
 Hiyerarşide seçili düğümün altındaki
 alt düğümlerin listesini döndüren fonksiyon
}
functionTPersonelListesi.Where(ID:Integer):TObjectList<TPersonelX>;
var
  XPersonel:TPersonelX;
  { geçici bir liste tanımlıyoruz.
    içersinde ID si eşit olanları tutucaz.:)
 }
  Personeller:TObjectList<TPersonelX>;
  I:Integer;
begin
  Personeller:=TPersonelListesi.Create(False);
 
  { 1. Yöntem }
  forI:=0toSelf.Count-1do
  begin
    ifSelf.Items[I].ParentID=IDthen
    begin
      Personeller.Add(Self.Items[I]);
    end;
  end;
 
  { // 2. Yöntem
    for XPersonel in Self do
    begin
    if XPersonel.ParentID = ID then
    begin
    Personeller.Add(XPersonel);
    end;
    end; }
  Result:=Personeller;
end;
 
procedureTForm1.FormCreate(Sender:TObject);
begin
 
  Liste:=TPersonelListesi.Create();
 
  // Personeller Listeye Ekleniyor.
  personell:=TPersonelX.Create;
  personell.ID:=1;
  personell.ParentID:=0;
  personell.Ad:='Xİsim1';
  personell.Soyad:='XSoyad1';
  personell.Unvan:='Patron';
  Liste.Ekle(personell);
 
  personell:=TPersonelX.Create;
  personell.ID:=2;
  personell.ParentID:=1;
  personell.Ad:='Xİsim3';
  personell.Soyad:='XSoyad3';
  personell.Unvan:='Genel Müdür';
  Liste.Ekle(personell);
 
  personell:=TPersonelX.Create;
  personell.ID:=3;
  personell.ParentID:=2;
  personell.Ad:='Xİsim2';
  personell.Soyad:='XSoyad2';
  personell.Unvan:='Müdür';
  Liste.Ekle(personell);
 
  personell:=TPersonelX.Create;
  personell.ID:=4;
  personell.ParentID:=2;
  personell.Ad:='Xİsim3';
  personell.Soyad:='XSoyad3';
  personell.Unvan:='Müdür';
  Liste.Ekle(personell);
 
  personell:=TPersonelX.Create;
  personell.ID:=5;
  personell.ParentID:=4;
  personell.Ad:='Xİsim4';
  personell.Soyad:='XSoyad4';
  personell.Unvan:='Müdür Yrd';
  Liste.Ekle(personell);
 
  personell:=TPersonelX.Create;
  personell.ID:=6;
  personell.ParentID:=5;
  personell.Ad:='İsmail';
  personell.Soyad:='Kocacan';
  personell.Unvan:='Yazılımcı Bozuntusu';
  Liste.Ekle(personell);
 
  { Ana(Root) elemanlar çekiliyor.
    Yani ParentID=0 olanalar }
  forpersonellinListe.Where(0)do
  begin
    dugum:=TreeView1.Items.Add(dugum,personell.Ad+' '+personell.Soyad+
      ' ('+personell.Unvan+')');
    dugum.ImageIndex:=personell.ID;
  end;
 
end;
 
procedureTForm1.TreeView1Click(Sender:TObject);
var
  ID:Integer;
begin
  ID:=TreeView1.Selected.ImageIndex;
 
  if(TreeView1.Selections[TreeView1.Selected.SelectedIndex].Count=0)then
  begin
    forpersonellinListe.Where(ID)do
    begin
      dugum:=TreeView1.Items.AddChild(TreeView1.Selected,
        personell.Ad+' '+personell.Soyad+' ('+personell.Unvan+')');
      dugum.ImageIndex:=personell.ID;
    end;
  end;
 
end;
 
end.

 
İşte Sonuç;

 
Kaynak Kodları Buradan İndirebilirsiniz

Gördüğünüz gibi hepsi bu kadar basit.Hiyerarşiyi coşturmak ve geliştirmek size kalmış.Düşününce insanın aklına güzel şeyler geliyor.Buda bir anlık fikir coşmasının ardından , yazdığım bir yazıydı.Güzel düşünün güzel olsun.
Güzel olacak güzel…
 
İsmail Kocacan (Yazılımcı Bozuntusu)

Kategori : Delphi | 29.06.2011 16:40:00  | 333 defa okundu  | 0 Yorum |

Yazara Ait Diğer Makaleler(51) Makaleye Yapılan Yorumlar İlk yorum yazan siz olun
Ara
 
Anket
Hangi VeriTabanı Yönetim Sistemini Kullanıyorsunuz ?