Я использую Delphi XE7, и мой вопрос касается того, когда должны отображаться клавиши ускорителя (aka Access Keys). В частности, я заметил, что если я покажу вторичную форму (т. Е. Не основную форму) и нажмите клавишу Alt, отобразятся ускорители (ожидаемое поведение). Если я затем закрою и снова открою диалоговое окно, ускорители все еще отображаются (без нажатия Alt). Это считается правильным поведением Windows 7? Если это неправильное поведение, то какой код (если таковой имеется) можно было бы добавить в OnShow формы, который будет отображать ускорители?Должны ли ключи доступа оставаться подчеркнутыми при открытии диалогового окна?
ответ
Стандарт платформы - это то, что ключи доступа отображаются, если диалог был вызван действием клавиатуры. Как только появится диалоговое окно, если вы нажмете клавишу ALT, то будут показаны ключи доступа.
Итак, почему ключи доступа отображаются при открытии формы во второй раз? Ну, если вы создаете форму каждый раз, когда вы ее показываете, тогда вы получите стандартное поведение платформы, описанное выше. Поэтому я заключаю, что между первым и вторым показом формы вы просто скрываете ее, а не уничтожаете ее.
Итак, простой способ добиться желаемого поведения - это уничтожить форму, когда она закрыта, и создать ее, когда она будет показана. Не используйте глобальную переменную формы, которую создает IDE для вас. Не вызывайте Application.CreateForm
в .dpr-файле, чтобы создать этот глобальный экземпляр. Всякий раз, когда вам нужно показать форму, создайте ее в этом экземпляре. Когда форма закрыта, уничтожьте этот экземпляр.
Если вам нужно повторно показать существующий экземпляр формы, отправьте сообщение WM_CHANGEUISTATE
, чтобы инициализировать состояние. Проход UIS_INITIALIZE or (UISF_HIDEACCEL shl 16)
как wParam
. Если вы не можете это проверить, это будет происходить в этом направлении. Я думаю, этого достаточно, чтобы отправить это только в дескриптор окна формы. И я мог ошибаться в флагах. Документация здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646342(v=vs.85).aspx
- 1. Непонятное поведение IE при открытии диалогового окна
- 2. Карта не автонастраивается при открытии диалогового окна
- 3. Загрузка диалогового окна при открытии Excel
- 4. escape-последовательности при открытии диалогового окна открытия файла?
- 5. Ошибка диалогового окна jQuery при открытии диалогового окна второй раз - TypeError: oa не является функцией
- 6. Пользовательский выбор удаляется при открытии диалогового окна диалогового окна jQuery. Как это исправить?
- 7. Ошибка утечки JNI при открытии диалогового окна файла из C++?
- 8. Как скрыть диалоговые кнопки при открытии диалогового окна jQuery-ui
- 9. Каков самый быстрый способ размытия спискаView при открытии диалогового окна?
- 10. JS-код прекратил выполнение при открытии диалогового окна файла
- 11. Как остановить поток выполнения при открытии диалогового окна в Android
- 12. Как подавить звук при открытии диалогового окна в vb.net
- 13. Как отключить прокрутку страницы при открытии диалогового окна?
- 14. Как сохранить выделение текста при открытии диалогового окна JQuery
- 15. Сложность диалогового окна Android сжимается при открытии экранной клавиатуры
- 16. Получить исходный URL-адрес iframe при каждом открытии диалогового окна
- 17. Как отключить проверку при открытии диалогового окна в режиме редактирования?
- 18. JQuery - Получение данных из базы данных при открытии диалогового окна
- 19. Страница автоматически переходит в начало при открытии диалогового окна jquery
- 20. Сделать родительскую страницу Размытие при открытии диалогового окна
- 21. Переключатель HOME key при открытии диалогового окна в Android
- 22. Плагин TinyMCE 4 - предварительный выбор списка при открытии диалогового окна
- 23. Выпадающее меню AngularJS не работает при открытии внутри диалогового окна
- 24. Должны ли кешировать ключи?
- 25. Как получить имя пользователя без токена доступа при открытии диалогового окна «feed»?
- 26. Запрет сохранения диалогового окна изменений при закрытии
- 27. Изменение ориентации диалогового окна
- 28. Должны ли ключи располагаться на xml для доступа к R.string.key?
- 29. Cant элемент доступа в заголовке диалогового окна
- 30. Центрирование JQuery диалогового окна
Объяснение полезно. На данный момент в проекте будет значительная работа по изменению, когда/как создаются формы, поэтому остается вопрос - есть ли код, который может быть добавлен в Onshow, который восстановит ускорители? – TomT
Я добавил дополнительную информацию. Надеюсь, поможет. –
Это работает. В случае, если вы хотите сделать свой ответ более конкретным для потомков, при размещении в форме Onshow: SendMessage (Handle, WM_ChangeUIState, UIS_INITIALIZE или (UISF_HIDEACCEL shl 16), 0) работает следующее: – TomT