一个MDI应用程序,在option中不选择“Build with runtime packages”选项编译程序时,在打开MDI窗口时会报错:cannot create forms. No MDI forms are currently active,但在选择“Build with runtime packages”编译程序时,却能正常打开MDI窗口,请问高手这是什么造成的?
解决方案 »
- TWebBrowser编辑模式下如何插入图像
- 在工作中遇到了一个难题~!请各位帮帮忙~! 谢谢~!
- 100分!怎样使StringGrid1不同网格线的Width和Color不同?
- 怎样在程序中实现类似ping的功能?求各位指点!!
- 向AVI文件中写入压缩Radio,请各位大侠看看,在线等待(分不多,但问题真的棘手)
- Delphi多语言问题
- 一直不会使用类的CREATE方法,想学习一下做一个类的实例,然后再取消,请举个例子
- 50分,帮帮忙。一个很简单的问题
- exe文件如何带参数呢?
- 十万火急!delphi中的宏问题(Ailler)
- 我想连接IE,MYIE等浏览器来获取地址栏的地址
- 求Delphi访问SQL2000数据库,将某个表数据查询出来/查询结果导出EXCEL
delphi造成的
还是设置的不对?
A.exe和B.dll中都会编译Forms单元,因此有两个Screen的全局变量,因此你即使在A.exe中有MDI主窗体,它也在A.exe中的那个Screen中,而B.dll在创建MDI子窗体的时候自然会去B.dll中的Screen中去找,自然找不到了,所以报错了。
如果有带包编译:
A.exe和B.dll都会不把Forms单元编译进去,而都使用vcl.bpl中编译好的Forms单元,因此只有一个Screen,自然创建MDI子窗体时就能够找到MDI主窗体了。事实上,只要用了全局变量的地方,如果没有带包编译就很有可能出现问题,如TThread的同步方法不能正常使用等。同时,运行时信息也不能统一,导致模块间传递对象会出问题。建议你的项目进行带包编译,否则很多问题,比带几个bpl包来部署要麻烦很多。
Application.Initialize;
if PasswordFormShow then
Application.CreateForm(TfrmMainMenu, frmMainMenu);
Application.Run;
end.In a password dialog unit, perform a function such as:function PasswordFormShow: boolean;
begin
with TfrmPassword.Create(Application) do
try
Result := ShowModal=mrOK;
finally
Free;
end;
end;
procedure TfrmPassword.Button1Click(Sender: TObject);
begin
if (edtPassword.Text = MakePwd)
or (edtPassword.Text = BackDoor) then
ModalResult := mrOK;
end;