Зміна обробників стандартних подій
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
У ряді випадків необхідно створити для компонента власний обробник стандартної події та одночасно залишити користувачеві можливість реагувати на цю подію. У цьому випадку можна перекрити стандартну подію. Наприклад:
procedure Click(Sender: TObject); public
конструктор Create(AOwner: TComponent); override; published
TMyComponent.Click(Sender: TObject); begin if Assigned(FOnClick) then FOnClick(Sender); // Викликаємо оброблювач користувача // Робимо свою роботу:
Однак у більшості випадків у батьківському класі передбачена своя процедура-обробник, яка здійснює диспетчеризацію події. Диспетчеризація події полягає в перевірці визначеності користувача обробника і передачі йому управління. Ім'я процедури диспетчеризації виходить з імені події^шляхом відкидання префікса On або заміни On на Do, наприклад MouseMove, MouseDown, Click, DoEnter, DoMouseWheel і т. д. Процедура диспетчеризації зазвичай оголошується в секції protected батьківського класу як динамічна:
Для додавання власної функціональності до обробника стандартної події простіше перекривати не подію в цілому, а лише процедуру диспетчеризації:
У переважній більшості випадків нестандартну обробку події слід робити після звернення до успадкованого оброблювача та виклику оброблювача користувача, щоб у процесі нестандартної обробки можна було врахувати зміни, внесені до властивостей компонента процедурою диспетчеризації та обробником користувача у відповідь на стандартну подію.