Как установить доступное имя, связанное с элементом управления TEdit?
Если пользователь использует программу чтения с экрана (например, Microsoft-рассказчик), и их фокус входит в текстовое поле:
Все, что они слышат, это:
Редактирование текста
Между тем в доступных приложениях,
- таких как Microsoft File Explorer
- Microsoft Word
- Майкрософт Эксель
- Microsoft Outlook
система доступности может получить контроль "Доступное имя":
Серийный разделитель. Редактирование текста
Это работает, хотя окно, реализующее интерфейс 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