Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2019.01.13;
Скачать: CL | DM;

Вниз

Событие Change у TCollection   Найти похожие ветки 

 
Artem78   (2016-10-20 02:09) [0]

Здравствуйте. Скажите пожалуйста, как у экземпляра класса 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.


 
Leonid Troyanovsky ©   (2016-10-20 10:45) [1]


> Artem78   (20.10.16 02:09)

TTasksList.Changed; override ?

--
Regards, LVT.


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

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


 
Rouse_ ©   (2016-10-20 19:13) [3]

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


 
Artem78 ©   (2016-10-24 03:54) [4]

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



Страницы: 1 вся ветка

Текущий архив: 2019.01.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.003 c
15-1476480602
Юрий
2016-10-15 00:30
2019.01.13
С днем рождения ! 15 октября 2016 суббота


11-1267550254
Gyurza
2010-03-02 20:17
2019.01.13
Анимированная иконка в трее


15-1476370435
aka
2016-10-13 17:53
2019.01.13
прерывается видео с флешки на телевизоре


2-1476367396
Дмитрий
2016-10-13 17:03
2019.01.13
Странности DisplayFormat


2-1477150686
валя
2016-10-22 18:38
2019.01.13
Не старндарный массив