`
cfeers
  • 浏览: 140681 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于Delphi中的application.ProcessMessages问题(处理事件)

阅读更多

关于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作用

    在深入探讨`Application.ProcessMessages`的作用之前,我们首先需要理解其背景环境——Delphi,以及在Windows编程中消息处理的基本概念。Delphi是一种强大的开发工具,尤其在Windows平台上的应用程序开发中占据...

    delphi 读取BIN文件

    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,...

    Delphi常用函数.rar

    此外,还有一些系统级别的函数,如Application.ProcessMessages,用于处理应用程序的消息队列,保持界面的响应性。 在Delphi编程中,熟练运用这些函数是提升编程技巧的关键。通过阅读"Delphi_常用函数.txt",开发者...

    TGauge组件的用法示例,Delphi源码下载..rar

    在Delphi编程环境中,TGauge组件是一个非常有用的可视化控件,用于创建各种进度条或指示器,以显示任务的进度、电池电量等信息。本文将详细介绍如何使用TGauge组件,并提供一个Delphi源码示例。 一、TGauge组件介绍...

    Delphi WebBrowser 将一段HTML文字显示在浏览器中.rar

    Delphi WebBrowser 将一段HTML文字显示在网页浏览器中,实际是创建了一个HTML格式内容并显示出来,主要使用Delphi中内置的WebBrowser方法来实现:  WebBrowser1.Navigate('about:blank');  while(tag=0) do ...

    Delphi状态栏进度条实例..rar

    在Delphi中,可以使用OnProgress事件或直接调用Progress方法来更新进度。 ```delphi procedure TForm1.Button1Click(Sender: TObject); var I: Integer; begin ProgressBar1.Min := 0; ProgressBar1.Max := 100;...

    delphi消息处理示例

    在Delphi编程环境中,消息处理是一项关键的技能,它涉及到应用程序内部组件间的通信以及系统级事件的响应。本文将深入探讨“delphi消息处理示例”中的知识点,以帮助开发者理解如何有效地使用消息机制。 首先,我们...

    Delphi延时函数

    在这个例子中,我们使用了`Application.ProcessMessages`来处理应用程序的消息队列,这样即使在延时过程中,用户界面仍能保持响应。`Sleep(1)`是用来避免CPU占用过高的情况,当没有消息需要处理时,线程会短暂睡眠,...

    在进度条的Delphi窗体状态栏..rar

    `Application.ProcessMessages`用于在每次循环中处理消息队列,确保界面能够实时更新进度条的值。 需要注意的是,在实际应用中,进度条通常与后台任务关联,例如文件读写、网络下载等。在这种情况下,你可以根据...

    Delphi进度条 显示状态栏检查框..rar

    在Delphi编程环境中,进度条(ProgressBar)和状态栏(StatusBar)是常见的用户界面组件,它们为用户提供关于程序运行情况的视觉反馈。本教程将详细讲解如何在Delphi项目中使用进度条显示任务进度,并在状态栏添加...

    delphi 导出到excel的7种方法

    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+...

    Delphi 播放声音文件源码

    在等待播放完成的过程中,`Application.ProcessMessages` 用于处理消息循环,确保程序不阻塞。 如果你需要处理更复杂的音频操作,如控制音量、暂停或停止播放,TMediaPlayer 提供了相应的属性和方法,例如 Volume、...

    delphi之多线程编程(一).pdf

    "Application.ProcessMessages"是一个重要的Delphi方法,它允许应用程序在执行长循环时响应消息队列中的消息。这在进行大量UI更新时特别有用,可以避免界面冻结。在文中示例代码中,通过调用Application....

    delphi2010多线程编程

    在Delphi中,使用Application.ProcessMessages可以解决一些问题,例如在循环中不断地刷新UI界面。但是,这种方法并不是真正的多线程编程,程序仍然是单线程的。 三、使用TThread类实现多线程 Delphi提供了TThread...

    Delphi 图片颜色逐渐加深功能的实现.rar

    Delphi演示如何将一张图片的颜色加深,类似于调整对比度,不过本效果不加入了渐变加深的动画效果,按住按钮图片一直变暗下去,要知空间,你可看下以下代码: ... //让Application去处理消息队伍中的消息  end;

    delphi中线程同步问题

    例如,通过调用 `Application.ProcessMessages` 或 `Classes.WakeMainThread` 来确保主线程能及时处理同步事件。 5. **使用线程池**:对于重复性的后台任务,可以使用线程池来管理线程,减少创建和销毁线程的开销,...

    delphi+进度条

    在Delphi编程环境中,创建和使用进度条控件可以为应用程序提供更好的用户交互体验,让用户了解后台处理的进度。"delphi+进度条"这个主题主要涵盖了如何在Delphi的状态栏(StatusBar)中添加和使用进度条...

    详细描述了Delphi多线程编程,超级简单易懂

    2. **使用Application.ProcessMessages**:虽然可以部分解决问题,但在处理消息时会中断循环。 ```delphi procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to 500000 do ...

    广联达delphi笔试题

    - **Application.DoEvents** 用于让 Delphi 应用程序处理消息队列中的待处理事件。 - **Application.Idle** 方法通常用于响应应用程序空闲时发生的事件,例如定时器等。 - **Application.ProcessMessages** 方法...

    滚动模式进度条(delphi)

    3. **事件处理**:在Delphi中,你可以通过监听`OnChange`事件来响应进度条值的改变。当进度值改变时,这个事件会被触发,你可以在此事件处理函数中更新相关信息或者显示进度。 4. **控制进度**:你可以使用以下方法...

Global site tag (gtag.js) - Google Analytics