【问题标题】:How to set the Accessible Name associated with a TEdit control?如何设置与 TEdit 控件关联的可访问名称?
【发布时间】: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


【解决方案1】:

VCL 如何公开无障碍功能?

根本没有。

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

例如:

Creating Accessible UI components in Delphi

【讨论】:

  • AFAIK,目前只有 TActionBar 实现了这个功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 2013-09-14
相关资源
最近更新 更多