如何使程序运行时暂停?按任意键或特定键继续!谢谢各位老兄!(请举例)
解决方案 »
- 阿里云开发者大会,俺去凑热闹有,delphier去哇
- FastReport如何实现续打?
- fastreport问题
- 求救啊!使用dbexpress的奇怪问题
- 请问结构化存储(OLE Structured Storage)是不是在同一时间只能够有一个线程或程序访问?
- 这样一个配置的手提,二手的大家帮我看看怎么样!
- 怎样将数据库中的内容导入到excel中?
- Delphi+oracle开发,怎么得到oracle库中任一数据表的所有字段名称?
- 有几个关键字不是很清楚,请教
- 安装从网上下载的组件时,dcc50.dll文件出错
- RealAudio1 控件怎么使他的那个标志 不在程序中出现 logo
- 怎样设cxTreeList4.0的行高????
var
t:DWORD;
begin
t:=GetTickCount;
while GetTickCount-t<tick do
Application.ProcessMessages;
end;
这个可以暂停的同时做消息处理,但不是真正的完全暂停,只是暂时停掉调用它的函数的执行
std::cin>>bb;
就算用getchar(),其实就是readln,也只能在命令行程序中暂停
有了这个思路,我们自然想到了OnKeyUp事件,判断伪码:
if key = VK_SPACE then GotoProgressBar;
GotoProgressBar过程就是用来实现暂停与继续效果的。在一个过程中要实现切换操作,我们必须有一个表示当前状态的布尔型变量比如ProgressStatus,它应该是一个私有字段,并且在程序的OnCreate事件中我们将其初始化为True。
下面基础的工作准备好后,我们的着力点就在GotoProgressBar过程上。为了每次按键都能从上次的状态或位置开始,我们必须定义一个作用域为过程而生命周期为整个程序周期的并且是可赋值的常量(打开编译器指令{$J}),下面是粗略的伪码,希望你能看懂。
procedure TFormTest.GotoProgress;
const
Percent : Double = 0;
begin
ProgressStatus := not ProgressStatus;
while Percent <= 0.9 do
begin
if ProgressStatus then exit;
Sleep(1000);
Percent := Percent + 0.1;
self.ProgressBar1.Position :=Trunc(Percent * self.ProgressBar1.Max);
Application.ProgressMessages;
//表示处理消息队列,因为在进度条运行的同时,用户可以暂停,这样就使
//ProgressStatus值发生改变,如果为真,将退出过程,实现暂停
end;
ProgressStatus := True; //当进度完成100%,将状态置真
Percent := 0; //当进度完成100%,下次将从0位置重新运行
end;