如何设置与TEdit控件关联的可访问名称?

时间:2018-03-28 15:06:26

标签: delphi accessibility delphi-xe6 uiaccessibility

如果用户正在使用屏幕阅读器(例如Microsoft讲述人),他们的焦点会进入文本框:

enter image description here

他们所听到的只有:

  

编辑文字

同时在可访问的应用程序中,

  • ,例如Microsoft File Explorer
  • Microsoft Word
  • Microsoft Excel
  • Microsoft Outlook

辅助功能系统能够获取控件的“可访问名称”

enter image description here

  

批处理分隔符。编辑文本

这可以通过实现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控件关联的可访问名称?

如何设置与编辑控件关联的可访问名称?

Bonus Chatter

可访问项目的名称通过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.

奖金阅读

1 个答案:

答案 0 :(得分:8)

  

VCL如何公开辅助功能?

根本没有。

如果您需要此功能,则必须在自己的代码中手动实现与IAccessible相关的所有内容,然后将VCL控件子类化以响应WM_GETOBJECT消息,就像您在你的问题。

例如:

Creating Accessible UI components in Delphi