Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.14.183.150] |
|
Сообщ.
#1
,
|
|
|
Стандартные элементы управления, отображаемые в формах, на самом деле не являются окнами. Другими словами, им не ставится в соответствие внутренний идентификатор (дескриптор) окна Windows и они не могут реагировать на сообщения Windows. Элемент управления в форме MS Office — это всего лишь «картинка» на экране. Данный подход, вероятно, оправдан стремлением сэкономить ресурсы Windows. (Хотя, следует изрядно потрудиться, чтобы израсходовать эти ресурсы в 32-разрядных версиях Windows)
Например, неплохо было бы иметь возможность обрабатывать элементы управления посредством функции SendMessage, включенной в состав API Windows. Но, как бы нам этого ни хотелось, в офисе это невозможно. Еще раз напомню, что все вышеописанное относится к стандартным элементам управления, т.е. к тем элементам, которые описаны в Microsoft Forms 2.0 Object Library (FM20.DLL) и не относится к другим элементам, например из MSComctlLib (MSCOMCTL.OCX) Частично использованы материалы: "From Access 2002 Desktop Developer's Handbook" Litwin, Getz, and Gunderloy. (Sybex, 2001) ACCESS Можно попытаться отловить дескриптор в тот момент, когда элемент станет активным (с помощью GetFocus из WINAPI), но в большинстве случаев он будет игнорировать сообщения, посланные ему посредством функции SendMessage Access все-таки реагирует, по крайней мере, на одно сообщение Windows — EM_SETLIMITTEXT. Поэтому,например, функцию SendMessage можно иcпользовать для ограничения числа символов, вводимых пользователем в текстовое поле. WORD, EXCEL В отличие от ACCESS (где Вам доступны дескрипторы форм и отчетов) - максимум, что Вы сможете получить стандартным способом – это дескриптор окна офисного приложения (Application.Hwnd). Если все же необходимо получить дескриптор и «досконально поработать» с текущей формой – используйте GetActiveWindow из WINAPI (Declare Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As Long). Кстати, мои попытки «провернуть фокус» с EM_SETLIMITTEXT окончились полным крахом (что, собственно, и следовало ожидать, т.к. для ACCESS это скорее полезный «ляп»). |