На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! `
Не забудьте заглянуть в VB6 FAQ, так как большая часть VB-примеров актуальна и для VBA-раздела ;)
Модераторы: Old Bat, MIF
  
    > Дескрипторы форм и элементов управления в MS OFFICE
      Стандартные элементы управления, отображаемые в формах, на самом деле не являются окнами. Другими словами, им не ставится в соответствие внутренний идентификатор (дескриптор) окна 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 это скорее полезный «ляп»).



      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0372 ]   [ 16 queries used ]   [ Generated: 24.04.24, 23:10 GMT ]