我在delphy XE2应用程序中遇到了一个小问题:当我的界面冻结时,为什么我的表单会进入屏幕的顶部?
这是这个应用程序中的一个老问题,我从一点时间开始着手它。
当用户选择使用按钮的事件启动进程时,我的应用程序将启动与OPCServer,SQLServer的连接,并构建表单,以便在两台服务器上进行良好的数据访问。
我的表单的构造涉及对接口的阻塞(约15秒),因为需要使用该接口的批量数据。
当它冻结时,如果用户想要拖动窗体,她会走得很远,并且通常使用TMainMenu将其从屏幕中移出。之后,使用该应用程序是不可能的,因为我们无法拖动,我们需要关闭并重新打开。
在旧版本中,表格在连接之前已经被构建。因此,对动态表单的修改与此问题不存在关联。
我的生活事件:
-Open connexion with OPC Server
-Open SQL Connexion
-Send SQL Command Text
-FieldByName('') for update my UI (Button.Caption// TPage.TStaticText.Caption // TPage.Label1.Caption)
-FieldByName('') for update an array of record
-Close SQL Connexion
-Open SQL Connexion
-Send SQL CommandText
-FieldByName('') for update an other array of record
-Panel.Visible(false)
-TPage.Panel.Show;
-TPage.Panel.BringToFront;
,所以我没有MainForm的修改可以改变其位置。
我是一个年轻的开发人员,所以我不知道为什么它移动和什么我可以帮修理一下......
如果你想要的代码的一部分,问我什么,我编辑此,它很长,我不想垃圾邮件回答。
感谢您的阅读。
问题的核心是你有一个完整的阻塞主线程的进程(表单构造),因此ypu应用程序不能处理正常的Windows消息。这就是为什么当你移动你的应用程序时,它不会推动它的接口。现在基于你的描述,你已经将这个表单构造过程分成多个步骤,所以你可以在它们之间调用Application.ProcessMessages。这将迫使你的应用程序更新其UI部分。您也可以考虑在开始时显示启动画面而不是一半的内置窗体。 – SilverWarior 2014-09-11 10:11:29
感谢您解决我的问题=) – Guillaume 2014-09-11 10:24:35
@SilverWarior您可能想要发表该评论作为答案。 – 2014-09-11 12:55:36