onlyonekgx,你好,谢谢你能帮我解答,我采用了下面这种方法:
for i := Screen.FormCount - 1 downto 0 do
if Screen.Forms.Handle <> Application.MainForm.Handle then
SendMessage(Screen.Forms.Handle,WM_Close,0,0);
但是还是不能关闭动态链接库生成的窗口,难道通过Screen.Forms.Handle得到的句柄
是无效的?但是实际上是有值的,难道一定要通过动态链接库的导出函数得到的句柄才有效?
希望你能帮我解答我的email是xubinworld@263.net
呵呵,给你的DLL窗体加上标题,就可以发送消息关闭它了。
var
hwndwindow:hwnd;
begin
hwndwindow:=findwindow(nil,'DLL窗体名字');
if hwndwindow<>0 then
postmessage(hwndwindow,WM_SYSCOMMAND,SC_CLOSE,0);
你可以这样:
For I:=0 To Application.MainForm.MDIChildCount-1 do
Application.MainForm.MDIChildren.Close;
注:
从主程序向DLL传参数时有两个参数是必须的:Application,Screen
如果只传了Application而没有传Screen,
则Application.MainForm.MDIChildCount 的值将始终为0
我在动态链接库中就是生成mdichild,但是当我把screen传过去以后会出现错误,说什么
不能从一种字体转为另一种字体?既然生成的是mdi子窗体,那么就可以同时打开多个窗体,
这时候要一个一个地关闭窗体就只能通过
For I:=0 To Application.MainForm.MDIChildCount-1 do
Application.MainForm.MDIChildren.Close;
或者
for i := Screen.FormCount - 1 downto 0 do
if Screen.Forms.Handle <> Application.MainForm.Handle then
SendMessage(Screen.Forms.Handle,WM_Close,0,0);
但是都没有效果????????
CloseWindow(Screen.Forms.Handle)行不行?
另外我觉得
if Screen.Forms.Handle <> Application.MainForm.Handle then
SendMessage(Screen.Forms.Handle,WM_Close,0,0);
是不是狠了点,会不会关错了东西啊