Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Совместимость с NVDA (программой экранного чтения)  [new]
crossa
Member

Откуда:
Сообщений: 70
Кто-нибудь писал программы на 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.)
  • 11 июл 19, 16:51    [21925091]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    _Vasilisk_
    Member

    Откуда: Украина, Харьков
    Сообщений: 11200
    У TLabel свойство FocusControl установлено?

    Сам TLabel вообще NVDA читается? По идее не должен. Это же картинка
    11 июл 19, 17:19    [21925114]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    _Vasilisk_
    Member

    Откуда: Украина, Харьков
    Сообщений: 11200
    crossa
    TLabeledEdit - для моей программы это не совсем подходит.
    Почему?
    11 июл 19, 17:21    [21925116]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    Aniskin
    Member

    Откуда:
    Сообщений: 320
    crossa,

    NVDA и прочие реадеры используют стандартный "протокол" взаимодействия с элементами управления через UI Automation или ее простую форму Microsoft Active Accessibility. На внутреннем уровне оконному элементу посылается сообщение WM_GETOBJECT с запросом информации о объекте или его детях. Поскольку у TLabel нет своего окна, то вместо него сообщение принимает его родитель. И я не уверен, что Delphi7 знает, как правильно отвечать на сообщение WM_GETOBJECT. Для стандартных элементов управления в Windows есть встроенные механизмы ответа на WM_GETOBJECT. Поэтому самый простой способ сделать программу совместимой с UI Automation - использовать только стандартные контролы. В твоей ситуации проще всего действительно заменить TLabel на TStaticText. В Win10 есть Narrator, можешь посмотреть, как он реагирует на твое окно.
    11 июл 19, 17:35    [21925132]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    Gator
    Member

    Откуда: Москва
    Сообщений: 14978
    Aniskin, TLabej ни вкоем случае не элемент управления Windows.
    Это лишь картинка, как сазал _Vasilisk_
    А TLabeledEdit это их помесь :)
    11 июл 19, 18:00    [21925159]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    Aniskin
    Member

    Откуда:
    Сообщений: 320
    Gator
    TLabel ни вкоем случае не элемент управления 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.
    11 июл 19, 18:06    [21925165]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    _Vasilisk_
    Member

    Откуда: Украина, Харьков
    Сообщений: 11200
    Aniskin
    А StaticText - это элемент управления?
    Да. У него есть HWND
    11 июл 19, 18:10    [21925169]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    Aniskin
    Member

    Откуда:
    Сообщений: 320
    _Vasilisk_, Gator

    Я не совсем понял. Вы бы не могли процитировать мое конкретное предложение в исходном ответе, которое вы оспариваете, где бы я утверждал, что TLabel является оконным элементом с собственным окном. Я как раз таки утверждал обратное.
    11 июл 19, 18:14    [21925172]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    _Vasilisk_
    Member

    Откуда: Украина, Харьков
    Сообщений: 11200
    Aniskin
    И я не уверен, что Delphi7 знает, как правильно отвечать на сообщение WM_GETOBJECT
    Посмотрел в XE3 и Rio. Кастомная обработка WM_GETOBJECT производится только в TCustomActionMenuBar. Так, что даже с TLabeledEdit не взлетит
    11 июл 19, 18:15    [21925173]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    _Vasilisk_
    Member

    Откуда: Украина, Харьков
    Сообщений: 11200
    Aniskin
    которое вы оспариваете,
    Я не оспариваю. Я отвечаю на конкретный вопрос
    Aniskin
    А StaticText - это элемент управления?
    11 июл 19, 18:17    [21925177]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    Gator
    Member

    Откуда: Москва
    Сообщений: 14978
    Aniskin,

    Пардон, оказалось, я для кроссы писал. Это его вопрос и он хендл TLabel ищет. :)
    11 июл 19, 18:29    [21925189]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    Gator
    Member

    Откуда: Москва
    Сообщений: 14978
    crossa, чтобы разъяснить детали к-н DelphiControls, воспользуйся любым виншпионом
    Я юзаю Window Detective, в основном
    11 июл 19, 18:36    [21925193]     Ответить | Цитировать Сообщить модератору
     Re: Совместимость с NVDA (программой экранного чтения)  [new]
    crossa
    Member

    Откуда:
    Сообщений: 70
    Большое спасибо всем за ответы. Скачал свежую версию NVDA и нашел работающее решение для Delphi 7.

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

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

    Свойства FocusControl и TabOrder у объекта TStaticText никакого значения не имеют.
    11 июл 19, 21:56    [21925281]     Ответить | Цитировать Сообщить модератору
    Все форумы / Delphi Ответить