Здравствуйте, Бурдин Игорь.
> Лучше всего создать класс, который подгружает dll скринридеров и выводит
> строки на проговаривание или брайлевский дисплэй, и скармливать в нужное
> время нужные тексты.
Это ужасное решение. Вспомните исходную постановку задачи: обновление
информации каждую секунду.
Вам бы хотелось работать в интерфейсе, из которого каждую секунду в речевой
API программы экранного доступа отправляются какие-то данные?
Надо сделать обычный элемент progress, через который и отображать динамику
выполнения процесса, если время там представлено как обратный отсчёт.
Если же это просто время от начала и до конца, без понимания общего объёма
задачи, то лучше вообще никак не делать, чем бомбардировать речевые API
каждую секунду. Пользователь сам, при желании, сможет прочитать эту
информацию в окне по запросу, типа Insert+B и всё такое. Для повышения
удобства эти часы можно сделать либо фокусируемым с клавиатуры label, либо в
виде edit read only.
> Я так делаю в любых проектах на любых языках, лучше способов не знаю
Безотносительно обсуждаемой ситуации, лучшим способом для задач такого
класса является использование универсальных библиотек для работы с речевыми
API программ экранного доступа, например, talk.dll и ей подобных.
Они Они содержат поддержку уже всех основных программ экранного доступа в
общем интерфейсе, а также самостоятельно проверяют их запущенность в
системе. Также умеют, например, перенаправить речевой вывод в SAPI5, если ни
один из чтецов не найден.Например,
> Ещё можно текст передавать, минуя dll-библиотеки, через COM
> например, но функциональность может быть ниже, тут не уверен, и где-то
> слышал, что это не очень хорошо вплане ресурсов.
com-сервер есть не у каждой программы, равно как не у каждой программы есть
API через dll. По сути, насколько помню, одновременно и то, и другое есть
только у JAWS. Причём, даже у JAWS эти два варианта неэквивалентны и
com-сервер лучше справляется с Unicode. Это как раз и служит неплохим
поводом использовать универсальные решения, чтобы не изобретать лишний раз
велосипед и не реализовывать поддержку всех возможных API с нуля и с учётом
всех нюансов.
Ну а что касается исходной темы, то label надо либо разместить строго над
кнопкой или слева от неё, ну и перед ней в порядке элементов GUI, либо ещё
можно использовать не label, а group с заголовком, обхватив рамкой нужный
элемент управления или группу таких элементов, для которых нужен общий
заголовок.
Единственно JAWS будет читать заголовок group у всех элементов группы, а
NVDA лишь один раз при входе в эту группу. То есть тут уже надо
самостоятельно решать, как кажется лучше с учётом специфики разных программ.
Успехов. Никита.