|
{
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.
|