5. Створення подій компоненту
У нашому прикладі вимагається ввести подію OnClear, що відбувається у момент очищення вікна методом Clear. У C++Builder подія - це просто спеціальна властивість, що є покажчиком функції. Тип узагальненого покажчика на функцію, якій передається один параметр типу TComponent (зазвичай this), TNotifyEvent. Подібний тип використовується в C++Builder для подій типу OnClick і багатьох інших, які передають в обробник тільки один параметр i TObject *Sender. Підійде цей тип і для події OnClear. В цьому випадку оголошення події може мати вигляд:
private:
…
TNotifyEvent FOnClear;
…
__published:
…
__property TNotifyEvent OnClear = {read=FonClear, write=FOnClear};
Ці оголошення створює поле FOnClear типу TNotifyEvent, відповідне події. А сама подія оголошується точно так, як і будь-яка властивість. Тільки у read і write записуються не функції читання і запису, а само поле.
Залишається тільки викликати в потрібний момент обробник події користувача, якщо користувач його передбачив. Перевірка, чи є обробник користувача, здійснюється перевіркою відповідної події як булевої величини, повертаючою true, якщо користувач передбачив свій обробник. У нашому випадку ця перевірка і виклик обробника користувача здійснюється додаванням в початок написаної раніше процедури методу Clear оператора:
if (OnClear) OnClear(this);
який викликає обробник користувача OnClear.
Внесіть вказані зміни у файли компонента, відкомпілюйте їх, виделіть на формі тестового додатка компонент EditLetNuml і подивитеся сторінку подій в Інспекторові Об'єктів. Ви побачите, що в списку його подій з'явилася подія OnClear. Двічі клацніть на його правому вікні і ви побачите в тексті модуля заготовку для обробника цієї події :
void __fastcall TForml::EditLetNum1Clear(TObject *Sender)
{
}
Внесіть в цей обробник який-небудь оператор, який би відображував на екрані факт звершення цієї події, наприклад:
ShowMessage("Подія OnClear");
Перевірте ваше тестове застосування в роботі.
Конторольні питання
Яким чином відбувається підключення до ІСР пакету компоненту?
З яких етапів складається розробка нового компоненту?
Яким чином можна вилучити зареєстрований пакет?
Література: [1], стор. 524 - 534