当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《Delphi:应用程序初始化-最佳实践/方法》经验,为你挑选了2个好方法。

我经常遇到这个,我只是在寻找最佳实践/方法.我有一个包含数据库/数据模块的应用程序,并且想要在启动时启动数据库/数据集,而在设计时将"运行时活动"设置为true(数据库位置不同).当应用程序启动时,还运行Web"检查更新"例程.

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

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

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

这看起来效果很好,但这是最好的方法吗?寻找别人的经验,想法和意见的见解.TIA ..



1> skamradt..:

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

我学到的一个技巧是将数据模块添加到项目中,允许它在主窗体之前自动创建和创建.然后,在创建主窗体时,数据模块的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,0);

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


+1表示禁用表单自动创建的提示.这是Delphi应用程序启动速度慢于原因的原因之一.此外,延迟处理的Windows消息值得研究.

2> utku_karatas..:

您可能希望在表单创建调用之后和Application.Run之前直接干扰项目源(.dpr文件).(甚至更早的情况.)

这就是我通常处理这种初始化的方法:

...
Application.CreateForm(TMainForm, MainForm);    
...
MainForm.ApplicationLoaded; // loads options, etc..
Application.Run;
...


是! 重要的是要知道"主要形式"不是程序的入口点,而OnShow不是表单的入口点.
推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有