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;
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()不注釋時,點擊普通循環按鈕,拖動窗體,有反應。拖動下拉框,數據網格顯示控件觸發數據集滾動,導致遊標跳動,出現空格行。
最後更新:2017-05-07 07:57:20