请问Application.ProcessMessages和Application.OnException的作用。(10分)

  • 主题发起人 主题发起人 dreamblue
  • 开始时间 开始时间
顾名思义
 
Application.ProcessMessages的作用是让Application去处理消息队伍中的消息。
举例说明它的用处:
你有一程序,要做一循环,
for i:= 0 to query1.recordcount-1 do
begin
做某事;
endl;
运行的时候你会发现,当转到另一程序再转回来的时候,窗体变发白了,
除了那个DBGRID。这是为什么,这是因为当你转回自己的程序的时候,系统向你发出了
FOCUS消息(不好意思,具体什么消息忘了),一般情况下,程序接收到此消息的时候
会重画先前被挡住的范围(消息里面会告诉程序要被挡住了那些范围)
但你的程序由于正在循环中,来不及处理这个消息,所以除了DBGRID(因为当记录跳动的时候
DBGRID会重画自己)处别的部份都是白的,
这时候你可以改一下你的循环那部份的代码,如下:for i:= 0 to query1.recordcount-1 do
begin
做某事;
Application.ProcessMessages
end;
使程序在做完一次循环后,就去处理它收到的消息。虽然不能实时响应系统消息,至少
也不会延迟太长时间。

至于Application.OnException,它是Application事件。
当程序有异常时会触发此事件的产生。

 
多人接受答案了。
 
Application.ProcessMessage的作用,比如说,
在进行一段时间很长的计算的时候,为了让程序能响应
如点击“取消”按钮等消息,可以这样写:
For i := 1 to 1000000000 do
Begin
do some processing;
Application.ProcessMessage; //响应消息
End;


 
补充Application.OnException
由于Application不象FORM和其实的控件。
FORM和其它控件的事件可以在对象检视器里双击事件名就可以在UNIT内输入代码,
所以Application.OnException的使用要多些功夫。不过很不复杂,而且象FORM等的控件
的事件也可以同样这样做:
首选定义一个处理程序异常的过程,注意参数要和Application.OnException需要的参数一样,
其它控件的事件定义过程中的参数要和相应的事件参数一样。
private
{ Private declarations }
procedure AppException(Sender: TObject; E:Exception);

procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
//异常产生处理
end;

适当的地方加上:
procedure TForm1.FormCreate(Sender: TObject);//此处在FORM建立的时候。
begin
Application.OnException := AppException;
end;

 
后退
顶部