#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, дерево строится на основе отношений «родитель-потомок» элементов управления. Мне также удалось изменить элементы управления, например, сделать всплывающее окно дочерним элементом соответствующего редактирования. Я просто немного заблудился в поиске информации о том, как смешивать элементы управления и логические элементы внутри дерева. Я видел такие конструкции в других приложениях, и это дает читателю возможность считывать заголовки.