424______________________________________________Глава 7

void _fastcall TEditLetNum::Clear()
(

Text = "";

FModified = false;

}

Теперь запишем главную процедуру, ради которой мы и создавали свой ком-
понент: процедуру, разрешающую или запрещающую ввод символов того или ино-
го типа. Для этого нам надо анализировать вводимый пользователем символ. Это
можно делать при обработке события OnKeyPress. Значит нам надо переопреде-
лить стандартный обработчик этого события в родительском компоненте TEdit.
Стандартные обработчики имеют то же имя, что и события, но без префикса On. To
есть обработчик события OnKeyPress имеет имя KeyPress. Передаваемые в стан-
дартный обработчик параметры те же, что вы можете видеть в заготовке процеду-
ры обработки события, если щелкнете на этом событии в Инспекторе Объектов, но
без параметра Sender.

Например, щелкнув в Инспекторе Объектов на событии OnKeyPress любого
компонента, вы увидите, что в процедуру обработки передаются параметры:

(TObject *Sender, char &Key)

Значит в создаваемом нами обработчике и при вызове родительского обработ-
чика надо использовать только один параметр: char &Key.

Таким образом, введение в модуль компонента требуемого нам обработчика
может свестись к включению в раздел класса protected объявления:

void _fastcall Keypress(char &Key);

и написанию в файле модуля реализации функции:

void   fastcall TEditLetNum::KeyPress(char &Key)
(
Set <char, '0', '9'> Dig;

Dig « '0' « '1' « '2' « '3' « '4' « '5'
« ' 6 ' « ' 7 ' « ' 8 ' « ' 9 ' ;

if ((! FEnableNum) && (Dig.Contains(Key)))
Key = 0;

if ((! FEnableLet) && !(Dig.Contains(Key)))
Key = 0;

if (Key != 0) FModified = true;

TEdit::KeyPress(Key) ;

)

Эта процедура сначала заменяет недопустимые символы нулевыми. Если сим-
вол допустимый, то задается значение true полю свойства FModified. В конце вы-
зывается метод KeyPress родительского класса.

Можете скомпилировать (быстрая кнопка Compile — слева на рис. 7.3.) и про-
тестировать полученный компонент. Возможный вид тестирующего приложения
представлен на рис. 7.7. Форма содержит компонент EditLetNum, кнопку Button с
надписью Clear (при ее нажатии выполняется метод Clear), метку Label, в которой
отображается значение свойства Modified компонента EditLetNum 1, и три инди-

Рис. 7.7

Тестовое приложение вашего
нового компонента