Installshield12自定义对话框实现定时功能的探索

本文介绍了在Installshield12中如何在安装界面实现一个10秒倒计时功能。作者尝试了使用Delay函数、Delay结合SendMessage以及通过DLL实现定时器的方法,但都遇到了各种问题,如阻塞消息循环、无法响应消息等。作者寻求社区的帮助,希望能够找到解决在自定义对话框中实现定时功能的有效方案。
摘要由CSDN通过智能技术生成

最近想在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,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值