【发布时间】:2018-09-07 08:22:14
【问题描述】:
如果用户正在使用屏幕阅读器(例如 Microsoft Narrator),并且他们的焦点进入文本框:
他们听到的只是:
编辑文字
同时在可访问的应用程序中,
- 例如 Microsoft 文件资源管理器
- Microsoft Word
- Microsoft Excel
- 微软 Outlook
无障碍系统能够获取控件的“无障碍名称”:
批处理分隔符。编辑文本
这在实现IAccessible 接口的窗口中有效。它通过向hWnd 发送WM_GETOBJECT 消息来获得一个窗口的IAccessible 实现。但应用程序从不发送此消息:
由 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 control 的包装器公开了一种使用 Control.AccessibleName property: 设置 TextBox 的可访问名称的方法
Control.AccessibleName 属性
获取或设置无障碍客户端应用程序使用的控件的名称。
public string AccessibleName { get; set; }
我不知道底层的 Microsoft Edit 控件如何公开辅助功能。除了 TCustomActionMenuBar,我在 VCL 中找不到对 IAccessible 的任何引用。
VCL 如何公开无障碍功能?
如何设置与 TEdit 控件关联的 Accessible Name?
如何设置与编辑控件关联的可访问名称?
奖金聊天
可访问项目的名称通过read-only IAccessible.accName property.返回
Property Access Type Description
-------- ----------- ----------------------------------------------------------
accName Read-only The name of the object. All objects support this property.
See get_accName.
阅读奖励
【问题讨论】:
-
自行实现
IAccessible接口(您在其Get_accName方法中返回的可访问名称)。
标签: delphi accessibility delphi-xe6 uiaccessibility