閱讀655 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

最後更新:2017-05-07 07:57:20

  上一篇:go 索引順序掃描引發的heap scan IO放大, 背後的統計學原理與解決辦法
  下一篇:go 詳解Python中的閉包