Мое имя вопроса может немного вводить в заблуждение; если да, извиняюсь. Я не уверен, как лучше загладить это.Каков правильный способ обработки да/нет диалогового окна сообщений при выходе из текстового поля?
Я пытаюсь добавить геокодирование для проверки адреса в форму Delphi 7 (построенную с помощью CLX), и я столкнулся с проблемой. Подробности:
- Пользователь должен ввести данные в полях адреса в порядке - адрес, город, штат, почтовый индекс.
- Сразу после оставления поля почтового индекса необходимо вызывать проверку адреса. (Пользовательская спецификация.)
- Если адрес возвращается как недействительный, пользователю должен быть предоставлен выбор «да/нет» с просьбой исправить данный адрес. (Пользовательская спецификация)
- Если да, сбросьте фокус на соответствующее поле (адрес, город, штат, почтовый индекс), как видно из результата геокодирования api. В противном случае перейдите к следующему полю.
Сразу же после выхода из диалога «Да/Нет» поведение мыши кажется немного отвратительным. Для одного щелчка кажется, что предыдущая форма (предположительно закрытая этой точкой) вместо этого получает фокус. Событие on-click в этой форме способно изменять некоторые из значений на этом (предварительная загрузка данных) и эти значения будут изменены, если щелкнуть мышью. Отключение события on-click просто означает, что есть один щелчок мышью, который ничего не делает в новой форме, тогда поведение клика возвращается к ожидаемому.
Я видел несколько вещей в Интернете, исследуя это; консенсус от них заключается в том, что моя проблема связана с диалогом сообщений в поле OnExit в поле индекса почтового индекса. (Событие MouseUp, кажется, теряется между обоими окнами, если я понимаю, что я правильно прочитал.)
Если бы у меня был свой собственный путь, я бы включил ручное нажатие кнопки для запуска проверки. Учитывая, что ограничения конечного пользователя связывают меня с ситуацией, когда у меня нет этой опции, как лучше всего справиться с этой ситуацией?
@KenWhite: это обычно верно для VCL, но применимо также к CLX? –
@Remy: Я уверен, что такое же решение (в частности, ответ Sertac) применяется, но у меня нет возможности проверить его на CLX. Если плакат редактирует, чтобы указать, что они видели и пытались решить это сообщение, и это не сработает, я отменим повторное закрытое голосование. –
@KenWhite: Пробовал это - PostMessage не работает для форм CLX, так как для этого требуется, чтобы дескриптор был значением HWND, которое CLX не использует. Попытался обойти это, используя Self.Dispatch (Msg), лучшую замену, которую я смог найти для вызова PostMessage, но этот метод все еще вызывал такое же ошибочное поведение. – user2051521