TListは、項目が変更(追加・削除・抽出)されたときOnNotifyイベントが発生します。
OnNotifyイベントを使用すれば、変更(追加・削除・抽出)されたことを知ることができます。
サンプルアプリケーションでは、リストに項目を追加や削除などを行うと、メモ欄に変更内容を表示します。
/// <summary>リストに登録する項目</summary>
TMyItem = record
/// <summary>項目が作成された時間</summary>
Time: string;
constructor Create(ATime: TDateTime);
end;
TForm2 = class(TForm)
…
private
{ Private 宣言 }
FList: TList<TMyItem>;
{ Public 宣言 }
/// <summary>
/// 項目がリストに追加または削除されたときに発生するイベント
/// </summary>
/// <param name="Item">
/// 追加または削除された項目
/// </param>
/// <param name="Action">
/// 変更のタイプ
/// </param>
procedure MyNotify(Sender: TObject; const Item: TMyItem;
Action: TCollectionNotification);
end;
フォームを作成するときに、リストのOnNotifyイベントにMyNotifyを設定します。
リストのに項目が追加・削除されるとMyNotifyが呼ばれます。。
procedure TForm2.FormCreate(Sender: TObject);
begin
FList := TList<TMyItem>.Create;
FList.OnNotify := MyNotify;
end;
MyNotifyイベントでは、リストの項目が変更されると、メモ欄に変更処理と項目を表示します。
procedure TForm2.MyNotify(Sender: TObject; const Item: TMyItem;
Action: TCollectionNotification);
begin
case Action of
cnAdded:
Memo1.Lines.Add('追加:' + Item.Time);
cnRemoved:
Memo1.Lines.Add('削除:' + Item.Time);
cnExtracted:
Memo1.Lines.Add('抽出:' + Item.Time);
end;
end;
Addボタンを押すと、リストに項目を追加します。
procedure TForm2.ButtonAddClick(Sender: TObject);
begin
Memo1.Clear;
FList.Add(TMyItem.Create(Now));
end;
Removeボタンを押すと、リストの先頭の項目を削除します。
procedure TForm2.ButtonRemoveClick(Sender: TObject);
begin
Memo1.Clear;
FList.Delete(0);
end;
Extractedボタンを押すと、リストの先頭に項目を代入します。
procedure TForm2.ButtonExtractClick(Sender: TObject);
begin
Memo1.Clear;
FList.Items[0] := TMyItem.Create(Now);
end;
Clearボタンを押すと、リストの項目を削除します。
procedure TForm2.ButtonClearClick(Sender: TObject);
begin
Memo1.Clear;
FList.Clear;
end;