Как установить доступное имя, связанное с элементом управления TEdit?

Если пользователь использует программу чтения с экрана (например, Microsoft-рассказчик), и их фокус входит в текстовое поле:

enter image description here

Все, что они слышат, это:

Редактирование текста

Между тем в доступных приложениях,

  • таких как Microsoft File Explorer
  • Microsoft Word
  • Майкрософт Эксель
  • Microsoft Outlook

система доступности может получить контроль "Доступное имя":

enter image description here

Серийный разделитель. Редактирование текста

Это работает, хотя окно, реализующее интерфейс IAccessible. Он получает оконную реализацию IAccessible, отправив hWnd сообщение WM_GETOBJECT. Приложения никогда не отправляют это сообщение:

Отправлено Microsoft Active Accessibility и Microsoft UI Automation для получения информации о доступном объекте, содержащемся в серверном приложении.

Приложения никогда не отправляют это сообщение напрямую. Microsoft Active Accessibility отправляет это сообщение в ответ на вызовы AccessibleObjectFromPoint, AccessibleObjectFromEvent или AccessibleObjectFromWindow.

Но мы можем обрабатывать сообщение и возвращать IAccessible интерфейс вызывающему абоненту:

case Message.Msg of
WM_GETOBJECT: 
   begin
      if DWORD(Message.LParam) = OBJID_CLIENT then
         Message.Result := LResultFromObject(IAccessible, Message.WParam, FAccessible);
   end;
end;

В мире.NET их оболочка вокруг элемента управления Edit предоставляет способ установить доступное имя TextBox с помощью свойства Control.AccessibleName :

Свойство Control.AccessibleName

Возвращает или задает имя элемента управления, используемого клиентскими приложениями доступности.

public string AccessibleName { get; set; }

Я не знаю, как основной элемент управления Microsoft Edit предоставляет возможности доступа. Я не мог найти ссылку на IAccessible в VCL, за исключением TCustomActionMenuBar.

Как VCL раскрывает возможности доступности?

Как установить доступное имя, связанное с элементом управления TEdit?

Как установить доступное имя, связанное с элементом управления Edit?

Бонусная болтовня

Имя доступного элемента возвращается через свойство IAccessible.accName только для чтения.

Property  Access Type  Description
--------  -----------  ----------------------------------------------------------
accName   Read-only    The name of the object. All objects support this property.
                       See get_accName.

Чтение бонусов

Ответы

Ответ 1

Как VCL раскрывает возможности доступности?

Это совсем не так.

Если вы хотите эту функцию, вам необходимо вручную реализовать все, что связано с IAccessible в своем собственном коде, а затем подклассифицировать элементы управления VCL для ответа на сообщение WM_GETOBJECT, как и в вашем вопросе.

Например:

Создание доступных компонентов пользовательского интерфейса в Delphi