在 C++ Builder 中启动时从加载屏幕打开表单
Open Form from a loading screen at startup in C++ Builder
我有一个带有 MainForm 的应用程序,它是一个加载屏幕。在后台完成一些事情时会显示此表单,例如决定接下来启动哪个表单。我无法让它工作,我一直遇到访问冲突错误。
感谢这个主题,我明白了原因:Open two forms at startup in c++ builder。但是建议的解决方案对我来说是不可接受的,因为我在设计时不知道哪个表单将首先显示。
正确的做法是什么?
I have an application with a MainForm which is a loading screen.
不要那样做。在VCL中,MainForm
一旦设置就不能更改,当MainForm
关闭时应用程序将退出。 MainForm
由第一次调用 Application->CreateForm()
设置。如果要在 MainForm
创建之前创建表单,则必须使用 new
运算符,例如:
Application->Initialize();
TLoadingForm *LoadingForm = new TLoadingForm(Application);
LoadingForm->Show();
LoadingForm->Update();
...
Application->CreateForm(__classid(TForm1), &Form1);
...
LoadingForm->Close();
delete LoadingForm;
Application->Run();
...
如果您想在运行时决定哪个 TForm
将是真正的 MainForm
,您可以这样做,例如:
Application->Initialize();
TLoadingForm *LoadingForm = new TLoadingForm(Application);
LoadingForm->Show();
LoadingForm->Update();
...
if (someCondition)
Application->CreateForm(__classid(TForm1), &Form1);
else
Application->CreateForm(__classid(TForm2), &Form2);
...
LoadingForm->Close();
delete LoadingForm;
Application->Run();
...
请注意,IDE "owns" 主项目源文件,它可能会 modify/delete/corrupt 您的自定义代码在项目开发生命周期的某个时刻。因此,在调用 Application->Initialize()
和 Application->Run()
之间放置自定义代码时,请非常小心。并确保您有良好的备份。
我有一个带有 MainForm 的应用程序,它是一个加载屏幕。在后台完成一些事情时会显示此表单,例如决定接下来启动哪个表单。我无法让它工作,我一直遇到访问冲突错误。
感谢这个主题,我明白了原因:Open two forms at startup in c++ builder。但是建议的解决方案对我来说是不可接受的,因为我在设计时不知道哪个表单将首先显示。
正确的做法是什么?
I have an application with a MainForm which is a loading screen.
不要那样做。在VCL中,MainForm
一旦设置就不能更改,当MainForm
关闭时应用程序将退出。 MainForm
由第一次调用 Application->CreateForm()
设置。如果要在 MainForm
创建之前创建表单,则必须使用 new
运算符,例如:
Application->Initialize();
TLoadingForm *LoadingForm = new TLoadingForm(Application);
LoadingForm->Show();
LoadingForm->Update();
...
Application->CreateForm(__classid(TForm1), &Form1);
...
LoadingForm->Close();
delete LoadingForm;
Application->Run();
...
如果您想在运行时决定哪个 TForm
将是真正的 MainForm
,您可以这样做,例如:
Application->Initialize();
TLoadingForm *LoadingForm = new TLoadingForm(Application);
LoadingForm->Show();
LoadingForm->Update();
...
if (someCondition)
Application->CreateForm(__classid(TForm1), &Form1);
else
Application->CreateForm(__classid(TForm2), &Form2);
...
LoadingForm->Close();
delete LoadingForm;
Application->Run();
...
请注意,IDE "owns" 主项目源文件,它可能会 modify/delete/corrupt 您的自定义代码在项目开发生命周期的某个时刻。因此,在调用 Application->Initialize()
和 Application->Run()
之间放置自定义代码时,请非常小心。并确保您有良好的备份。