摘要: 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;

Application.ProcessMessages使用说明
运行程序,填写学生个数,填充数据集按钮产生数据。

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()不注释时,点击普通循环按钮,拖动窗体,有反应。拖动下拉框,数据网格显示控件触发数据集滚动,导致游标跳动,出现空格行。
Application.ProcessMessages使用说明原文链接

相关文章:

  • 2021-04-29
  • 2021-09-13
  • 2021-12-20
  • 2022-01-19
  • 2021-12-19
  • 2021-12-03
  • 2022-01-02
猜你喜欢
  • 2022-12-23
  • 2021-11-09
  • 2021-05-30
  • 2022-12-23
  • 2022-01-30
相关资源
相似解决方案