Одним из самых главных НЕТ-НЕТ в управлении диалоговыми окнами - это отключение (disable) контрола, который владеет фокусом, без перемещения этого фокуса в другое место.
Когда вы так делаете, клавиатура для этого диалога будет мертва, поскольку отключенные окна не получают ввода. Для пользователей, которые не имеют мыши (скажем, потому что у них есть физические ограничения, которые вынуждают их пользоваться только клавиатурой), это убивает ваш диалог.
(Я видел, как это случалось и в продуктах от Microsoft. Это очень печально).
Перед тем, как вы отключите контрол - проверьте, что он не имеет фокуса. А если имеет, то переместите фокус куда-нибудь ещё перед тем, как отключать контрол, так что пользователь не останется сидеть беспомощным перед ваших диалогом.
Если вы не знаете, кому передать фокус - просто позвольте решать это менеджеру диалоговых окон (dialog manager). К нам на помощь в очередной раз приходит сообщение
WM_NEXTDLGCTL
.
procedure DialogDisableWindow(hdlg, hwndControl: HWND) begin if hwndControl = GetFocus then SendMessage(hdlg, WM_NEXTDLGCTL, 0, 0); EnableWindow(hwndControl, False); end;(И, конечно же, вы никогда-никогда не должны отключать последний контрол в диалоге. Это не оставит пользователю никакого шанса сбежать от вашего диалога!)
Прим. пер.: в Delphi установка свойства
Enabled
автоматически решает эту проблему, но всё сказанное остаётся в силе, если вы используете прямой вызов EnableWindow
.
Комментариев нет:
Отправить комментарий
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.