delphi程序如何从任务栏及时还原、显示窗体?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi程序如何从任务栏及时还原、显示窗体?相关的知识,希望对你有一定的参考价值。
打开一个delphi写的MIS(EXE),然后转个报表,大约2分钟。此时,我点了windows的‘显示桌面’,然后在任务栏点击MIS的图标,窗体显示不出来(报表还没有制表完成)。
请问,在一个事件还没有完成的情况下,点击任务栏MIS图标,如何使窗体及时的显示?
多谢~~
点击任务栏的图标时,最先触发的是哪个事件?
你的MIS程序可能在忙着处理报表,所以不会响应windows的呼唤(消息)
* 你可能需要修改你的报表,在报表的循环中加入一行:
application.processmessages();
* 你也可以修改你的作业模型,让子任务在线程中执行。这样就不会阻塞(block)主线程。可以让主线程响应windows消息。追问
谢谢先。。。
你可能需要修改你的报表,在报表的循环中加入一行:
application.processmessages();
--------------------这个试过了,不行的。偶尔可以,大多时候不行。
除了线程,还有没有其他的方法呢?
那就比较困难了。
其实主要还是要看你的报表是block在什么地方。 加在循环里之后,效果不好的原因,可能是
你的报表没有block在循环的地方。。。而可能是其它地方,如:读取数据库。
如果一个报表共要执行2分钟,其中执行一个复杂的SQL可能需要1分30秒,那么在这1分半钟里,是“假死”的。
也有可能你的报表不是读数据库,而是通过COM或其它方式读取其它的数据源。。。。那这些可能也不是Application.ProcessMessages可以解决的。
这样的情况下,又不想把这个报表(或引起block的部分)执行放在背景线程(background thread),那我可能暂时也想不出有什么好办法。
你可能需要分析一下,你的报表时间花在什么地方。
是读取数据库比较耗时了,ADO,mssql。
大概循环10次,每次循环都会打开数据集,耗时10秒左右。这样总共差不多2分钟。
谢谢你,我再试试看。。。
:-),10秒时间是比较长了。 可能你的SQL比较复杂。
可以想办法做SQL优化。
Delphi中无边框窗体应用程序使任务栏右键菜单有效的方法
最近在Delphi开发中用到了无边框窗体显示时,无法在任务栏使用右键弹出菜单的情况,经过整理,通过以下方法可以使右键菜单出现:
procedure Tfrm_Base.InitSysMenu;
var
WindowStyle: Integer;
begin
WindowStyle := GetWindowLong(Handle, -16);
WindowStyle := WindowStyle or WS_SYSMENU or WS_MINIMIZEBOX;
WindowStyle:=WindowStyle xor WS_CAPTION;
SetWindowLong(Handle, -16, WindowStyle);
end;
http://www.cnblogs.com/gxch/archive/2011/04/22/2024846.html
以上是关于delphi程序如何从任务栏及时还原、显示窗体?的主要内容,如果未能解决你的问题,请参考以下文章