这几天查了好多文章,却发现没有我想要的答案用动态模式加载DLL库文件之后,将DLL文件中的FORM用SHOW模式显示,而且不传入主程序的APPLICATION句柄,让其在任务栏中新显示一个窗体,问题:A、当窗体关闭时如何FREELIBRARY?在那里FREE比较好(一定要FREE吗);B、DLL中的窗体调用另一个新窗体(两个窗体包含在同一个DLL中),如何将新的窗体不会在任务栏中新生成一个程序,而只是成为HOST APP 的一个子窗体(新的窗体用SHOWMODAL模式);B、同一窗体只打开一次,如何让已打开(现已最小化)的DLL窗体重新SHOW。该贴两百分

解决方案 »

  1.   

    为什么会有两个B,
    第一个B我不明白,
    第二个可以用一个最笨的办法
    首先,先确定该窗体只能打开一个,
    try
      创建该程序
    except  
    end;
      程序.SHOW;
      

  2.   

    >>A、当窗体关闭时如何FREELIBRARY?在那里FREE比较好(一定要FREE吗);
    以前, 我做的, 為了簡單, 在主exe關閉時,在 onClose 事件中判斷是否需要釋放,然後再釋放
      

  3.   

    这样试一下,只是个思路:
    A:在App及Dll中用RegisterWindowMessage注册一个同字符串消息,窗体关闭时dll发消息给App让其FreeLibrary;
    B:子窗体创建时重载CreateParams方法,在其中找出App工程句柄,指Params.WndParent为其;
    C:打开时先用FindWindow找一下,若找不到则Show,若找到则判断状态再发消息使其正常显示
      

  4.   

    >>而只是成为HOST APP 的一个子窗体(新的窗体用SHOWMODAL模式);SetWindowLong(Application.Handle, GWL_EXSTYLE,
      GetWindowLong(Application.handle, GWL_EXSTYLE)
      or WS_EX_TOOLWINDOW AND NOT WS_EX _APPWINDOW);
    將 Application.handle 換成該 Form的 handle>>B、同一窗体只打开一次,如何让已打开(现已最小化)的DLL窗体重新SHOW。
    你調用的dll函數中判斷, 如創建了, 就直接show就可
      

  5.   

    A:在App及Dll中用RegisterWindowMessage注册一个同字符串消息,窗体关闭时dll发消息给App让其FreeLibrary;
    C:打开时先用FindWindow找一下,若找不到则Show,若找到BringToFront
      

  6.   

    我解决该问题,就是用SENDMESSAGE的方式另,CHENMINHONG关于REGISTERWINDOWMESSAGE,有没有源码看看?