如何关闭DLL里的窗体

wanjianjun 2009-01-09 12:57:41
我在DLL里封装了FORM窗体,
在主程序运行的时候,调用了DLL,并SHOW出了DLL窗体,
..........
..........
..........
LoadRegComForm(nil,'Frm_RegCom','RegComDLL'); //调用DLL并SHOW出窗体
if FindWindow('TFrm_RegCom', nil)<>0 then
begin
SendMessage(FindWindow('TFrm_RegCom', nil), WM_CLOSE, 0, 0);
end;
这样根本关不了,因为执行了LoadRegComForm(nil,'Frm_RegCom','RegComDLL');后.窗体还显示的,没关闭之前下面的语句是不执行的.

我在DLL里面,SHOW出窗体之后,Sleep(500)后,再CLOSE(Frm_RegCom),也不成功,

应该怎么解决呢?
...全文
171 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanjianjun 2009-01-09
  • 打赏
  • 举报
回复
自己研究了一下午,已经找到解决方法,谢谢诸位...
zhao_yong 2009-01-09
  • 打赏
  • 举报
回复
也就是說,如果用死循環,LoadRegComForm沒有返回,是執行不了LoadRegComForm下面的代碼的.
zhao_yong 2009-01-09
  • 打赏
  • 举报
回复
你的LoadRegComForm是自己寫的吧,可能是這裡的問題,可以在這裡看看。
faith10099 2009-01-09
  • 打赏
  • 举报
回复
我的理解是楼主想调用DLL显示窗体,然后0.5秒后自动关闭,是这样吗?
如果是这样,在DLL中处理如下:
加一个Timer,设为500,事件就是关闭程序,在FormCreate时启动定时器,这样0.5秒后DLL窗体必然会关闭
wanjianjun 2009-01-09
  • 打赏
  • 举报
回复
但是窗体好象是假死了一样..
也就是效果没有表现在窗体页面上
wanjianjun 2009-01-09
  • 打赏
  • 举报
回复
不是发不发消息的问题,

现在我解决了,关闭DLL窗体的问题..
但是窗体SHOW出来后, 在DLL窗体里的代码感觉没执行, 我跟踪了代码其实是执行了的,,但是窗体好象是假死了一样..

bdmh 2009-01-09
  • 打赏
  • 举报
回复
用定时器发消息总可以吧
wanjianjun 2009-01-09
  • 打赏
  • 举报
回复
期待有经验的仁兄帮我出个注意.....
wanjianjun 2009-01-09
  • 打赏
  • 举报
回复
找军柄谁不会啊,,,
楼上没明白我的意思. 在DLL中如果窗体是 ShowModal ,
LoadRegComForm(nil,'Frm_RegCom','RegComDLL');
之后的代码是不执行的,还找什么句柄..

如果DLL中窗体是SHOW 出来的而非模态窗体,是可以执行
LoadRegComForm(nil,'Frm_RegCom','RegComDLL'); 下面的代码,但问题是...太快了,DLL中的窗体一闪而过,根本还没来得急显示出窗体中的东西时就已经执行了下面的代码... 加上SLEEP(1000) 后,也一样,窗体象假死了一样,,还是没看清楚里面的东西.....

要解决这个问题,主要是怎么来过渡显示 DLL 窗体的问题,,,让他能时时看得见..

lenism521 2009-01-09
  • 打赏
  • 举报
回复
楼上可行 关键是找句柄..
bdmh 2009-01-09
  • 打赏
  • 举报
回复
FindWindow(nil,'窗体caption')试试,能不能找到句柄

另外,可以自定义一个消息,不用系统消息,dll窗体中写接收函数
wanjianjun 2009-01-09
  • 打赏
  • 举报
回复

LoadRegComForm(nil,'Frm_RegCom','RegComDLL'); 之后
是无法执行下面的代码..
你怎么发消息,,,,
我不是发了消息吗,没效果啊,根本没执行,,窗体还还SHOW状态..
bdmh 2009-01-09
  • 打赏
  • 举报
回复
参考两个方法
1:findwindow,找到要关闭的窗体,对他进行处理
2:发消息,其实也可能用到findwindow,找到句柄,然后发消息给句柄,在dll窗体中写接收消息函数,接收到关闭消息时,close
lenism521 2009-01-09
  • 打赏
  • 举报
回复
让DLL返回一个指针,并对指针是否为NULL进行判断。

5,388

社区成员

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

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