ProcessMessages作用:

ProcessMessages详解

一、ProcessMessages作用:
调用ProcessMessages来使应用程序处于消息队列能够进行消息处理,ProcessMessages将Windows消息进行循环轮转,
直至消息为空,然后将控制返回给应用程序。  
  注示:仅在应用程序调用ProcessMessages时勿略消息进程效果,而并非在其他应用程序中。在冗长的操作中,
调用ProcessMessages周期性使得应用程序对画笔或其他信息产生回应。  
  注示:ProcessMessages不充许应该程序空闲,而HandleMessage则然.

二、如果你运行一个非常耗时的循环,那么在这个循环结束前,你的程序可能不会响应任何事件,
你按按钮没有反应,程序设置无法绘制窗体,看上去就如同死了一样,这有时不是很方便,
例如于终止循环的机会都没有了。这时你就可以在循环中加上这么一句,每次程序运行到这句时,
程序就会让系统响应一下消息,从而使你有机会按按钮,窗体有机会绘制。

三、Application.ProcessMessages的用法意义
在循环中加Application.ProcessMessages是可以防止其他控件没响应
举个例子容易明白:假如你的窗体上有两个按钮,一个“计算”,一个“停止”,
如果你的计算是密集运算或复杂处理,当你点了“计算”钮后,你将发现“停止”按钮不会响应你的点击了,
也就是说,你无法随时使计算过程停下来。而倘若你在计算的代码中加入Application.ProcessMessages,
则你的程序就有机会响应其它的事件了。
在大量的循环运算,又不想使用多线程时,为了计算机在运算时能响应用户的操作,又不破坏指令执行.
所起作用类似于VB中DoEvent方法.

function LoadDLL(Sender: TObject): Boolean; var CreateMainForm : function: TForm; stdCall; B : Boolean; begin Result := False; B := ParentIs('BDS.EXE'); SendMessage(frmsplash.Handle, Msg_Main, 204, 4); CheckParent; DM.ServerName := ''; DM.SysType := 0; uFunc.wpGrade.ParentName := 'gPallas.exe'; uFunc.wpGrade.SysName := 'gPallas'; uFunc.wpGrade.ProjectName := GetIniValue('gPallas', '项目名称', '广东省交通工程质量综合管理平台'); try Application.ProcessMessages; frmsplash.FormStyle := fsNormal; if not uFunc.wpGrade.UpgradeStartup(True) then Exit; frmsplash.FormStyle := fsStayOnTop; Application.ProcessMessages; SendMessage(frmsplash.Handle, Msg_Main, 204, 1); frmsplash.FormStyle := fsNormal; Application.ProcessMessages; if not LoadDLL_Resource then Exit; //资源文件,与其他无关 if not B then frmsplash.FormStyle := fsStayOnTop; Application.ProcessMessages; frmsplash.FormStyle := fsNormal; Application.ProcessMessages; if not LoadDLL_wpFunc then Exit; //通用函数,与其他无关 if not B then frmsplash.FormStyle := fsStayOnTop; Application.ProcessMessages; frmsplash.FormStyle := fsNormal; Application.ProcessMessages; if not LoadDLL_weepalsc(True) then Exit; //扩展函数,关联 wpFunc.DLL、UDM if not B then frmsplash.FormStyle := fsStayOnTop; Application.ProcessMessages; if lhwpBasic = 0 then Exit; @CreateMainForm := GetProcAddress(lhwpBasic, PAnsiChar('_CreateMainForm')); if @CreateMainForm = nil then Exit; if CreateMainForm = nil then Exit; except on E: Exception do begin ShowMessage(E.Message); TerminateProcess(OpenProcess(PROCESS_TERMINATE, Bool(0), GetCurrentProcessId), 0); end; end; Result := True; end;
最新发布
10-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值