加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

表单 – Delphi:应用程序初始化 – 最佳实践/方法

发布时间:2020-12-14 21:19:44 所属栏目:资源 来源:网络整理
导读:我经常遇到这种情况,我只是在寻找最佳实践/方法.我有一个包含数据库/数据模块的应用程序,并且想要在启动时启动数据库/数据集,而不是在设计时将“运行时活动”设置为true(数据库位置不同).当应用程序启动时,还运行Web“检查更新”例程. 鉴于TForm事件序列,以
我经常遇到这种情况,我只是在寻找最佳实践/方法.我有一个包含数据库/数据模块的应用程序,并且想要在启动时启动数据库/数据集,而不是在设计时将“运行时活动”设置为true(数据库位置不同).当应用程序启动时,还运行Web“检查更新”例程.

鉴于TForm事件序列,以及各种试错的结果,我目前正在使用这种方法:

我使用在主窗体中设置的“Globals”记录来存储所有全局变量,有一个名为Globals.AppInitialized(boolean)的元素,并在主窗体的Initialization部分将其设置为False.

在主窗体的OnShow事件中(所有窗体都是由那时创建的),我测试了Globals.AppInitialized;如果它是假的,我运行我的“初始化”的东西,然后通过设置Globals.AppInitialized:= True完成.

这似乎工作得很好,但这是最好的方法吗?寻找别人的经验,想法和意见的见解. TIA ..

解决方法

我通常总是关闭主表单和主数据模块的所有表单的自动创建除外.

我学到的一个技巧是将数据模块添加到项目中,允许它自动创建并在主窗体之前创建.然后,在创建主窗体时,数据模块的onCreate将已经运行.

如果您的应用程序有一些代码要说,请设置控件的焦点(在创建时无法做到的事情,因为它“尚未显示”)然后创建用户消息并将其发布到您的oncreate中的表单.一旦处理了表单消息循环,就应该处理该消息(不保证).例如:

const
  wm_AppStarted = wm_User + 101;


type
  Form1 = class(tForm)
    :
    procedure wmAppStarted(var Msg:tMessage); message wm_AppStarted;
  end; 

// in your oncreate event add the following,which should result in your wmAppStarted event firing.
PostMessage(handle,wm_AppStarted,0);

我想不出一次这个消息从未被处理过,但是调用的本质是它被添加到消息队列中,如果队列已满,则它被“丢弃”.请注意边缘情况存在.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读