离开文本字段时,处理是/否消息对话的正确方法是什么?

时间:2014-12-04 22:22:36

标签: delphi delphi-7 clx

我的问题标题可能有点误导;如果是的话,我道歉。我不确定如何更好地标题。

我正在尝试将地址验证的地理编码添加到Delphi 7表单(使用CLX构建),并且我遇到了一些问题。详情如下:

  • 用户应按顺序输入地址栏中的数据 - 地址,城市,州,邮政编码。
  • 离开邮政编码字段后,立即调用地址验证。 (用户规范。)
  • 如果地址返回无效,则向用户提供是/否选择,询问是否更正给定地址。 (用户规范)
  • 如果是,请将焦点重置为适当的字段(地址,城市,州,邮政编码),如地理编码API的结果所示。否则,请转到下一个字段。

退出yes / no对话框后,鼠标的行为似乎有点棘手。只需单击一下,看起来好像前一个表单(据此由此点关闭)而不是接收焦点 - 该表单上的单击事件能够更改此表单上的某些值(预加载数据),以及如果单击鼠标,这些值将会改变。禁用点击事件只是意味着只有一次鼠标点击在新表单上没有任何作用,然后点击行为将返回到预期的状态。

在研究这个问题时,我在网上看过几件事;这些问题的共识是我的问题是邮政编码字段的OnExit事件中的消息对话框的结合。 (如果我理解我正确读取的内容,MouseUp事件似乎在两个窗口之间丢失。)

如果我有自己的方式,我将包括一个手动按钮按下来运行验证。鉴于最终用户约束将我绑定到我没有该选项的情况,处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

理想情况下,您可以让zip字段的OnExit事件使用TThread.Queue()来延迟消息对话,直到OnExit先退出为止。唉,直到Delphi 8才引入TThread.Queue()。所以OnExit必须使用等效的方法,例如发布自己的自定义异步消息或启动一个短暂的一次性定时器,以触发延迟的动作