关于Delphi中的application.ProcessMessages问题(处理事件)
━━━━━━━━━━━━━━━━━━━━━━━━━━
很多资料中提到,Delphi中的application.ProcessMessages相当于VB中的Doevents函数(转让进程控制),可是,在实际应用中,却不是这么回事。例:
(VB Code)
Private Sub Command1_Click()
Dim i As Integer
Dim j As Integer
Text1.Text = 0
For i = 1 To 10000
For j = 1 To 10000
DoEvents
Text1.Text = Val(Text1.Text) + 1
Next
Next
End Sub
Private Sub Command2_Click()
MsgBox 1
Unload Me
End Sub
=================================================================
(Delphi Code)
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
edit2.Text:='0';
for i:=1 to 10000 do
Begin
for j:=1 to 10000 do
Begin
application.ProcessMessages;
edit1.Text:=inttostr(strtoint(edit2.text)+ 1);
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage('1');
Close;
end;
=================================
当点击VB中的Command2按钮时,马上弹出消息框并关掉应用程序(或点窗体关闭键时会即时关掉程序),可是,点Delphi中的Button2Click时,虽然也弹出消息框,可是应用程序并不关闭,仍在计算,即使点窗体关闭键也要计算完后才关掉。在一些情况下,可能要用到大循环,因此,要给用户提供随时中止程序的功能,那么,在Delphi中,如何才能实现?
━━━━━━━━━━━━━━━━━━━━━━━━━━
procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage('1');
Application.Terminate; //改为这个。
end;
━━━━━━━━━━━━━━━━━━━━━━━━━━
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
edit2.Text:='0';
for i:=1 to 10000 do
Begin
for j:=1 to 10000 do
Begin
application.ProcessMessages;
if Application.Terminated then Exit;
edit1.Text:=inttostr(strtoint(edit2.text)+ 1);
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage('1');
Application.Terminate;
end;
分享到:
相关推荐
在深入探讨`Application.ProcessMessages`的作用之前,我们首先需要理解其背景环境——Delphi,以及在Windows编程中消息处理的基本概念。Delphi是一种强大的开发工具,尤其在Windows平台上的应用程序开发中占据...
Application.ProcessMessages; begin for i:=0 to j do begin form1.Label1.Caption:='正在读取第 '+inttostr(i)+' 包 '; form1.Memo1.Text:=form1.Memo1.Text+ midstr(strtohex(form1.Memo2.text),2048*i,...
此外,还有一些系统级别的函数,如Application.ProcessMessages,用于处理应用程序的消息队列,保持界面的响应性。 在Delphi编程中,熟练运用这些函数是提升编程技巧的关键。通过阅读"Delphi_常用函数.txt",开发者...
在Delphi编程环境中,TGauge组件是一个非常有用的可视化控件,用于创建各种进度条或指示器,以显示任务的进度、电池电量等信息。本文将详细介绍如何使用TGauge组件,并提供一个Delphi源码示例。 一、TGauge组件介绍...
Delphi WebBrowser 将一段HTML文字显示在网页浏览器中,实际是创建了一个HTML格式内容并显示出来,主要使用Delphi中内置的WebBrowser方法来实现: WebBrowser1.Navigate('about:blank'); while(tag=0) do ...
在Delphi中,可以使用OnProgress事件或直接调用Progress方法来更新进度。 ```delphi procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin ProgressBar1.Min := 0; ProgressBar1.Max := 100;...
在Delphi编程环境中,消息处理是一项关键的技能,它涉及到应用程序内部组件间的通信以及系统级事件的响应。本文将深入探讨“delphi消息处理示例”中的知识点,以帮助开发者理解如何有效地使用消息机制。 首先,我们...
在这个例子中,我们使用了`Application.ProcessMessages`来处理应用程序的消息队列,这样即使在延时过程中,用户界面仍能保持响应。`Sleep(1)`是用来避免CPU占用过高的情况,当没有消息需要处理时,线程会短暂睡眠,...
`Application.ProcessMessages`用于在每次循环中处理消息队列,确保界面能够实时更新进度条的值。 需要注意的是,在实际应用中,进度条通常与后台任务关联,例如文件读写、网络下载等。在这种情况下,你可以根据...
在Delphi编程环境中,进度条(ProgressBar)和状态栏(StatusBar)是常见的用户界面组件,它们为用户提供关于程序运行情况的视觉反馈。本教程将详细讲解如何在Delphi项目中使用进度条显示任务进度,并在状态栏添加...
Application.ProcessMessages; end; tsList.Add(s); try try ADOQuery.First; While Not ADOQuery.Eof do begin s:=''; for y:=0 to ADOQuery.FieldCount-1 do begin s:=s+ADOQuery.Fields[y].AsString+...
在等待播放完成的过程中,`Application.ProcessMessages` 用于处理消息循环,确保程序不阻塞。 如果你需要处理更复杂的音频操作,如控制音量、暂停或停止播放,TMediaPlayer 提供了相应的属性和方法,例如 Volume、...
"Application.ProcessMessages"是一个重要的Delphi方法,它允许应用程序在执行长循环时响应消息队列中的消息。这在进行大量UI更新时特别有用,可以避免界面冻结。在文中示例代码中,通过调用Application....
在Delphi中,使用Application.ProcessMessages可以解决一些问题,例如在循环中不断地刷新UI界面。但是,这种方法并不是真正的多线程编程,程序仍然是单线程的。 三、使用TThread类实现多线程 Delphi提供了TThread...
Delphi演示如何将一张图片的颜色加深,类似于调整对比度,不过本效果不加入了渐变加深的动画效果,按住按钮图片一直变暗下去,要知空间,你可看下以下代码: ... //让Application去处理消息队伍中的消息 end;
例如,通过调用 `Application.ProcessMessages` 或 `Classes.WakeMainThread` 来确保主线程能及时处理同步事件。 5. **使用线程池**:对于重复性的后台任务,可以使用线程池来管理线程,减少创建和销毁线程的开销,...
在Delphi编程环境中,创建和使用进度条控件可以为应用程序提供更好的用户交互体验,让用户了解后台处理的进度。"delphi+进度条"这个主题主要涵盖了如何在Delphi的状态栏(StatusBar)中添加和使用进度条...
2. **使用Application.ProcessMessages**:虽然可以部分解决问题,但在处理消息时会中断循环。 ```delphi procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to 500000 do ...
- **Application.DoEvents** 用于让 Delphi 应用程序处理消息队列中的待处理事件。 - **Application.Idle** 方法通常用于响应应用程序空闲时发生的事件,例如定时器等。 - **Application.ProcessMessages** 方法...
3. **事件处理**:在Delphi中,你可以通过监听`OnChange`事件来响应进度条值的改变。当进度值改变时,这个事件会被触发,你可以在此事件处理函数中更新相关信息或者显示进度。 4. **控制进度**:你可以使用以下方法...