Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // CONTACT LIST CLASS UNIT
- unit ContactList;
- interface
- uses
- Windows, Messages, SysUtils, Classes, VirtualTrees, Generics.Collections;
- Type
- TUser = Class
- Public
- DisplayName,
- SkypeID : String;
- UserNode : PVirtualNode;
- Constructor Create(DispName, SkID : String);
- End;
- Type
- TCategory = Class
- Private
- VT : TVirtualStringTree;
- Public
- Name : String;
- ID : Integer;
- Users : TObjectList<TUser>;
- CategoryNode : PVirtualNode;
- Constructor Create(Tree : TVirtualStringTree; FName : String; FID : Integer);
- Destructor Destroy;
- Function AddUser(DispName, SkID : String):TUser;
- End;
- Type
- TContactList = Class
- Private
- VT : TVirtualStringTree;
- Public
- Categories : TObjectList<TCategory>;
- Constructor Create(Tree : TVirtualStringTree);
- Destructor Destroy;
- Function AddCategoryToList(DisplayName : String; ID : Integer):TCategory;
- End;
- implementation
- { TCategory }
- constructor TCategory.Create(Tree : TVirtualStringTree; FName: String; FID: Integer);
- begin
- Users := TObjectList<TUser>.Create;
- Name := FName;
- ID := FID;
- VT := Tree;
- end;
- destructor TCategory.Destroy;
- begin
- Users.Free;
- end;
- function TCategory.AddUser(DispName, SkID: String): TUser;
- Var
- XUser : TUser;
- begin
- XUser := TUser.Create(DispName, SkID);
- XUser.UserNode := Self.VT.AddChild(CategoryNode,XUser);
- Self.Users.Add(XUser);
- Result := XUser;
- end;
- { TUser }
- constructor TUser.Create(DispName, SkID: String);
- begin
- DisplayName := DispName;
- SkypeID := SkID;
- end;
- { TContactList }
- constructor TContactList.Create(Tree : TVirtualStringTree);
- begin
- VT := Tree;
- Categories := TObjectList<TCategory>.Create;
- end;
- destructor TContactList.Destroy;
- begin
- Categories.Free;
- end;
- Function TContactList.AddCategoryToList(DisplayName : String; ID : Integer):TCategory;
- Var
- Ctg : TCategory;
- Begin
- Ctg := TCategory.Create(VT, DisplayName,ID);
- Ctg.CategoryNode := VT.AddChild(Nil, Ctg);
- Categories.Add(Ctg);
- Result := Ctg;
- End;
- end.
- /////////////////////////////////////////////////////////////////////////////
- // Main Unit!
- unit uMain;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, VirtualTrees, Generics.Collections, ContactList, StdCtrls;
- type
- TfrmMain = class(TForm)
- VT: TVirtualStringTree;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure VTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
- Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
- private
- { Private declarations }
- public
- { Public declarations }
- ContactList : TContactList;
- end;
- var
- frmMain: TfrmMain;
- implementation
- {$R *.dfm}
- procedure TfrmMain.FormCreate(Sender: TObject);
- Var
- I, J : Integer;
- Ctg : TCategory;
- User : TUser;
- begin
- VT.NodeDataSize := SizeOf(Pointer);
- ContactList := TContactList.Create(VT);
- VT.BeginUpdate;
- for I := 1 to 1000 do
- begin
- Ctg := ContactList.AddCategoryToList('Category #'+IntToStr(I),Random(100));
- for J := 1 to 1000 do
- begin
- User := Ctg.AddUser('User #'+IntToStr(J),IntToStr(Random(3000)));
- end;
- end;
- VT.EndUpdate;
- end;
- procedure TfrmMain.FormDestroy(Sender: TObject);
- begin
- ContactList.Free;
- end;
- procedure TfrmMain.VTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
- Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
- Var
- Obj : TObject;
- Ctg : TCategory;
- User : TUser;
- begin
- Obj := TObject(Sender.GetNodeData(Node)^);
- if Obj is TCategory then
- begin
- Ctg := TCategory(Obj);
- case Column of
- 0: CellText := Ctg.Name;
- 1: CellText := IntToStr(Ctg.ID);
- end;
- end;
- if Obj is TUser then
- begin
- User := TUser(Obj);
- case Column of
- 0: CellText := User.DisplayName;
- 1: CellText := User.SkypeID;
- end;
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement