yine TTask class'ının nesne referanslarının listesini tuttuğumuz TObjectList classından türeme bir TTaskList sınıfımız(Torbamız(!),Collection'ımız) var.
Ve şunu yapmak istiyoruz.Her taskı torbaya attığımda(eklediğimde) otomatik olarak Start; procedürü çalışsın.
Evet listeye ekledikten hemen sonra ATask.Start; şeklinde çağırabiliriz.Fakat bunu yapmak istemiyoruz....
uTask.pas
Kod: Tümünü seç
unit uTasks;
interface
uses
Dialogs,
Generics.Defaults,
Generics.Collections;
type
TTask = class
private
FTaskName: string;
public
property TaskName: string read FTaskName write FTaskName;
procedure Start;
end;
TTaskList = class(TObjectList<TTask>)
private
procedure OnNotifyEvent(Sender: TObject; const Item: TTask;
Action: TCollectionNotification);
public
constructor Create;
end;
implementation
{ TTask }
procedure TTask.Start;
begin
ShowMessage('Task is Started');
end;
{ TTaskList }
constructor TTaskList.Create;
begin
inherited;
Self.OnNotify := OnNotifyEvent;
end;
procedure TTaskList.OnNotifyEvent(Sender: TObject; const Item: TTask;
Action: TCollectionNotification);
begin
if Action = cnAdded then
Item.Start;
end;
end.
Kod: Tümünü seç
unit Unit2;
interface
uses
uTasks,
Winapi.Windows,
Winapi.Messages,
System.SysUtils,
System.Variants,
System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
ATask: TTask;
ATaskList: TTaskList;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
ATaskList := TTaskList.Create;
ATask := TTask.Create;
ATask.TaskName := 'Task 1';
ATaskList.Add(ATask);
end;
end.