`
骑猪逛街666
  • 浏览: 147182 次
  • 性别: 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原文链接

分享到:
评论

相关推荐

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

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

    广联达delphi笔试题

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

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

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

    delphi利用webbrowser控件下载彩票开奖号码

    application.ProcessMessages; if downok=true then break; end; delay(10000); mydoc:=myweb.Document; for i:=0 to mydoc.all.length-1 do if (mydoc.all.item(i).tagName='TD') or (mydoc.all.item(i).tagName=...

    Delphi常用函数.rar

    "下载说明.txt"可能提供了获取和解压资源的指南,包括任何特定的注意事项或安装步骤,确保用户能正确地使用和理解压缩包中的信息。 "A5下载- 更全的站长资源平台.url"是一个网站快捷方式,指向A5下载网站,这可能是...

    delphi写的全局鼠标钩子

    3. **消息循环**:为了确保钩子能够接收到消息,你需要一个消息循环,例如在主窗体的`Application.MainFormOnTaskbar`事件中加入`Application.ProcessMessages`。 4. **卸载钩子**:当不再需要全局鼠标钩子时,使用...

    INDY控件使用指南

    该组件能够在后台周期性地中断阻塞式的网络操作,并在此期间执行`Application.ProcessMessages`方法,从而避免UI冻结,同时确保网络操作依然保持阻塞状态,不影响其正常进行。 通过简单地在项目中添加一个`...

    DELPHI常用函数集及简要范例

    - `Application.ProcessMessages`:处理应用程序的消息队列,更新界面状态。 10. **正则表达式** - `TRegEx` 类:提供正则表达式的匹配和替换功能。 以上只是Delphi常用函数的一部分,实际使用中还有许多其他...

Global site tag (gtag.js) - Google Analytics