Форум: "Начинающим";
Текущий архив: 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