Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2016, 00:55   #1
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию Событие Change для TCollection

Здравствуйте. Написал простой класс для хранения списков заданий. Хотелось бы узнать, есть ли у классов TCollection и TCollectionItem возможность узнать об изменении элементов?

В идеале хочу сделать так: я вешаю обработчик на событие Change класса TTasks, и когда происходит изменение в списке срабатывает моя функция. Она получает 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.
CraZZZy-GameRRR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
change событие для select ВалекFCRK JavaScript, Ajax 1 26.10.2015 12:20
VBA. Событие change. Как недопустить зацикливания pier Microsoft Office Excel 2 10.06.2015 11:19
combobox событие change Bezdar Microsoft Office Excel 3 13.06.2013 12:14
Как правильно вставить событие Change листа Kalikazandr Microsoft Office Excel 9 14.08.2012 16:25
Метод Change для фигур mchip Microsoft Office Excel 2 10.11.2009 15:51