powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сообщение от NVDA "Окно недоступно" после TOpenDialog.Execute
3 сообщений из 3, страница 1 из 1
Сообщение от NVDA "Окно недоступно" после TOpenDialog.Execute
    #40005422
crossa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Моя довольно старая программа используется слабовидящими людьми, они работают с ней с помощью программ экранного доступа. Программы экранного доступа - это разновидность софта, помогающего пользователям с ослабленным зрением считывать информацию с экрана монитора (например, такое программное приложение сообщает с помощью синтеза речи, какой именно элемент окна какой именно программы является активным в данный момент). NVDA - одна из таких программ экранного доступа, бесплатная и довольно популярная.

Недавно я, наконец, изменил значение одного параметра в файле *.DPR. Было:
Код: pascal
1.
Application.MainFormOnTaskbar:=False;


Стало:
Код: pascal
1.
Application.MainFormOnTaskbar:=True;


Долго не хотел менять значение потому, что ожидал каких-либо проблем. Так и оказалось - сегодня получил сообщение от слабовидящего пользователя.

Суть проблемы. В программе вызывается модальное окно:
Код: pascal
1.
MyWindow.ShowModal;


В этом окне пользователь нажимает кнопку "Выбрать файл", открывается окно диалога для выбора файла.
Код: pascal
1.
if NOT OpenDialog.Execute then Exit;


И после выполнения этой команды программа экранного доступа сообщает: "Окно недоступно" . И действительно, пользователю надо кликнуть мышью на модальном окне, чтобы окно стало доступно для клавиатурного ввода (такое действие легко сделать зрячему пользователю, а для слабовидящих это неудобно) . Недоступным становится только дочернее модальное окно: если в главном окне программы вызвать TOpenDialog.Execute, NVDA не выдает сообщение о проблеме.

Вопрос: как избежать того, что окно становится недоступным после вызова диалога выбора файла? Пока использую такой способ:
Код: pascal
1.
2.
3.
4.
5.
6.
try
  if NOT OpenDialog.Execute then Exit;
finally
  // NVDA loses this window!
  SetForegroundWindow(Handle);
end;


Это работает, NVDA не "теряет" окно. Но, может быть, есть более "правильный" способ решить эту проблему?

Delphi 2009, Windows 7.
...
Рейтинг: 0 / 0
Сообщение от NVDA "Окно недоступно" после TOpenDialog.Execute
    #40005426
crossa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой способ тоже работает:
Код: pascal
1.
2.
3.
4.
5.
try
  if NOT OpenDialog.Execute then Exit;
finally
  SetActiveWindow(Self.Handle);
end;
...
Рейтинг: 0 / 0
Сообщение от NVDA "Окно недоступно" после TOpenDialog.Execute
    #40005440
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crossaНо, может быть, есть более "правильный" способ решить эту проблему?

Есть: использовать параметр ParentWnd при вызове TOpenDialog.Execute.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сообщение от NVDA "Окно недоступно" после TOpenDialog.Execute
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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