MDI的主窗体是否必须是应用程序的主窗体?

larryuan 2002-11-18 09:23:18
在做MDI应用程序时,我将MDI的主窗体和子窗体都放入了一个DLL文件中,
但当创建子窗体时却报错:can not create form. no mdi forms are currently active.
仔细分析后,原因是MDI主窗口不是作为Application的MainForm,
但我确实必须将MDI的主窗体和子窗体都放入DLL,以便其它应用系统调用。
请问各位能否帮我解决这个难题?很急!先谢谢了!
...全文
60 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
larryuan 2002-11-27
  • 打赏
  • 举报
回复
问题我已经解决了!
方法是用MDI主窗体去接管Application的主窗体就可以了。
这个方法还是受到了king_017的启发,所以给你加上分。
larryuan 2002-11-27
  • 打赏
  • 举报
回复
to chinamo:
这一步是肯定要做的,但解决不了MDI的问题
ChinaMo 2002-11-27
  • 打赏
  • 举报
回复
关键在于dll端,原因在于Application.Handle为nil
在dll端应该一个函数
procedure Show(MainHwnd : HWND);//
begin
Application.Handle := MainHwnd;//MainHwnd是调用端Application.Handle;
//然后以下是建立窗口的事了
end;
larryuan 2002-11-27
  • 打赏
  • 举报
回复
我刚才又试了一下,把Application传过去倒是可以解决这个问题,
不过千万别告诉我这样解决,我可不想这么做,
因为调用者有可能不是Delphi开发的模块。
larryuan 2002-11-27
  • 打赏
  • 举报
回复
好几天没看这个帖子,居然有这么多人回,谢谢了

to king_017:
你真是高手,我新建了个工程,果然可以调用MDI子窗体了。
但是我的问题你解决了一半:
现在我是把MDI的父窗体和子窗体都放在了一个DLL中,
由外部调用者首先调用MDI父窗体,
而DLL中的Application.MainForm实际上是等于nil :(
所以执行到pHandle^:=ClientHandle; 时就出现了访问错误了

请问该如何解决MDI主窗体在DLL中这个问题呢?

希望你能够再次解答,不过就算无法解决也会给分的,谢谢
king_017 2002-11-23
  • 打赏
  • 举报
回复
我在MDI主窗口不是作为Application的MainForm
显示子窗体

procedure TMainFrm.B2Click(Sender: TObject);
var

pHandle:^THandle;
begin
pHandle :=@Application.MainForm.ClientHandle;
pHandle^:=ClientHandle; ///关键在这一句!
with TFsq.Create(Application) do show;

end;
flyingkiller 2002-11-20
  • 打赏
  • 举报
回复
关注 up
larryuan 2002-11-20
  • 打赏
  • 举报
回复
up
boy2002 2002-11-20
  • 打赏
  • 举报
回复
要有一个fsMDIForm,其它都是fsMDIChild
lizongqi 2002-11-20
  • 打赏
  • 举报
回复
楼上的兄弟,可以说详细些么


—————————————————————————————————
┏━★━━◆━━★━┓
♂欢|◢CSDN◣|使♂        ▲自由保存帖子,浏览,关注检测
┃迎|◥论坛助手◤|用┃        ▲完善的CSDN客户端工具
┗━☆━━◇━━━☆┛       ▲自动添加签名......

让你更快,更爽,更方便地上CSDN...
http://www.csdn.net/expert/topic/573/573604.xml
http://www.chinaok.net/csdn/csdn.zip
larryuan 2002-11-19
  • 打赏
  • 举报
回复
to fyje:
不行啊,就是因为引用MDI主窗体的的窗体是Application的主窗体才会有这个问题的。

我想问题或许有以下两个解决的方法:
1.想方设法把MDI的主窗体转换成Application的主窗体
2.是不是可以用API和消息自己制作MDI应用程序,不用Delphi的FormStyle设置?这样MDI子窗体就不会只去找Application的主窗体了?

以上两种方式可行吗?如果可行能否给个示例?
fyje 2002-11-19
  • 打赏
  • 举报
回复
一般是这样,也可以把一个引用该MDI主窗体的窗体或者单元作为application的主窗体,但这个Application主窗体不能是该MDI主窗体的子窗体(MDIChild)
DelUser 2002-11-19
  • 打赏
  • 举报
回复
帮你先UP一下,我去看看
larryuan 2002-11-19
  • 打赏
  • 举报
回复
没人能解决或关注这个问题吗?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧