我在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),也不成功,应该怎么解决呢?
在主程序运行的时候,调用了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),也不成功,应该怎么解决呢?
1:findwindow,找到要关闭的窗体,对他进行处理
2:发消息,其实也可能用到findwindow,找到句柄,然后发消息给句柄,在dll窗体中写接收消息函数,接收到关闭消息时,close
LoadRegComForm(nil,'Frm_RegCom','RegComDLL'); 之后
是无法执行下面的代码..
你怎么发消息,,,,
我不是发了消息吗,没效果啊,根本没执行,,窗体还还SHOW状态..
楼上没明白我的意思. 在DLL中如果窗体是 ShowModal ,
LoadRegComForm(nil,'Frm_RegCom','RegComDLL');
之后的代码是不执行的,还找什么句柄..如果DLL中窗体是SHOW 出来的而非模态窗体,是可以执行
LoadRegComForm(nil,'Frm_RegCom','RegComDLL'); 下面的代码,但问题是...太快了,DLL中的窗体一闪而过,根本还没来得急显示出窗体中的东西时就已经执行了下面的代码... 加上SLEEP(1000) 后,也一样,窗体象假死了一样,,还是没看清楚里面的东西.....要解决这个问题,主要是怎么来过渡显示 DLL 窗体的问题,,,让他能时时看得见..
但是窗体SHOW出来后, 在DLL窗体里的代码感觉没执行, 我跟踪了代码其实是执行了的,,但是窗体好象是假死了一样..
如果是这样,在DLL中处理如下:
加一个Timer,设为500,事件就是关闭程序,在FormCreate时启动定时器,这样0.5秒后DLL窗体必然会关闭