<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=93293&amp;view=findpost&amp;p=700730</guid>
        <pubDate>Sat, 30 Apr 2005 14:05:17 +0000</pubDate>
        <title>Дескрипторы форм и элементов управления в MS OFFICE</title>
        <link>https://forum.sources.ru/index.php?showtopic=93293&amp;view=findpost&amp;p=700730</link>
        <description><![CDATA[Old Bat: <span class="tag-font" data-value="Arial" style="font-family:Arial">Стандартные элементы управления, отображаемые в формах, на самом деле не являются окнами. Другими словами, им не ставится в соответствие внутренний идентификатор (дескриптор) окна Windows и они не могут реагировать на сообщения Windows. Элемент управления в форме MS Office — это всего лишь «картинка» на экране. Данный подход, вероятно, оправдан стремлением сэкономить ресурсы Windows. (Хотя, следует изрядно потрудиться, чтобы израсходовать эти ресурсы в 32-разрядных версиях Windows)<br>
Например, неплохо было бы иметь возможность обрабатывать элементы управления посредством функции SendMessage, включенной в состав API Windows. Но, как бы нам этого ни хотелось, в офисе это невозможно.<br>
Еще раз напомню, что все вышеописанное относится к стандартным элементам управления, т.е. к тем элементам, которые описаны в Microsoft Forms 2.0 Object Library (FM20.DLL) и не относится к другим элементам, например из MSComctlLib (MSCOMCTL.OCX)<br>
<br>
<span class='tag-size' data-value='8' style='font-size:8pt;'><span class="tag-color tag-color-named" data-value="gray" style="color: gray">Частично использованы материалы: &quot;From Access 2002 Desktop Developer&#39;s Handbook&quot;<br>
Litwin, Getz, and Gunderloy. (Sybex, 2001)</span></span><br>
<br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue"><strong class='tag-b'>ACCESS</strong></span><br>
<br>
Можно попытаться отловить дескриптор в тот момент, когда элемент  станет активным (с помощью GetFocus из WINAPI), но в большинстве случаев он будет игнорировать сообщения, посланные ему посредством функции SendMessage<br>
<br>
Access все-таки реагирует, по крайней мере, на одно сообщение Windows — EM_SETLIMITTEXT. Поэтому,например, функцию SendMessage можно иcпользовать для ограничения числа символов, вводимых пользователем в текстовое поле. <br>
<br>
<span class="tag-color tag-color-named" data-value="blue" style="color: blue"><strong class='tag-b'>WORD, EXCEL</strong><br>
</span><br>
В отличие от ACCESS (где Вам доступны дескрипторы форм и отчетов) - максимум, что Вы сможете получить стандартным способом – это дескриптор окна офисного приложения (Application.Hwnd). Если все же необходимо получить дескриптор и «досконально поработать» с текущей формой – используйте GetActiveWindow из  WINAPI (Declare Function GetActiveWindow Lib &quot;user32&quot; Alias &quot;GetActiveWindow&quot; () As Long).<br>
Кстати, мои попытки «провернуть фокус» с EM_SETLIMITTEXT окончились полным крахом (что, собственно, и следовало ожидать, т.к. для ACCESS это скорее полезный «ляп»).<br>
<br>
<br>
<br>
</span>]]></description>
        <author>Old Bat</author>
        <category>Особенности VBA-кода в различных офисных приложениях</category>
      </item>
	
      </channel>
      </rss>
	