zerobin 发表于 2012-5-29 13:55:20

【已解决】事件模式下_label控件_模拟双击_的问题

本帖最后由 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 = $first And $second = $first Then
                                MsgBox(0, "", "事件模式下模拟双击---YES", 1)
                                $cishu = 0
                        Else
                                MsgBox(0, "", "两次点击未在同一位置", 1)
                                $cishu = 0
                        EndIf
                Case 0
                        $cishu = 1
                        $first = MouseGetPos()
        EndSwitch
EndFunc   ;==>Label1Clickup


思路2的代码
#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

zerobin 发表于 2012-5-29 18:58:28

顶一下,希望大家帮我解惑
页: [1]
查看完整版本: 【已解决】事件模式下_label控件_模拟双击_的问题