已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
按键精灵开发教程:QUI界面不卡死来源:按键学院 【按键精灵】Qui界面加载之后卡死?点击控件之后卡死?为什么会出现这种情况?该如何解决?且听小编细细道来 原因QUI界面事件如果添加循环命令,或者延时命令。添加之后,我们再去点击QUI界面,就会出现卡死的现象。QUI界面事件:窗口事件以及控件事件统称为界面事件。界面事件?按键精灵是怎么知道我们点击了哪个控件,鼠标移动到了界面的哪里了呢?其实,我们看似平常的一个操作,例如:移动鼠标到窗口界面上点击输入框。这样的一个操作,其实是被分解成了几百条消息反馈给按键精灵软件,告诉它鼠标现在在哪里,做了什么,点击了控件,然后控件要响应什么操作等等。而这些消息,按键精灵软件会逐条处理,处理完这一条才会继续处理下一条。所以,当它在处理循环事件会延时事件时,没有处理完之前都不处理其它信息。使用循环命令导致界面卡死的解决方法1、 多线程 界面上有两个控件,输入框1(InputBox1)和按钮1(Button1) 当按下按钮1(Button1)时,启动线程,将延时命令和循环命令放在线程里执行。循环一百次给输入框赋值。代码:Event Form1.Button1.Click BeginThread 循环 /启动线程End EventSub 循环 For i = 1 To 100 Delay 200 Form1.InputBox1.Text = & i NextEnd Sub2、 定时器定时器的有效设置为否时间间隔设置为200毫秒(执行一次循环需要的时间)当按下按钮1(Button1)时,将定时器的有效设置为是( Form1.Timer1.Enabled = True)定时器每隔200毫秒会执行一次 Timer 事件我们在Timer事件中,定义一个变量i,每执行一次 Timer时间i的值叠加1,直到i的值等于我们设置循环次数,则将定时器的有效设置为否。代码:Event Form1.Button1.Click Form1.Timer1.Enabled = TrueEnd EventEvent Form1.Timer1.Timer i = i + 1 If i= 100 then Form1.Timer1.Enabled=False Form1.InputBox1.Text = & iEnd Event3、 API函数 我们已经知道了,界面卡住,是因为在处理循环命令时,产生了其它的消息导致的。那么我们可以这样做,当在执行循环命令时,界面上的其它所有消息都忽略掉,不反馈给按键精灵软件要用到四个Api函数:LocalAlloc、PeekMessageA、TranslateMessage、 DispatchMessageA、LocalFree代码:Declare Function PeekMessageA Lib user32.dll Alias PeekMessageA(ByVal 消息格式 As Any,ByVal 窗口句柄 As Long,ByVal 消息最小过滤值 As Long,ByVal 消息最大过滤值 As Long,ByVal 删除消息 As Long) As LongDeclare Function LocalAlloc Lib kernel32 Alias LocalAlloc (ByVal wOemChar As Long,ByVal wOmChar As Long) As LongDeclare Function LocalFree Lib kernel32 Alias LocalAlloc (ByVal hMem As Long) As LongDeclare Function TranslateMessage Lib user32.dll Alias TranslateMessage(ByVal 消息结构 As Any) As LongDeclare Function DispatchMessageA Lib user32.dll Alias DispatchMessageA(ByVal 消息结构 As Any) As LongEvent Form1.Button1.ClickFor i=1 to 100 Form1.InputBox1.Text = & i call 处理事件NextEnd EventSub 处理事件() WM=LocalAlloc (0,28) /分配一块存储空间用于存放消息 If PeekMessageA(WM, 0, 0, 0, 1) 0 Then /获取当前程序的消息存放在 消息结构里,然后将消息删除,忽略不处理 TranslateMessage WM /将空消息转换成程序可识别格式(虚拟键消息转换为字符消息) DispatchMessageA WM /将转完格式的空消息反馈给程序 End If LocalFree WM /释放存储空间End Sub使用延时命令导致界面卡死的解决方法API函数当我们的延时命令不是放在多线程里,也不是靠定时器来处理,一定要放在QUI事件中时,该怎么办呢?我们用上面说到的Api函数忽略消息的方法外加一个API函数:GetTickCount来模拟一个在QUI界面事件中可执行的延时命令。函数:GetTickCount:GetTickCount返回从操作系统启动所经过的毫秒数步骤:我们先获取一次操作系统启动经过的毫秒数,放到变量s中然后循环再次获取操作系统启动经过的毫秒数,如果小于我们设定的延时,就继续忽略消息,如果达到延时数则继续下一条循环。代码:Declare Function PeekMessageA Lib user32.dll Alias PeekMessageA(ByVal 消息格式 As Long,ByVal 窗口句柄 As Long,ByVal 消息最小过滤值 As Long,ByVal 消息最大过滤值 As Long,ByVal 删除消息 As Long) As LongDeclare Function LocalAlloc Lib kernel32 Alias LocalAlloc (ByVal wOemChar As Long,ByVal wOmChar As Long) As LongDeclare Function LocalFree Lib kernel32 Alias LocalAlloc (ByVal hMem As Long) As LongDeclare Function TranslateMessage Lib user32.dll Alias TranslateMessage(ByVal 消息结构 As Long) As LongDeclare Function DispatchMessageA Lib user32.dll Alias DispatchMessageA(ByVal 消息结构 As Long) As LongDeclare Function GetTickCount Lib kernel32 Alias GetTickCount() As LongEvent Form1.Button1.Click For i = 0 To 10 Form1.InputBox1.Text=&i call 超级延时 (200) NextEnd EventSub 超级延时(毫秒) Dim s s = GetTickCount() Wm=LocalAlloc(0,28) While (GetTickCount() - s 毫秒) If PeekMessageA(Wm, 0, 0, 0, 1) 0 Then /得到消息 TranslateMessage Wm DispatchMessageA Wm End If Wend LocalFree WmEnd Su
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 存款保险基金管理有限责任公司2026年度校园公开招聘备考题库完整参考答案详解
- 2026年洛阳市三鑫投资有限公司副总经理招聘备考题库参考答案详解
- 2026年福建华南女子职业学院冬季人才招聘10人备考题库及答案详解(夺冠系列)
- 2026年南平市属医疗卫生单位第九届“人才·南平校园行”紧缺急需人才招聘备考题库及参考答案详解
- 2026年上海外国语大学中阿改革发展研究中心行政管理人员招聘备考题库参考答案详解
- 2026年宁波市北仑区小港街道办事处招聘编外人员备考题库及一套答案详解
- 2026年绵阳市游仙区疾病预防控制中心编外专业技术人员招聘备考题库及答案详解1套
- 2026年北海银滩开发投资股份有限公司公开招聘人员备考题库完整参考答案详解
- 人保财险昆明市分公司2026届校园招聘8人的备考题库完整答案详解
- 2026年宜宾市叙州区妇幼保健计划生育服务中心招聘备考题库附答案详解
- 眼科护士长年终工作总结
- 《认知觉醒》读书分享
- 2025国际经济法司法考试试题带答案解释
- 2025年贵州省委党校在职研究生招生考试(马克思主义理论)历年参考题库含答案详解(5卷)
- 2025-2030中国NTP服务行业市场现状供需分析及投资评估规划分析研究报告
- 临时教师劳务工协议书
- 期中测试卷(试题)-2024-2025学年六年级上册数学苏教版
- 在线网课知慧《学术英语写作(天津外国语大学)》单元测试考核答案
- 航空运输合同纠纷起诉状
- 产品审核和过程审核
- HG-T 20583-2020 钢制化工容器结构设计规范
评论
0/150
提交评论