Access 2002

Текстовое поле


К моменту запуска вашего кода символ уже будет добавлен в текстовое поле. Можно попробовать использовать события Key Down и KeyPress, но у них есть свои ограничения. Поэтому отправка сообщения текстовому полю оказалась простейшим способом решения задачи.

Форма-пример frmLimitChars из базы данных CH06.MDB позволяет задать максимальное число символов, которое можно ввести в текстовое поле. Затем она вызывает функцию SendMessage, чтобы передать текстовому полю это значение. Полный код данной формы приведен листинге 6.21, а в действии она показана на  6.35.

Ограничением при использовании этой формы служит то, что в обработчиках событий Enter и GotFocus нельзя рассматривать элемент управления как настоящее окно. Единственным местом, где элемент управления представляет собой настоящее окно, является обработчик события Change. Поэтому именно к этому событию мы и присоединили код формы frmLimitChars (мы не испытывали в этом качестве событие BeforeUpdate, поэтому вы можете реализовать это самостоятельно). Разумеется, это означает, что данный код вызывает функцию SendMessage всякий раз, когда вы вводите очередной символ в текстовое поле. По сравнению со скоростью ввода символов вызов Windows API выполняется настолько быстро, что пользователь не чувствует задержек.

Код формы frmLimitChars, используя функцию GetFocus из Windows API, получает вначале внутренний идентификатор окна Windows:

Получим для текущего окна внутренний идентификатор Windows. hWnd – GetFocus

После этого код прибегает к ряду ухищрений для обработки ситуации, согласно которой заданное вами максимальное число символов в текстовом поле оказывается меньше числа уже введенных символов. В этом случае последнее число становится максимально допустимым числом символов. Если этого не сделать, пользователь не сможет удалять лишние символы по одному.

Комментарии закрыты