设置你DLL种Application的Handle为主程序的某个窗口句柄,例如Application.Handle
解决方案 »
- 怎样监视IE浏览器和下载工具下载文件呢?
- 为何同一个程序,有的win7可以打开,有的报,请求的操作需要提升!
- 有使用过Idudpserver编写多线程程序的高手吗,麻烦给个DEMO?谢谢!!!
- 动态生成的图标名称的获取,急等!急等!望诸位多定
- 急求,delphi7第三方控件,在线等
- ApplicationEvents的OnMinimize事件响应的是那个消息
- 把jpg文件读到string中,然后写入一个新文件,但是新文件见打不开,什么原因,
- MDI Application子窗口最大化时出现的问题
- 求助:请问类似Outlook Express定时检查新邮件那样的功能,该如何实现
- 如何在不同的combobox显示不同的内容
- 问个gsm短信猫的问题
- 请问 delphi 如何实现对 https 地址进行数据抓包?
Application.MainFormOnTaskBar := False;
这个是针对 exe 的。跟 dll form 无关。
谢谢。
武稀松?
拜读过您的部分博文。
受益匪浅,非常感谢。对于您说的方法,我开始就是这么做的。
1. 保存 Dll App.Handle
2. 用 exe App.Handle 赋值 Dll App.Handle
3. 使用
4. 归还 Dll App.Handle。(释放 Dll 前)原本用的好好的。
不过,也不清楚是哪里出的问题。
当调用 MessageBox (第一个参数,就是 Dll Form. Handle)之后,
有一半的几率,会出现一个没有文字的框,在任务栏里。多出来的,与主程序并存。
特别是 exception 的时候,出现率高。
关闭它,也会跟主程序的那个框,一样。会关闭程序。只有当任务栏里,存在一个 Dll Form 的标题框时,同样的代码,不会增加这个无文字的框。Win7 64 位 + Delphi 2007
但是,还不知道怎么解决。
在 Dll 中,Form 上有一个按钮,触发的事件当中,有一句 Sleep(1000)
把这个注释掉,就ok了。
武稀松?
拜读过您的部分博文。
受益匪浅,非常感谢。对于您说的方法,我开始就是这么做的。
1. 保存 Dll App.Handle
2. 用 exe App.Handle 赋值 Dll App.Handle
3. 使用
4. 归还 Dll App.Handle。(释放 Dll 前)原本用的好好的。
不过,也不清楚是哪里出的问题。
当调用 MessageBox (第一个参数,就是 Dll Form. Handle)之后,
有一半的几率,会出现一个没有文字的框,在任务栏里。多出来的,与主程序并存。
特别是 exception 的时候,出现率高。
关闭它,也会跟主程序的那个框,一样。会关闭程序。只有当任务栏里,存在一个 Dll Form 的标题框时,同样的代码,不会增加这个无文字的框。Win7 64 位 + Delphi 2007
从描述的状况看,dll弹出窗口会提交退出程序消息(WM_QUIT)。窗口应该是调用了application.Terminate,提交了该消息。
VCL窗体内部处理,除非是主窗口,否则不会调用方法。可以先确认一下以下两个问题:
1、在Application.Terminate设置断点,出现问题时,分析栈:看谁调用?
2、dll中的窗口是如何创建?application.CreateForm?注意其中FMainForm及MainFormOnTaskBar的处理。
事情其实是这样的。
我有 2 个 dll(A,B),1 个主程序(E)。
1. A 是界面 DLL,B 是Socket DLL。
2. E 调用 A 中的界面。
3. A 中有个按钮,会调用 B 中连接 Socket 的方法。
4. B 中,如果连接失败(反馈 10061),我会尝试 3 次重连,每次间隔 1 秒。
5. 只要出发这个 Sleep,就会产生空白任务栏。原因大概吧,就是 2 个 DLL 中有两套 Application。
最终,我貌似是解决了。
在 B 中写法如下:repeat
if 连接错误 then
begin
Application.ProcessMessages;
Sleep(1000);
end;
until 尝试完成;
不论怎样,sleep太久又未做处理,确实会造成“程序死掉”的现象。
为什么不在A中sleep?
调用b中socket连接,失败返回,a中循环sleep三次错误后退出