网站怎么做qq登录,怎么把自己的网站推广,哪个网站有教做面食,网站建设合同的效力写在前面
这是PB案例学习笔记系列文章的第11篇#xff0c;该系列文章适合具有一定PB基础的读者。
通过一个个由浅入深的编程实战案例学习#xff0c;提高编程技巧#xff0c;以保证小伙伴们能应付公司的各种开发需求。
文章中设计到的源码#xff0c;小凡都上传到了gite…写在前面
这是PB案例学习笔记系列文章的第11篇该系列文章适合具有一定PB基础的读者。
通过一个个由浅入深的编程实战案例学习提高编程技巧以保证小伙伴们能应付公司的各种开发需求。
文章中设计到的源码小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.git 需要源代码的小伙伴们可以自行下载查看后续文章涉及到的案例代码也都会提交到这个仓库【pb-project-example】
如果对小伙伴有所帮助希望能给一个小星星⭐支持一下小凡。
一、小目标
这篇文章我们将回顾Time事件得使用。最终实现一个计时秒表功能。
具体功能为界面上有【计时】、【暂停】、【清除】三个按钮单击【计时】按钮文本框中时间开始计时
单击【暂停】按钮文本框计时暂停此时按钮文本变成【继续】字样单击【继续】按钮计时继续
单击【清除】按钮文本框数字归零具体效果如下 二、创建程序基本框架
① 新建examplework 工作区
② 新建exampleapp 应用
③ 新建w_main窗口
以上步骤如果忘记的小伙伴可以翻一翻该系列的第一篇文章
④ 在w_main窗口中添加控件
在窗口中建立一个SingleLineEdit控件和3个CommandButton控件各个控件名称依次为sle_1,cb_1cb_2,cb_3
调整位置后布局如下图所示 ⑤ 保存窗口
三、编写代码 为了实现秒表中的清零功能我们需要用到一个全局变量 说到全局变量我们这里列举出各种变量的作用域及使用说明
变量类型中文名称说明Global全局变量在应用的任何地方都可以访问可以在Application、Window、UserObject、Function、Menu中定义全局变量Instance实例变量如同一个对象的属性可以在Application、Window、UserObject、Menu中定义实例变量Shared共享变量共享变量在一个对象中定义存在于这个对象的不同实例可以在Application、Window、UserObject、Menu中定义共享变量Local局部变量只能在定义的脚本中访问变量可以在任何控件和对象的脚本中定义
① 定义全局变量
我们在w_main窗口中的Declare Global Variables选项卡中添加如下全局变量
Long gl_time② 窗口打开时【计时】按钮可操作【暂停】【清除】按钮不可以操作
在w_main窗口的open中添加如下代码
cb_1.enabledtrue
cb_2.enabledfalse
cb_3.enabledfalse③ 编辑Timer事件代码
这一步时最关键的,这段代码的主要功能是将一个表示总毫秒数的变量 l_time 更新为增加1毫秒后的新时间并将更新后的时、分、秒和毫秒格式化为字符串显示在一个文本控件 sle_1.text 上。
// 定义了四个长整型变量分别表示时、分、秒和毫秒
LONG ll_hour // 小时
LONG ll_min // 分钟
LONG ll_sec // 秒
LONG ll_msec // 毫秒// 假设 l_time 是一个包含总毫秒数的变量这里将其加1
gl_time gl_time 1// 计算新的毫秒数使用取模运算得到当前毫秒数
ll_msec mod(gl_time, 100)// 计算新的秒数先减去毫秒部分然后对100取模再除以60得到秒数
ll_sec mod((gl_time - ll_msec) / 100, 60)// 计算新的分钟数从剩余的时间中减去秒数然后对60取模
ll_min mod((gl_time - ll_msec - ll_sec * 100) / 6000, 60)// 计算新的小时数从剩余的时间中减去分钟和秒数然后对3600取模
ll_hour mod((gl_time - ll_msec - ll_sec * 100 - ll_min * 6000) / 360000, 60)// 将时间格式化为字符串如 00:00:00 00并显示在控件 sle_1.text 上
sle_1.text string(ll_hour, 00:) string(ll_min, 00:) string(ll_sec, 00) string(ll_msec, 00)④ 添加【计时】按钮Clicked事件代码
// 设置控件 cb_1 的启用状态为 false使其不可用
cb_1.enabled false// 设置控件 cb_2 的启用状态为 true使其可用
cb_2.enabled true// 设置控件 cb_3 的启用状态为 false使其不可用
cb_3.enabled false// 修改 cb_2 的文本内容为 暂停
cb_2.text 暂停// 将变量 l_time 设为0可能用于记录某种计时或状态
gl_time 0// 调用 timer 函数参数为0.01这通常意味着设置一个定时器每隔0.01秒执行一次回调函数
timer(0.01)这段代码的解释如下
首先用户点击了【计时】后禁用了 【计时】cb_1 按钮然后启用了【暂停】 cb_2 按钮接着禁用了【清除】 cb_3 控件是为了防止在特定条件下使用修改【暂停】cb_2 按钮的文本为 “暂停”l_time 变量被重置为0用于初始化一个计时器或者表示某种状态的清零最后调用 timer 函数设置了一个定时器每0.01秒触发一次回调函数
⑤ 添加【暂停】按钮Clicked事件代码
// 设置控件 cb_1 的启用状态为 false使其不可用
cb_1.enabled false// 设置控件 cb_2 的启用状态为 true使其可用
cb_2.enabled true// 设置控件 cb_3 的启用状态为 true使其可用
cb_3.enabled true// 判断 cb_2 的文本是否为 暂停
if cb_2.text 暂停 then// 如果是将 cb_2 的文本更改为 继续cb_2.text 继续// 停止定时器可能停止之前的0.01秒定时器timer(0)
else// 如果不是即文本为 继续将 cb_2 的文本恢复为 暂停cb_2.text 暂停// 启动定时器设置为每0.01秒执行一次timer(0.01)
end if这段代码的功能是根据 cb_2 控件的文本内容来切换其状态和定时器的行为
首先将【计时】cb_1 和 【暂停】cb_2 按钮被设置为可用状态【清除】 cb_3 也是可用的。然后检查 cb_2 的文本是否为 “暂停”。如果是 “暂停”则将 cb_2 的文本更改为 “继续”并停止计数如果不是 “暂停”即当前文本是 “继续”则将 cb_2 的文本改回 “暂停”并重新启动定时器设置为每0.01秒执行一次
注意这里的 timer(0) 表示停止定时器而 timer(0.01) 表示设置定时器每0.01秒触发一次
⑥ 添加【清除】按钮Clicked事件代码
// 设置控件 cb_1 的启用状态为 true允许用户与其交互
cb_1.enabled true// 设置控件 cb_2 的启用状态为 false禁止用户交互
cb_2.enabled false// 设置控件 cb_3 的启用状态也为 false同样不允许用户操作
cb_3.enabled false// 将控件 sle_1的文本设置为初始时间值 00:00:00 00表示0小时0分钟0秒0毫秒
sle_1.text 00:00:00 00// 重置变量 l_time 的值为0这通常用于开始一个新的计时周期或作为时间累计的起点
gl_time 0代码解释
点击【清除】按钮后启用控件 cb_1允许用户点击【计时】 cb_1按钮继续操作禁用控件 cb_2 和 cb_3这两个控件暂时不允许用户操作重置时间显示将显示时间的控件 sle_1 的文本设置为 “00:00:00 00”表示时间被重置为零重置计时变量将 gl_time 变量设置为0这是计时的基础变量用于累计时间
⑦ 在开发界面左边的System Tree 窗口中双击exampleapp并在其Open事件中添加如下代码
open(w_main)四、运行程序
以上代码添加完成后我们运行程序来测试一下是否达到了我们预期的效果 效果很好达到了我们预期的效果完结撒花 ★,°:.☆(▽)/ : ∗ . ° ★ ∗ 。 ∗ ★ , ° ∗ : . ☆ ( ▽ ) / :*.°★* 。*★,°*:.☆(▽)/ :∗.°★∗。∗★,°∗:.☆(▽)/:.°★ 。
本期内容到这儿就结束了希望对您有所帮助。
我们下期再见 ヾ(•ω•)o (●’◡’●)