131738 发表于 2011-3-10 18:20:59

[已解决]如何将鼠标点击坐标 x、y 值转换为二维数组?谢谢!!!

本帖最后由 131738 于 2011-3-10 19:40 编辑

决定使用一维数组,容易些!!!

如 2 次点击:

获取到第一次坐标值:62,27

获取到第二次坐标值: 106,92

如何转换为如下形式的二维数组:

= 62
= 27

= 106
= 92

谢谢!!!!

突然想到用一维数组也许可以,在研究下!!!!!!!!!!!

xyold1 发表于 2011-3-10 19:11:00

本帖最后由 xyold1 于 2011-3-10 19:13 编辑

试着用下这个函数(改自A版)在1维或2维数组的末尾添加指定的值,2维数组的列数还可以增加的
Func __ArrayAdd(ByRef $avArray, $vValue0, $vValue1 = '', $vValue2 = '',$vValue3 = '',$0_auto = 1)
      ;说明:在1维或2维数组的第2维为2的数组末尾添加指定的值。(修改自原_ArrayAdd函数)
      ;Afan提示:$0_auto参数为1时自动判断0号元素的值是否为数组的数量-1,是则自动+1。
;~                 MsgBox(0,0,UBound($avArray, 0))
      If Not IsArray($avArray) Then Return SetError(1, 0, -1)
      Local $iUBound = UBound($avArray)
      If UBound($avArray, 0) = 1 Then
                If $0_auto And $avArray = $iUBound - 1 Then $avArray += 1
                ReDim $avArray[$iUBound + 1]
                $avArray[$iUBound] = $vValue0
      ElseIf UBound($avArray, 0) = 2 And UBound($avArray, 2) = 2 Then
                If UBound($avArray, 2) <> 2 Then Return SetError(2, 0, -1)
                If $0_auto And $avArray = $iUBound - 1 Then $avArray += 1
                ReDim $avArray[$iUBound + 1]
                $avArray[$iUBound] = $vValue0
                $avArray[$iUBound] = $vValue1
               ElseIf UBound($avArray, 0) = 2 And UBound($avArray, 2) =3 Then ;判断是否为2维数组,如果是3列
                If UBound($avArray, 2) <> 3 Then Return SetError(2, 0, -1) ;
                If $0_auto And $avArray = $iUBound - 1 Then $avArray += 1
                ReDim $avArray[$iUBound + 1]
                $avArray[$iUBound] = $vValue0
                $avArray[$iUBound] = $vValue1
                                $avArray[$iUBound] = $vValue2
;~                                 MsgBox(0,0,$avArray[$iUBound])
                               ElseIf UBound($avArray, 0) = 2 And UBound($avArray, 2) =4 Then ;如果是4列
                If UBound($avArray, 2) <> 4 Then Return SetError(2, 0, -1)
                If $0_auto And $avArray = $iUBound - 1 Then $avArray += 1
                ReDim $avArray[$iUBound + 1]
                $avArray[$iUBound] = $vValue0
                $avArray[$iUBound] = $vValue1
                                $avArray[$iUBound] = $vValue2
                                $avArray[$iUBound] = $vValue3
      ElseIf UBound($avArray, 0) > 2 Then
                Return SetError(3, 0, -1)
      EndIf
      Return $iUBound
EndFunc   ;==>__ArrayAdd

yhxhappy 发表于 2011-3-10 19:27:00

本帖最后由 yhxhappy 于 2011-3-10 19:36 编辑

#Include <Misc.au3>
#Include <Array.au3>

Dim $Pos
HotKeySet("a", "dd")
HotKeySet("{ESC}", "quit")

While 1
        If _IsPressed(01) = 1 Then
                $MPos = MouseGetPos()
                ReDim $Pos
                $Pos = $MPos
                $Pos = $MPos
                $Pos = UBound($Pos)-1
        EndIf
        ToolTip("随意点鼠标,按A键显示数组,ESC键退出")
        Sleep(150)   ;这个延时很重要,如果用户连续点同一个位置,不加延时会一下子添加好几行相同坐标进数组
WEnd

Func dd()
        _ArrayDisplay($Pos)
EndFunc

Func quit()
        Exit
EndFunc

131738 发表于 2011-3-10 19:36:41

试着用下这个函数(改自A版)在1维或2维数组的末尾添加指定的值,2维数组的列数还可以增加的
xyold1 发表于 2011-3-10 19:11 http://autoitx.com/images/common/back.gif

谢谢!!!虽然决定用一维数组,还是谢谢您的代码!!!收下了。。。。。

131738 发表于 2011-3-10 19:37:08


yhxhappy 发表于 2011-3-10 19:27 http://autoitx.com/images/common/back.gif

谢谢您的代码!!!收下了

lixiaolong 发表于 2011-3-11 00:20:43

回复 1# 131738

写的简单点.
#include <Misc.au3>

AdlibRegister("mouse", 10)
HotKeySet("{ESC}", "quit")

$i = 1

While 1
        Sleep(10)
WEnd

Func mouse()
        If _IsPressed(01) = 1 Then
                $pos = MouseGetPos()
                MsgBox(0, "第" & $i & '次', $pos & "," & $pos)
                $i += 1
        EndIf
EndFunc   ;==>dd

Func quit()
        Exit
EndFunc   ;==>quit

131738 发表于 2011-3-11 00:44:34

本帖最后由 131738 于 2011-3-11 00:45 编辑

回复 6# lixiaolong

谢谢!!!我没表述清楚,坐标值已经有了,只是要将实数值带入另一个程序,

在这另一程序中将实数值转换为表示 X , Y的变量值,进行点击处理。。。

再次谢谢!!!已经解决了。。。

tjwen 发表于 2011-10-28 17:27:54

学习了,学习。新手路过

netgogo 发表于 2011-11-3 01:28:44

标记下,好东西
页: [1]
查看完整版本: [已解决]如何将鼠标点击坐标 x、y 值转换为二维数组?谢谢!!!