Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Совместимость с NVDA (программой экранного чтения) / 13 сообщений из 13, страница 1 из 1
11.07.2019, 16:51
    #39836481
crossa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
Кто-нибудь писал программы на Delphi, совместимые с программами экранного чтения для слабовидящих (например, NVDA)?

Возникла проблема с старой программой, написанной на Delphi 7. На форме лежит TLabel с текстом что-то типа "Введите текст", СПРАВА от него лежит TEdit, в которой и надо ввести текст. Расстояние между этими двумя элементами 16 пикселей. Слабовидящий пользователь жалуется, что при использовании NVDA TEdit и TLabel воспринимаются как не связанные друг с другом.

Из всей документации по написанию программ для слабовидящих у меня только эта ссылка:
https://edn.embarcadero.com/article/33642
Рекомендуют включить TLabel в tab order - это, по-моему, невозможно для TLabel.

Рекомендуют использовать TStaticText или TLabeledEdit - для моей программы это не совсем подходит.

Главная рекомендация - размещать TEdit справа от TLabel - так и было сделано в моей программе.

Кто-нибудь занимался вопросами совместимости программ на Delphi с NVDA? Буду признателен за советы; поделитесь секретами. Каких еще проблем стоит опасаться?

(Буду пробовать уменьшить расстояние между элементами окна; если не поможет, попробую заменить TLabel на TStaticText.)
...
Рейтинг: 0 / 0
11.07.2019, 17:19
    #39836496
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
У TLabel свойство FocusControl установлено?

Сам TLabel вообще NVDA читается? По идее не должен. Это же картинка
...
Рейтинг: 0 / 0
11.07.2019, 17:21
    #39836497
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
crossaTLabeledEdit - для моей программы это не совсем подходит.Почему?
...
Рейтинг: 0 / 0
11.07.2019, 17:35
    #39836506
Aniskin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
crossa,

NVDA и прочие реадеры используют стандартный "протокол" взаимодействия с элементами управления через UI Automation или ее простую форму Microsoft Active Accessibility. На внутреннем уровне оконному элементу посылается сообщение WM_GETOBJECT с запросом информации о объекте или его детях. Поскольку у TLabel нет своего окна, то вместо него сообщение принимает его родитель. И я не уверен, что Delphi7 знает, как правильно отвечать на сообщение WM_GETOBJECT. Для стандартных элементов управления в Windows есть встроенные механизмы ответа на WM_GETOBJECT. Поэтому самый простой способ сделать программу совместимой с UI Automation - использовать только стандартные контролы. В твоей ситуации проще всего действительно заменить TLabel на TStaticText. В Win10 есть Narrator, можешь посмотреть, как он реагирует на твое окно.
...
Рейтинг: 0 / 0
11.07.2019, 18:00
    #39836516
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
Aniskin, TLabej ни вкоем случае не элемент управления Windows.
Это лишь картинка, как сазал _Vasilisk_
А TLabeledEdit это их помесь :)
...
Рейтинг: 0 / 0
11.07.2019, 18:06
    #39836521
Aniskin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
GatorTLabel ни вкоем случае не элемент управления Windows.
Вопрос терминологии ) А StaticText - это элемент управления? По msdn-новскому он называется Static Control . A static control is a control that enables an application to provide the user with informational text and graphics that typically require no response.
...
Рейтинг: 0 / 0
11.07.2019, 18:10
    #39836524
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
AniskinА StaticText - это элемент управления?Да. У него есть HWND
...
Рейтинг: 0 / 0
11.07.2019, 18:14
    #39836526
Aniskin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
_Vasilisk_, Gator

Я не совсем понял. Вы бы не могли процитировать мое конкретное предложение в исходном ответе, которое вы оспариваете, где бы я утверждал, что TLabel является оконным элементом с собственным окном. Я как раз таки утверждал обратное.
...
Рейтинг: 0 / 0
11.07.2019, 18:15
    #39836527
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
AniskinИ я не уверен, что Delphi7 знает, как правильно отвечать на сообщение WM_GETOBJECTПосмотрел в XE3 и Rio. Кастомная обработка WM_GETOBJECT производится только в TCustomActionMenuBar. Так, что даже с TLabeledEdit не взлетит
...
Рейтинг: 0 / 0
11.07.2019, 18:17
    #39836531
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
Aniskinкоторое вы оспариваете,Я не оспариваю. Я отвечаю на конкретный вопросAniskinА StaticText - это элемент управления?
...
Рейтинг: 0 / 0
11.07.2019, 18:29
    #39836541
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
Aniskin,

Пардон, оказалось, я для кроссы писал. Это его вопрос и он хендл TLabel ищет. :)
...
Рейтинг: 0 / 0
11.07.2019, 18:36
    #39836545
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
crossa, чтобы разъяснить детали к-н DelphiControls, воспользуйся любым виншпионом
Я юзаю Window Detective, в основном
...
Рейтинг: 0 / 0
11.07.2019, 21:56
    #39836590
crossa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Совместимость с NVDA (программой экранного чтения)
Большое спасибо всем за ответы. Скачал свежую версию NVDA и нашел работающее решение для Delphi 7.

Да, вы правы: про TLabel надо забыть. NVDA видит только TStaticText, наследника от TWinControl.

Самый важный момент: в тексте файла DFM описание объекта TStaticText должно идти сразу же после описания объекта TEdit, к которому эта надпись относится. Только в этом случае NVDA свяжет вместе поле ввода данных и его описание. (Щелкнуть правой кнопкой мыши на форме, выбрать пункт контекстного меню "View as Text" и переместить объекты так, чтобы каждый TStaticText стоял после своего TEdit.)

Свойства FocusControl и TabOrder у объекта TStaticText никакого значения не имеют.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Совместимость с NVDA (программой экранного чтения) / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]