关于DLL和窗体模式和FreeLibrary的相关问题

bbsftp 2005-01-28 12:10:29
这几天查了好多文章,却发现没有我想要的答案

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

该贴两百分
...全文
196 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdsgajxlp 2005-02-21
  • 打赏
  • 举报
回复
up
bbsftp 2005-02-20
  • 打赏
  • 举报
回复
UP,新势力,就要你最红
chenminghong 2005-01-30
  • 打赏
  • 举报
回复
A:在App及Dll中用RegisterWindowMessage注册一个同字符串消息,窗体关闭时dll发消息给App让其FreeLibrary;
C:打开时先用FindWindow找一下,若找不到则Show,若找到BringToFront
bbsftp 2005-01-30
  • 打赏
  • 举报
回复
我解决该问题,就是用SENDMESSAGE的方式

另,CHENMINHONG关于REGISTERWINDOWMESSAGE,有没有源码看看?
bbsftp 2005-01-29
  • 打赏
  • 举报
回复
up
bbsftp 2005-01-28
  • 打赏
  • 举报
回复
up ,for myself
aiirii 2005-01-28
  • 打赏
  • 举报
回复
>>而只是成为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就可
楚人无衣 2005-01-28
  • 打赏
  • 举报
回复
这样试一下,只是个思路:
A:在App及Dll中用RegisterWindowMessage注册一个同字符串消息,窗体关闭时dll发消息给App让其FreeLibrary;
B:子窗体创建时重载CreateParams方法,在其中找出App工程句柄,指Params.WndParent为其;
C:打开时先用FindWindow找一下,若找不到则Show,若找到则判断状态再发消息使其正常显示
aiirii 2005-01-28
  • 打赏
  • 举报
回复
>>A、当窗体关闭时如何FREELIBRARY?在那里FREE比较好(一定要FREE吗);
以前, 我做的, 為了簡單, 在主exe關閉時,在 onClose 事件中判斷是否需要釋放,然後再釋放
fayeflash 2005-01-28
  • 打赏
  • 举报
回复
帮你顶上去!
22932565 2005-01-28
  • 打赏
  • 举报
回复
为什么会有两个B,
第一个B我不明白,
第二个可以用一个最笨的办法
首先,先确定该窗体只能打开一个,
try
创建该程序
except
end;
程序.SHOW;
cyf_delphi 2005-01-28
  • 打赏
  • 举报
回复
关注

5,939

社区成员

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

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