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....
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) 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.
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.
Hiç yorum yok:
Yorum Gönder