摘要: 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()不注释时,点击普通循环按钮,拖动窗体,有反应。拖动下拉框,数据网格显示控件触发数据集滚动,导致游标跳动,出现空格行。
原文链接
相关推荐
为了避免这种情况,合理地使用`Application.ProcessMessages`可以确保即使在执行复杂操作时,程序也能够及时响应用户的操作,比如鼠标点击或者键盘输入。 #### 3. 控制执行流程 除了防止UI冻结外,`Application....
【标题】"Application"所代表的是一个集合,包含多个由C#编程语言开发的小应用程序,这些程序涵盖了系统管理、文件操作、数据保护等多个实用功能。接下来,我们将详细探讨每个组件的功能及其背后的IT知识点。 首先...
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,...
while(tag=0) do Application.ProcessMessages; vv := VarArrayCreate([0, 0], varVariant); HTMLDocument := WebBrowser1.Document as IHTMLDocument2; HTMLDocument.Write(PSafeArray(TVarData(vv).VArray...
在这个例子中,我们使用了`Application.ProcessMessages`来处理应用程序的消息队列,这样即使在延时过程中,用户界面仍能保持响应。`Sleep(1)`是用来避免CPU占用过高的情况,当没有消息需要处理时,线程会短暂睡眠,...
excel:=CreateOleObject('Excel.Application'); excel.workbooks.add; except //screen.cursor:=crDefault; showmessage('无法调用Excel!'); exit; end; savedialog:=tsavedialog.Create(nil); savedialog...
3. 使用Application.ProcessMessages处理消息: "Application.ProcessMessages"是一个重要的Delphi方法,它允许应用程序在执行长循环时响应消息队列中的消息。这在进行大量UI更新时特别有用,可以避免界面冻结。在...
Delphi演示如何将一张图片的颜色加深,类似于调整对比度,不过本效果不加入了渐变加深的动画效果,按住按钮图片一直变暗下去,要知... Application.ProcessMessages; //让Application去处理消息队伍中的消息 end;
// 如果任务允许,可以使用Application.ProcessMessages更新界面 Application.ProcessMessages; end; end; ``` 6. **事件驱动的进度更新** 也可以通过绑定OnProgress事件来更新进度条,这适用于多线程或多...
在Delphi中,使用Application.ProcessMessages可以解决一些问题,例如在循环中不断地刷新UI界面。但是,这种方法并不是真正的多线程编程,程序仍然是单线程的。 三、使用TThread类实现多线程 Delphi提供了TThread...
Application.ProcessMessages; end; procedure TFrmProgress.SetProgressMax(const Value: Integer); begin FProgressMax := Value; ProgressBar.Max:=FProgressMax; end; procedure TFrmProgress....
图片的垂直交错效果,Delphi 编写的图片垂直交错显示效果,之前就分享过这种效果,类似百叶窗的交替显示... Application.ProcessMessages; end; form1.Canvas.Draw(0,0,newbmp); i:=i 2; end; newbmp.free;
在等待播放完成的过程中,`Application.ProcessMessages` 用于处理消息循环,确保程序不阻塞。 如果你需要处理更复杂的音频操作,如控制音量、暂停或停止播放,TMediaPlayer 提供了相应的属性和方法,例如 Volume、...
每次迭代,进度条的位置都会更新,通过Application.ProcessMessages确保界面更新不被阻塞。 此外,状态栏中的Panels可以通过调整其Width属性来控制显示的宽度,Text属性来设定显示的内容。例如,我们可以动态更新...
1. **问题:**解释 Delphi 中内存管理的基本原理,并说明为什么 TList 的 Add 方法使用 Insert 而不是直接添加元素。 **答案解析:** - **Delphi 内存管理基本原理**:Delphi 使用自动垃圾回收机制来管理内存。...
你可以使用 `Application.ProcessMessages` 函数确保界面在处理耗时操作时保持响应。但需要注意,过多使用此函数可能导致性能下降,因此应谨慎使用。 4. **异步处理**:如果任务是异步执行的,如网络下载或大文件...
使用`Application.ProcessMessages`可以允许界面更新,但要谨慎,因为它可能导致意外的用户输入。 通过以上步骤,你可以在Delphi应用中创建一个具有进度条和状态栏检查框的用户界面,以提供更丰富的用户体验。记得...
在此过程中,关键的一行代码`Application.ProcessMessages;`起到了至关重要的作用。 #### `Application.ProcessMessages` 这行代码的作用是在循环中插入一个消息处理过程。这意味着即使在延时期间,Delphi的事件...
5. **模拟进度**:在执行长时间任务时,可以使用`Application.ProcessMessages`来模拟进度。例如,在循环中每次完成一部分工作后,更新`Position`并调用`Application.ProcessMessages`,这样用户界面可以保持响应,...
此代码通过调用`GetTickCount`函数获取当前系统的运行时间作为基准时间,然后通过循环等待两秒的时间差,期间通过`Application.ProcessMessages`确保消息循环正常运行。 #### 总结 通过以上步骤,我们可以有效地在...