找回密码
 加入
搜索
查看: 2201|回复: 1

[AU3基础] 【已解决】事件模式下_label控件_模拟双击_的问题

[复制链接]
发表于 2012-5-29 13:55:20 | 显示全部楼层 |阅读模式
本帖最后由 zerobin 于 2012-6-14 19:16 编辑

已解决,详见循环模式下的http://www.autoitx.com/thread-32885-1-1.html


------------------------------------------------------------------------------------------------
在论坛找到有消息循环模式下的模拟双击。就试想在事件模式下实现模拟双击。
思路1,在label上相同坐标处点击两次计为一次双击,否则重新计数。
思路2,在label上第一次点击时设置$T0,第二次点击时计算时间差$T1,当$T1<300时即判断为双击,否则重新计数。

问题:
       思路1:在相同位置快速点击两次无法模拟成功,放慢速度倒可以。请问:为什么连续在label1点击 3 次能模拟成功?这种思路下的两次鼠标点击的最小间隔是多少毫秒?
       思路2:为什么要连续的在label1上点击 3 次能模拟成功?

点击3次才能模拟成功,是当中一次的鼠标点击程序没有接受到呢还是程序有个相应间隔?我把while中的sleep去掉也一样的要3次。

请大家指教一下。谢谢

思路1的代码
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)

Global $first;一次点击坐标
Global $second;二次点击坐标
Global $cishu = 0;点击计数

$Form1 = GUICreate("Form1", 615, 438, 350, 138)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Label1 = GUICtrlCreateLabel("Label1", 184, 50, 148, 121, BitOR($SS_CENTER, $SS_CENTERIMAGE), $GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, 0x000000)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlSetOnEvent($GUI_EVENT_PRIMARYUP, "Label1Clickup")
$Label2 = GUICtrlCreateLabel("Label2", 184, 190, 148, 121, BitOR($SS_CENTER, $SS_CENTERIMAGE), $GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, 0x000000)
GUICtrlSetColor(-1, 0xffffff)
GUISetState(@SW_SHOW)

While 1
        Sleep(100)
WEnd

Func Form1Close()
        Exit
EndFunc   ;==>Form1Close
Func Label1Clickup()
        Switch $cishu
                Case 1
                        $second = MouseGetPos()
                        If $second[0] = $first[0] And $second[1] = $first[1] Then
                                MsgBox(0, "", "事件模式下模拟双击---YES", 1)
                                $cishu = 0
                        Else
                                MsgBox(0, "", "两次点击未在同一位置", 1)
                                $cishu = 0
                        EndIf
                Case 0
                        $cishu = 1
                        $first = MouseGetPos()
        EndSwitch
EndFunc   ;==>Label1Clickup
[/AU3]

思路2的代码
[AU3]#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Dim $cishu = 0, $t0, $t1 

$Form1 = GUICreate("Form1", 615, 438, 350, 138)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Label1 = GUICtrlCreateLabel("Label1", 184, 50, 148, 121, BitOR($SS_CENTER, $SS_CENTERIMAGE), $GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, 0x000000)
GUICtrlSetColor(-1, 0xffffff)
GUICtrlSetOnEvent($GUI_EVENT_PRIMARYUP, "Label1Clickup")
$Label2 = GUICtrlCreateLabel("Label2", 184, 190, 148, 121, BitOR($SS_CENTER, $SS_CENTERIMAGE), $GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, 0x000000)
GUICtrlSetColor(-1, 0xffffff)
GUISetState(@SW_SHOW)

While 1
        Sleep(10)
WEnd

Func Form1Close()
        Exit
EndFunc   ;==>Form1Close
Func Label1Clickup()
        Switch $cishu
                Case 0
                        $cishu = 1
                        $t0 = TimerInit()
                        Return
                Case 1
                        $t1 = TimerDiff($t0)
                        If $t1 < 300 Then
                                MsgBox(0, "", "YES", 1)
                                $cishu = 0
                        Else
                                MsgBox(0, "", "NO", 1)
                                $cishu = 0
                        EndIf
        EndSwitch
        Return
EndFunc   ;==>Label1Clickup
 楼主| 发表于 2012-5-29 18:58:28 | 显示全部楼层
顶一下,希望大家帮我解惑
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 09:35 , Processed in 0.079935 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表