微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我经常遇到这种情况,我只是在寻找最佳实践/方法.我有一个包含数据库/数据模块的应用程序,并且想要在启动时启动数据库/数据集,而不是在设计时将“运行时活动”设置为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);

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

原文地址:https://www.jb51.cc/html/232416.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐