gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:37:10 28 4
gpt4 key购买 nike

我经常遇到这个问题,我只是在寻找最佳实践/方法。我有一个包含数据库/数据模块的应用程序,并且希望在启动时启动数据库/数据集,而无需在设计时将“运行时事件”设置为 true(数据库位置不同)。当应用程序启动时,还运行网络“检查更新”例程。

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

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

在主窗体的 OnShow 事件中(此时所有窗体均已创建),我测试 Globals.AppInitialized;如果为 false,我会运行“初始化”内容,然后通过设置 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,0);

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

关于forms - Delphi:应用程序初始化 - 最佳实践/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/382527/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com