UIAutomation: смешивание ProviderFragmentRoot и ProviderSimple

#ui-automation #screen-readers

Вопрос:

Для моего приложения (VCL, Delphi) я внедряю поддержку чтения с экрана с помощью UIAutomation. Это прекрасно работает с реализацией ProviderFragmentRoot для элементов управления и ProviderSimple для логических элементов, таких как записи в выпадающем списке.

Чего я хочу достичь: На панели у меня есть различные элементы управления, один под другим. Они разделены заголовками. Эти заголовки отображаются только на панели, т. е. они не являются элементами управления и не имеют HWND. Таким образом, заголовки не отображаются в дереве UIAutomation.

Мне нужны некоторые подсказки (любая статья для чтения или прямые примеры и т. Д.) О том, как реализовать ProviderFragmentRoot для панели, чтобы включить заголовки в дерево UIAutomation.

То, что у меня сейчас есть, — это что-то вроде этого:

  • Панель
    • Изменить 1: UIA_EditControlTypeId
    • Изменить 2: UIA_EditControlTypeId
    • Изменить 3: UIA_EditControlTypeId
    • Изменить 4: UIA_EditControlTypeId

Что мне нужно:

  • Панель
    • Заголовок 1: UIA_GroupControlTypeId
    • Изменить 1: UIA_EditControlTypeId
    • Изменить 2: UIA_EditControlTypeId
    • Заголовок 2: UIA_GroupControlTypeId
    • Изменить 3: UIA_EditControlTypeId
    • Изменить 4: UIA_EditControlTypeId

Насколько я понимаю, UIAutomation, дерево строится на основе отношений «родитель-потомок» элементов управления. Мне также удалось изменить элементы управления, например, сделать всплывающее окно дочерним элементом соответствующего редактирования. Я просто немного заблудился в поиске информации о том, как смешивать элементы управления и логические элементы внутри дерева. Я видел такие конструкции в других приложениях, и это дает читателю возможность считывать заголовки.