Хороший пример создания событий есть на форуме. Попробую повторить, по аналогии, на примере загрузки файла в некоторую директорию.
Класс, создающий событие
Пусть у нас есть некоторый класс, внутри которого нужно создать событие. Например, класс формы загрузки файлов. Тогда внутри него мы можем написать следующее.
Поле события
1 2 3 4 |
... private FOnEndUploading:TNotifyEvent; ... |
Процедура запуска события
1 2 3 4 |
... protected procedure StartOnEndUploading; dynamic; ... |
Публичное свойство
1 2 3 4 |
... public property OnEndUploading:TNotifyEvent read FOnEndUploading write FOnEndUploading; ... |
Реализация запуска события
1 2 3 4 |
procedure TfMediaLoader.StartOnEndUploading; begin if Assigned(FOnEndUploading) then FOnEndUploading(Self); end; |
Сам запуск события можно осуществлять в любом месте программы, например при окончании загрузки файла, например так…
1 2 3 |
... if TFile.Exists(DestFileName) then StartOnEndUploading; ... |
Класс, принимающий событие
В классе, принимающем событие, например другая форма, в которой используется форма загрузчика файлов, нам нужно определить процедуру обработки события. То есть, что будет происходить, когда событие будет запущено?
1 2 3 4 5 6 7 8 9 |
procedure TMainFormScale.EndUploading(Sender: TObject); var fileName: string; fileType: string; begin fileName:=ExtractFileName(fMediaLoader_Inherited.LastUploaded.FilePath); fileType:=fMediaLoader_Inherited.LastUploaded.FileType; ShowMessage('Файл ' + FileName + ' успешно загружен в библиотеку' + #13#10 + 'Тип файла=' + Filetype); end; |
И, соответственно присвоить этот обработчик объекту, в OnCreate или On Show
1 |
fMediaLoader_Inherited.OnEndUploading := EndUploading; |
Как создать событие с параметрами?
Нужно просто определить свой класс, например так
1 2 3 4 |
type TNotifyEvent = procedure (Sender: TObject) of object; // простой обработчик type TMyShitEvent1 = procedure (Sender: TObject; const Param: <тип_параметра>) of object; // не совсем простой обработчик type TMyShitEvent2 = procedure (Sender: TObject; var Param: <тип_параметра>) of object; // не совсем простой обработчик type TMyFuncEvent = function (Sender: TObject<; другие параметры>): <тип> of object; // и даже так можно! |