Ian*_*oyd 16 delphi accessibility uiaccessibility delphi-xe6
如果用户正在使用屏幕阅读器(例如Microsoft Narrator),并且他们的焦点进入文本框:
他们听到的只是:
编辑文字
同时在无障碍应用中,
辅助功能系统能够获得控件的"可访问名称":
批次分隔符.编辑文字
这通过实现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;
Run Code Online (Sandbox Code Playgroud)
在.NET世界中,它们围绕Edit控件的包装器公开了一种使用Control.AccessibleName属性设置TextBox 的可访问名称的方法:
Control.AccessibleName属性
获取或设置辅助功能客户端应用程序使用的控件的名称.
Run Code Online (Sandbox Code Playgroud)public string AccessibleName { get; set; }
我不知道底层的Microsoft Edit控件如何公开辅助功能.除了TCustomActionMenuBar之外,我在VCL中找不到任何对IAccessible的引用.
VCL如何公开辅助功能?
如何设置与TEdit控件关联的可访问名称?
如何设置与编辑控件关联的可访问名称?
可访问项的名称通过只读IAccessible.accName属性返回.
Property Access Type Description
-------- ----------- ----------------------------------------------------------
accName Read-only The name of the object. All objects support this property.
See get_accName.
Run Code Online (Sandbox Code Playgroud)
VCL如何公开辅助功能?
它完全没有.
如果您需要此功能,则必须IAccessible在自己的代码中手动实现与您自己相关的所有内容,然后将VCL控件子类化为响应WM_GETOBJECT消息,就像您在问题中所示.
例如: