我有一个是/否消息框,我想在 14 秒后清除它。我相信这样做的第一步是获取消息框的句柄,以便我可以让它消失
问问题
1038 次
2 回答
1
恐怕简单的答案是“你不能”。
这不是 Progress 的限制,无论您使用哪种编程语言,它都是 Windows 消息框固有的。消息框对于父应用程序是模态的,这意味着您的应用程序会冻结,直到消息框关闭。无论您编写什么代码来关闭消息框,它都不会在消息框打开时运行。
不那么简单的答案提供了两种可能性:在显示模态表单时让应用程序的一部分不冻结需要多线程,我们不会在礼貌的公司中谈论它。另一种选择是将消息框显示为非模式,即它不会冻结您的应用程序。要实现这一点,您不能使用 MESSAGE VIEW-AS ALERT-BOX,因为它始终是模态的。您必须创建自己的消息框 - 一个可以根据需要显示和隐藏的窗口或框架。
我更喜欢使用框架而不是窗口。禁用默认框架,显示包含是/否按钮的消息框架。您的应用程序未冻结,但用户只能与消息框进行交互。当用户单击按钮或时间到时,隐藏消息框架并再次启用默认框架。
FRAME Message-Frame:VISIBLE = TRUE.
FRAME default-frame:SENSITIVE = FALSE.
/* do your thing */
FRAME Message-Frame:VISIBLE = FALSE.
FRAME default-frame:SENSITIVE = TRUE.
请记住将消息框架的 TOP-ONLY 属性设置为 TRUE,否则它不会出现在默认框架之上。
于 2012-02-14T13:37:55.880 回答
0
可以使用小部件的句柄,或直接管理它,如下所示:
DEF VAR ch-field AS CHARACTER.
DEF FRAME f-test
ch-field.
ch-field:Visible = yes.
pause 14 no-message.
ch-field:visible = no.
或者 - 获取小部件的句柄,然后根据需要设置它的“可见”属性。
于 2012-02-08T16:05:10.257 回答