`
骑猪逛街666
  • 浏览: 141768 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Application.ProcessMessages使用说明

阅读更多

摘要: Application.ProcessMessages使用说明

application.ProcessMessages的主要作用使程序在循环时能够相应外界事件。

实例程序:

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    dbgrd1: TDBGrid;
    ds1: TDataSource;
    edt1: TEdit;
    lbl1: TLabel;
    Button1: TButton;
    kbm_info: TkbmMemTable;
    kbm_infoid: TIntegerField;
    kbm_infoname: TStringField;
    kbm_infoscore: TIntegerField;
    kbm_inforemark: TStringField;
    Button2: TButton;
    kbm_score: TkbmMemTable;
    kbm_scoreid: TIntegerField;
    kbm_scoreremark: TStringField;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  count, i : Integer;
begin
  inherited;
  try
    kbm_info.Close;
    kbm_info.Open;
    kbm_score.Close;
    kbm_score.Open;
    count := StrToInt(edt1.Text);
    for i := 1 to count do
    begin
      kbm_info.Append;
      kbm_info.FieldByName('id').AsInteger := count;
      kbm_info.FieldByName('name').AsString := '学生' + IntToStr(i);
      kbm_info.FieldByName('score').AsInteger := Random(100);
      kbm_info.Post;

      kbm_score.Append;
      kbm_score.FieldByName('id').AsInteger := count;
      kbm_score.FieldByName('remark').AsString := '随机得分';
      kbm_score.Post
    end;
  finally

  end;

end;

203446_ax8N_2862751
运行程序,填写学生个数,填充数据集按钮产生数据。

procedure TForm1.Button2Click(Sender: TObject);
begin
  inherited;
  kbm_info.First;
  while not kbm_info.Eof do
  begin
    kbm_score.First;
    while not kbm_score.Eof do
    begin
      if kbm_info.FieldByName('id').AsInteger = kbm_score.FieldByName('id').AsInteger then
      begin
        kbm_info.Edit;
        kbm_info.FieldByName('remark').AsString := kbm_score.FieldByName('remark').AsString;
        kbm_info.Post;
        //Application.ProcessMessages(); //试试注释和不注释的效果
        Break;
      end;
      kbm_score.Next;
    end;
    kbm_info.Next;
  end;
  //
end;

application.ProcessMessages()注释时,点击普通循环按钮,拖动窗体,无反应。

application.ProcessMessages()不注释时,点击普通循环按钮,拖动窗体,有反应。拖动下拉框,数据网格显示控件触发数据集滚动,导致游标跳动,出现空格行。
204334_4vP3_2862751原文链接

分享到:
评论

相关推荐

    Application.ProcessMessages作用

    为了避免这种情况,合理地使用`Application.ProcessMessages`可以确保即使在执行复杂操作时,程序也能够及时响应用户的操作,比如鼠标点击或者键盘输入。 #### 3. 控制执行流程 除了防止UI冻结外,`Application....

    Application

    【标题】"Application"所代表的是一个集合,包含多个由C#编程语言开发的小应用程序,这些程序涵盖了系统管理、文件操作、数据保护等多个实用功能。接下来,我们将详细探讨每个组件的功能及其背后的IT知识点。 首先...

    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 WebBrowser 将一段HTML文字显示在浏览器中.rar

     while(tag=0) do Application.ProcessMessages;  vv := VarArrayCreate([0, 0], varVariant);  HTMLDocument := WebBrowser1.Document as IHTMLDocument2;  HTMLDocument.Write(PSafeArray(TVarData(vv).VArray...

    Delphi延时函数

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

    delphi 导出到excel的7种方法

    excel:=CreateOleObject('Excel.Application'); excel.workbooks.add; except //screen.cursor:=crDefault; showmessage('无法调用Excel!'); exit; end; savedialog:=tsavedialog.Create(nil); savedialog...

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

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

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

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

    delphi+进度条

    // 如果任务允许,可以使用Application.ProcessMessages更新界面 Application.ProcessMessages; end; end; ``` 6. **事件驱动的进度更新** 也可以通过绑定OnProgress事件来更新进度条,这适用于多线程或多...

    delphi2010多线程编程

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

    delphi_进度条

    Application.ProcessMessages; end; procedure TFrmProgress.SetProgressMax(const Value: Integer); begin FProgressMax := Value; ProgressBar.Max:=FProgressMax; end; procedure TFrmProgress....

    Delphi 垂直交错显示效果.rar

    图片的垂直交错效果,Delphi 编写的图片垂直交错显示效果,之前就分享过这种效果,类似百叶窗的交替显示... Application.ProcessMessages;  end;  form1.Canvas.Draw(0,0,newbmp);  i:=i 2;  end;  newbmp.free;

    Delphi 播放声音文件源码

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

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

    每次迭代,进度条的位置都会更新,通过Application.ProcessMessages确保界面更新不被阻塞。 此外,状态栏中的Panels可以通过调整其Width属性来控制显示的宽度,Text属性来设定显示的内容。例如,我们可以动态更新...

    广联达delphi笔试题

    1. **问题:**解释 Delphi 中内存管理的基本原理,并说明为什么 TList 的 Add 方法使用 Insert 而不是直接添加元素。 **答案解析:** - **Delphi 内存管理基本原理**:Delphi 使用自动垃圾回收机制来管理内存。...

    aas.rar_DELPHI进度条_delphi 进度条_进度条

    你可以使用 `Application.ProcessMessages` 函数确保界面在处理耗时操作时保持响应。但需要注意,过多使用此函数可能导致性能下降,因此应谨慎使用。 4. **异步处理**:如果任务是异步执行的,如网络下载或大文件...

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

    使用`Application.ProcessMessages`可以允许界面更新,但要谨慎,因为它可能导致意外的用户输入。 通过以上步骤,你可以在Delphi应用中创建一个具有进度条和状态栏检查框的用户界面,以提供更丰富的用户体验。记得...

    dephi延时代码

    在此过程中,关键的一行代码`Application.ProcessMessages;`起到了至关重要的作用。 #### `Application.ProcessMessages` 这行代码的作用是在循环中插入一个消息处理过程。这意味着即使在延时期间,Delphi的事件...

    滚动模式进度条(delphi)

    5. **模拟进度**:在执行长时间任务时,可以使用`Application.ProcessMessages`来模拟进度。例如,在循环中每次完成一部分工作后,更新`Position`并调用`Application.ProcessMessages`,这样用户界面可以保持响应,...

    巧用Delphi制作溅射屏幕

    此代码通过调用`GetTickCount`函数获取当前系统的运行时间作为基准时间,然后通过循环等待两秒的时间差,期间通过`Application.ProcessMessages`确保消息循环正常运行。 #### 总结 通过以上步骤,我们可以有效地在...

Global site tag (gtag.js) - Google Analytics