Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2019.01.13;
Скачать: [xml.tar.bz2];

Вниз

Событие 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;
Скачать: [xml.tar.bz2];

Наверх





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


2-1476199440
QAZ
2016-10-11 18:24
2019.01.13
строка как объект в коде


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


2-1476918568
Artem78
2016-10-20 02:09
2019.01.13
Событие Change у TCollection


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский