最近想在IS12制作的安装包的安装界面上实现一种定时功能:
当显示一个界面后,即开始计时,定时10秒到时如果用户还没有任何操作则默认是NEXT,进入下一步,10秒之前用户可做任何选择。
查了help文档中和time有关的所有搜索条目都没有看到IS12与定时有关的任何函数,只有Delay(秒);安装界面都是一个SD函数实现的,这里为了修改界面的动作,使用的是自定义对话框,由于只是希望在原有对话框的基础上多一个10-0的倒数显示,只要添加一个Text,所以这里在use interface的Dialog中,选择一个已定义的对话框,点击Edit Dialog layout,添加一个Text Area,再右键Clone这个对话框,将复制的dialog rename为MyDlg,在Installscript中添加自定义对话框MyDlg的脚本mydlg.rul
这里使用的是EzDefineDialog ( szDialogName, szDLLName, szDialogID, nDialogID ); 定义这个对话框,WaitOnDialog ( szDlgName );显示这个对话框,我查了很多资料,都是使用这个方式,所以我也采用这种方式。
对于定时功能,我做了大概以下3种探索:
1.使用Delay()函数
在WaitOnDialog 的default的返回值的处理中,使用Delay()来定时,
for nCount = 10 downto 1
Delay(1);//延时一秒
// Convert the number to a string.
nResult = NumToStr (strCount, nCount);
CtrlSetText( DLG_MYDLG, TIMETEXT, strCount);
endfor;
在for循环中,延时一秒则更新一下时间的显示,存在的问题,Delay这种方式本来就是阻塞了,程序会一直停留在这里无法响应任何其他的操作,可以正确的显示窗口,也可以看到时间在倒数,但是就是不能响应其他的操作,即其他的操作必需要在10后才能得到相应,failed
2.Delay(1)+Sendmessage
由于是For循环阻塞了消息循环,所以就想到使用Sendmessage的方式来发送messge,