代码之家  ›  专栏  ›  技术社区  ›  Ian Boyd

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

  •  16
  • Ian Boyd  · 技术社区  · 6 年前

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

    enter image description here

    他们听到的只是:

    编辑文本

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

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

    可访问性系统能够获取控件的 “可访问名称” :

    enter image description here

    批次分隔符。编辑文本

    这可以通过实现 IAccessible 界面它获取窗口的实现 I可访问 通过发送hWnd WM_GETOBJECT 消息应用程序从不发送此消息,但:

    由Microsoft Active Accessibility和Microsoft UI Automation发送,以获取有关服务器应用程序中包含的可访问对象的信息。

    应用程序从不直接发送此消息。Microsoft Active Accessibility发送此消息以响应对AccessibleObjectFromPoint、AccessibleObjectFromEvent或AccessibleObjectFromWindow的调用。

    但我们可以 手柄 消息,并返回 I可访问 调用方接口:

    case Message.Msg of
    WM_GETOBJECT: 
       begin
          if DWORD(Message.LParam) = OBJID_CLIENT then
             Message.Result := LResultFromObject(IAccessible, Message.WParam, FAccessible);
       end;
    end;
    

    在中。网络世界,他们的包装 Edit control ,公开了设置 可访问名称 使用 Control.AccessibleName property:

    控制AccessibleName属性

    获取或设置可访问性客户端应用程序使用的控件的名称。

    public string AccessibleName { get; set; }
    

    我不知道底层的Microsoft Edit控件如何公开辅助功能。我找不到任何关于 I可访问 在VCL中,TCustomActionMenuBar除外。

    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.
    

    奖金读数

    1 回复  |  直到 6 年前
        1
  •  8
  •   Remy Lebeau    6 年前

    VCL如何公开辅助功能?

    根本没有。

    如果需要此功能,则必须手动实现与 IAccessible 然后将VCL控件子类化以响应 WM_GETOBJECT 信息,就像你在问题中显示的那样。

    例如:

    Creating Accessible UI components in Delphi