如果用户正在使用屏幕阅读器(例如Microsoft讲述人),他们的焦点会进入文本框:
他们所听到的只有:
编辑文字
同时在可访问的应用程序中,
辅助功能系统能够获取控件的“可访问名称”:
批处理分隔符。编辑文本
这可以通过实现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控件关联的可访问名称?
如何设置与编辑控件关联的可访问名称?
可访问项目的名称通过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.
答案 0 :(得分:8)
VCL如何公开辅助功能?
根本没有。
如果您需要此功能,则必须在自己的代码中手动实现与IAccessible
相关的所有内容,然后将VCL控件子类化以响应WM_GETOBJECT
消息,就像您在你的问题。
例如: