Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Событие Change у TCollection [D7]


Artem78 ©   (2016-10-20 02:09:00) 

Здравствуйте. Скажите пожалуйста, как у экземпляра класса TCollection получить уведомление при изменении (удалении/добавлении) элементов?

Приведу пример того, что мне нужно реализовать. Есть класс заданий, который наследуется от TCollection. Это как бы модель - через него в дальнейшем планируется манипуляция объектами заданий. И есть динамический ListView, в котором будет отображатьс список заданий. Собственно говоря, хотелось бы сделать так, чтобы при изменении в коллекции, вызывалась пользовательская функция и ей передавались ID изменённых элементов. А я в этой функции отправлю ListView запрос на обновление нужных строк.

Думаю понятно, что я имею ввиду. Подскажите как это реализовать в Delphi 7.

Свои наброски класса заданий:
unit UTasks;

interface

uses SysUtils, Classes;

type
TTask = class(TCollectionItem)
 private
   //FID: integer;
   FTime: string;
   FTitle: string;
   FActive: boolean;
 public
   constructor Create(Collection: TCollection); override;
   //destructor Destroy; override;
 published
 //  property ID: integer read FID write FID;
   property Time: string read FTime write FTime;
   property Title: string read FTitle write FTitle;
   property Active: boolean read FActive write FActive;
 end;

 TTasksList = class(TCollection)
 private
   function GetTask(index:integer): TTask;
   procedure SetTask(index:integer; Value:TTask);
 public
   function Add:TTask;
   property Items[Index:integer]:TTask read GetTask write SetTask; default;
 end;

 TTasks = class(TComponent)
 private
   FTasksList: TTasksList;
 public
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
   procedure Save(Path:String);
   procedure Load(Path:String);
 published
   property TasksList: TTasksList read FTasksList write FTasksList;
   // ...
 end;

implementation

{ TTask }

constructor TTask.Create(Collection: TCollection);
begin
 inherited create(Collection);
 // ID := ...
 Time := '';
 Title := '';
 Active := false;
end;

{ TTasksList }

function TTasksList.Add: TTask;
begin
 Result := TTask(inherited Add);
end;

function TTasksList.GetTask(index: integer): TTask;
begin
 //Result := TTask(Inherited Items[index]);
 Result := TTask(Inherited GetItem(index));
end;

procedure TTasksList.SetTask(index: integer; Value: TTask);
begin
 {Items[Index]}GetItem(index).Assign(Value);
end;

{ TTasks }

constructor TTasks.Create(AOwner: TComponent);
begin
 inherited create(AOwner);
 TasksList := TTasksList.Create(TTask);
 //FTasksList := TTasksList.Create(Self);
end;

destructor TTasks.Destroy;
begin
 TasksList.Free;
 inherited;
end;

procedure TTasks.Load(Path: String);
var
 ms: TMemoryStream;
 fs: TFileStream;
begin

 fs := TFileStream.Create(path, fmOpenRead);
 ms := TMemoryStream.Create;
 try
   ObjectTextToBinary(fs, ms);
   ms.position := 0;
   ms.ReadComponent(Self);
 finally
   ms.Free;
   fs.free;
 end;
end;

procedure TTasks.Save(Path: String);
var
 ms: TMemoryStream;
 fs: TFileStream;
begin
 fs := TFileStream.Create(path, fmCreate or fmOpenWrite);
 ms := TMemoryStream.Create;
 try
   ms.WriteComponent(Self);
   ms.position := 0;
   ObjectBinaryToText(ms, fs);
 finally
   ms.Free;
   fs.free;
 end;
end;

end.


Artem78   (2016-10-24 03:54:00) [1]

Да, спасибо, вроде получилось.


Rouse_   (2016-10-20 19:13:00) [2]

Реализуй то что написано и поставь в обработчике метода бряк, там сам поймешь


Artem78   (2016-10-20 17:09:00) [3]

А поподробней можно?


Leonid Troyanovsky   (2016-10-20 10:45:00) [4]


> Artem78   (20.10.16 02:09)

TTasksList.Changed; override ?

--
Regards, LVT.


Наверх

Титульная страница Поиск, карта сайта Написать письмо