Что нового

[Мышь, клавиатура] копирование координат в TextBox

warshadow

Новичок
Сообщения
62
Репутация
0
Всем добрый день! У меня имеется форма, на ней около 74 тексбоксов , по 2 текстбокс в каждой строке для координат X и Y
Для определения координат я использовал функцию GUI_EVENT_MOUSE:
Код:
Func GetMouseCoordinates($nEventMsg)
   Switch $nEventMsg
      Case $GUI_EVENT_MOUSEMOVE
         $aRet = DllCall("user32.dll", "int", "WindowFromPoint", "long", MouseGetPos(0), "long", MouseGetPos(1))
         $tPoint = _WinAPI_GetMousePos(True, $aRet[0])
		 $X=DllStructGetData($tPoint, "X")
         $Y= DllStructGetData($tPoint, "Y")
         ;GUICtrlSetData ($hInput_X,$X)
         ;GUICtrlSetData ($hInput_Y,$Y)
		 $pogr=GUICtrlRead($pogreshnost)
		 GUICtrlSetData  (  $hLabel,'X = ' & $aRet[1] & @LF & 'Y = ' & $aRet[2]-$pogr)
         EndSwitch
EndFunc

Как мне реализовать чтобы по нажатию левой кнопкой мыши по объекту у меня данные координат с начало сохранялись в буфер обмена, а из него уже проходили в textbox1,textbox2,textbox3....textbox74 и соответственно отображались в них,суть в том,что 1 клик = X=textbox1 и Y=textbox2
Вот наглядная картинка формы: http://s40.radikal.ru/i088/1004/3c/3762572827d4.jpg
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Сделал я вот так:
Код:
Case $GUI_EVENT_PRIMARYDOWN
				 $ii+=1
		 If $ii=1 Then
		   $mas= GUICtrlSetData ($vibr1,MouseGetPos(0)) 
		    $mas1=  GUICtrlSetData ($vibr2,MouseGetPos(1)-$pogr) 
		EndIf
		If $ii=2 Then
		   $mas= GUICtrlSetData ($vibr3,MouseGetPos(0)) 
		    $mas1=  GUICtrlSetData ($vibr4,MouseGetPos(1)-$pogr) 
		EndIf
		If $ii=3 Then
		   $mas= GUICtrlSetData ($vibr5,MouseGetPos(0)) 
		    $mas1=  GUICtrlSetData ($vibr6,MouseGetPos(1)-$pogr) 
.
.
If $ii=37 Then
		   $mas= GUICtrlSetData ($vibr73,MouseGetPos(0)) 
		    $mas1=  GUICtrlSetData ($vibr74,MouseGetPos(1)-$pogr)

Вопрос такой: мне он сохраянет в текстбокс только в самой программе...а я хочу чтобы в мозиле или вообще в самой винде когда щелкал он записывал координаты.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
warshadow [?]
данные координат с начало сохранялись в буфер обмена
Занести В буфер :
Код:
ClipPut ( $X & '|' & $Y )


Прочитать из буфера :
Код:
$sBuf=ClipGet ( )
MsgBox(0,'',$sBuf)
$aBuf=StringSplit ( $sBuf, "|")
$XX=$aBuf[1]
$YY=$aBuf[2]
MsgBox(0,'','$XX = ' & $XX & @CRLF & '$YY = ' & $YY)
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
Так, это хорошо, но когда свернута программа, то у меня координаты не запоминаются в буфер обмена и в тексбоксы тоже
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
warshadow [?]
Так, это хорошо, но когда свернута программа, то у меня координаты не запоминаются в буфер обмена и в тексбоксы тоже
Это уже совсем другой вопрос
Все запоминается и в свернутом и в развернутом :
Код:
#include <GUIConstants.au3>

   HotKeySet("^s", "Set")
   HotKeySet("^g", "Get")

   GUICreate(" My GUI input acceptfile", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1, 0x00000018)
   $hX = GUICtrlCreateInput("", 10, 5, 300, 20)
   $hY=GUICtrlCreateInput("", 10, 35, 300, 20)  
   $btn = GUICtrlCreateButton("Set", 40, 75, 60, 20)
   $btn2 = GUICtrlCreateButton("Get", 140, 75, 60, 20)
   
   GUISetState()

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
        $msg = GUIGetMsg()
        Select
            Case $msg = $btn
              Set() 
			Case $msg = $btn2
              Get() 
		EndSelect
    WEnd

   Func Set() 
	  ClipPut ( 111 &'|'& 222 ) 
   EndFunc

   Func Get()
	  $sBuf=ClipGet ( )
	  $aBuf=StringSplit ( $sBuf, "|")

	  $XX=$aBuf[1]
	  $YY=$aBuf[2]
	  GUICtrlSetData ($hX, $XX )
	  GUICtrlSetData ($hY, $YY )
   EndFunc


Добавлено:
Сообщение автоматически объединено:

А вот твой последний пример надо сделать так
Не перечислять все 37 пар инпутов , а использовать ф-ю Eval :
Код:
For $ii=1 To 37
   $hVar1=Eval('vibr'& $ii)
   $hVar2=Eval('vibr'& $ii)
   GUICtrlSetData ( $hVar1, MouseGetPos(0) )
   GUICtrlSetData (	$hVar2, MouseGetPos(1)-$pogr )
Next
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
а как все ваше хозяйство можно встроить в мой код:
Код:
Func GetMouseCoordinates($nEventMsg)
   Switch $nEventMsg
      Case $GUI_EVENT_MOUSEMOVE
         $aRet = DllCall("user32.dll", "int", "WindowFromPoint", "long", MouseGetPos(0), "long", MouseGetPos(1))
         $tPoint = _WinAPI_GetMousePos(True, $aRet[0])
		 $pogr=GUICtrlRead($pogreshnost)
		 GUICtrlSetData  (  $hLabel,'X = ' & $aRet[1] & @LF & 'Y = ' & $aRet[2]-$pogr)
		 ;ClipPut ( $aRet[1] & $aRet[2] ) 
	 Case $GUI_EVENT_PRIMARYDOWN
		; $sBuf=ClipGet ( )
;$aBuf=StringSplit ( $sBuf, '&')
;$XX=$aBuf[1]
;$YY=$aBuf[2]
 $ii+=1
For $ii=1 To 74
   $hp1=Eval('vibr1'& $ii)
   $hp2=Eval('vibr2'& $ii)
    GUICtrlSetData ( $hp1, MouseGetPos(0) )
   GUICtrlSetData ( $hp2, MouseGetPos(1)-$pogr )
Next   
EndSwitch
EndFunc

Я так и не понял как ваш работает
И еще:
Код:
For $ii=1 To 74
   $hp1=Eval('vibr1'& $ii)
   $hp2=Eval('vibr2'& $ii)
    GUICtrlSetData ( $hp1, MouseGetPos(0) )
   GUICtrlSetData ( $hp2, MouseGetPos(1)-$pogr )

выдает одно значение во все текстобксы..
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
warshadow [?]
выдает одно значение во все текстобксы..

Ну правильно .
Так бы ты перечислял все 37 пар а здесь все в цикле.
Это же просто наглядный пример, а не готовый скрипт
Если тебе надо записывать в одну пару сделай этот цикл по $n:

Код:
For $n=1 To 37
   $hVar1=Eval('vibr'& $ii)
   $hVar2=Eval('vibr'& $ii)
   GUICtrlSetData ( $hVar1, MouseGetPos(0) )
   GUICtrlSetData ( $hVar2, MouseGetPos(1)-$pogr )
Next
а $ii - назначай извне - смотря какую пару надо открывать




Добавлено:
Сообщение автоматически объединено:

Код:
;.............
Case $GUI_EVENT_PRIMARYDOWN
        ; $sBuf=ClipGet ( )
;$aBuf=StringSplit ( $sBuf, '&')
;$XX=$aBuf[1]
;$YY=$aBuf[2]
 $ii+=1
For $n=1 To 74
   $hp1=Eval('vibr'& $ii)
   $hp2=Eval('vibr'& $ii)
    GUICtrlSetData ( $hp1, MouseGetPos(0) )
   GUICtrlSetData ( $hp2, MouseGetPos(1)-$pogr )
Next
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Прошу прощение что встреваю gregaz!
Код:
$hp1=Eval('vibr1'& $ii)
и
Код:
$hp1=Eval('vibr'& $ii)
это же разные вещи. В первом случае Eval примет данные от переменных с именем vibr 11~vibr x74 а во втором случае от vibr 1~vibr 74. Или я не прав?
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
так:smile:
Код:
Это уже совсем другой вопрос
Все запоминается и в свернутом и в развернутом :
Вот ваш код, который вы написали, я не смог встроить в мой:
Код:
Func GetMouseCoordinates($nEventMsg)
   Switch $nEventMsg
      Case $GUI_EVENT_MOUSEMOVE
         $aRet = DllCall("user32.dll", "int", "WindowFromPoint", "long", MouseGetPos(0), "long", MouseGetPos(1))
         $tPoint = _WinAPI_GetMousePos(True, $aRet[0])
         $pogr=GUICtrlRead($pogreshnost)
         GUICtrlSetData  (  $hLabel,'X = ' & $aRet[1] & @LF & 'Y = ' & $aRet[2]-$pogr)
          Case $GUI_EVENT_PRIMARYDOWN
 $ii+=1
For $ii=1 To 74
   $hp1=Eval('vibr1'& $ii)
   $hp2=Eval('vibr2'& $ii)
    GUICtrlSetData ( $hp1, MouseGetPos(0) )
   GUICtrlSetData ( $hp2, MouseGetPos(1)-$pogr )
Next  
EndSwitch
EndFunc
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Garrett

Да это я просто скопировал его неправильный пример, который он неправильно сделал из моего.
Конечно же надо так как у меня было :
Код:
$hp1=Eval('vibr'& $ii)
а не 
$hp1=Eval('vibr1'& $ii)




Добавлено:
Сообщение автоматически объединено:

Поясняю что такое ф-ия Eval :
Код:
Eval('vibr'& $ii)           это :    $vibr25 при $ii=25
Eval('vibr'& $ii)           это :    $vibr26 при $ii=26     и т. д.
 
Автор
W

warshadow

Новичок
Сообщения
62
Репутация
0
warshadow сказал(а):
так:smile:
Код:
Это уже совсем другой вопрос
Все запоминается и в свернутом и в развернутом :
Вот ваш код, который вы написали:
Код:
#include <GUIConstants.au3>

   HotKeySet("^s", "Set")
   HotKeySet("^g", "Get")

   GUICreate(" My GUI input acceptfile", 320, 120, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1, 0x00000018)
   $hX = GUICtrlCreateInput("", 10, 5, 300, 20)
   $hY=GUICtrlCreateInput("", 10, 35, 300, 20)  
   $btn = GUICtrlCreateButton("Set", 40, 75, 60, 20)
   $btn2 = GUICtrlCreateButton("Get", 140, 75, 60, 20)
   
   GUISetState()

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
        $msg = GUIGetMsg()
        Select
            Case $msg = $btn
              Set()
            Case $msg = $btn2
              Get()
        EndSelect
    WEnd

   Func Set()
      ClipPut ( 111 &'|'& 222 )
   EndFunc

   Func Get()
      $sBuf=ClipGet ( )
      $aBuf=StringSplit ( $sBuf, "|")

      $XX=$aBuf[1]
      $YY=$aBuf[2]
      GUICtrlSetData ($hX, $XX )
      GUICtrlSetData ($hY, $YY )
   EndFunc

я не смог встроить в мой:
Код:
Func GetMouseCoordinates($nEventMsg)
   Switch $nEventMsg
      Case $GUI_EVENT_MOUSEMOVE
         $aRet = DllCall("user32.dll", "int", "WindowFromPoint", "long", MouseGetPos(0), "long", MouseGetPos(1))
         $tPoint = _WinAPI_GetMousePos(True, $aRet[0])
         $pogr=GUICtrlRead($pogreshnost)
         GUICtrlSetData  (  $hLabel,'X = ' & $aRet[1] & @LF & 'Y = ' & $aRet[2]-$pogr)
          Case $GUI_EVENT_PRIMARYDOWN
 $ii+=1
For $ii=1 To 74
   $hp1=Eval('vibr1'& $ii)
   $hp2=Eval('vibr2'& $ii)
    GUICtrlSetData ( $hp1, MouseGetPos(0) )
   GUICtrlSetData ( $hp2, MouseGetPos(1)-$pogr )
Next  
EndSwitch
EndFunc
Можете помочь как встроить ?
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
warshadow [?]
Можете помочь как встроить ?

Два куска от разных скриптов :???
Ну приблизительно :
Код:
#include <GUIConstants.au3>
#include <WinAPI.au3>
   
   Global $ii=1,$X,$Y
   
   GUICreate(" My GUI input acceptfile", 320, 420, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1, 0x00000018)
   
   $hX1 = GUICtrlCreateInput("", 10, 5, 300, 20)
   $hY1=GUICtrlCreateInput("", 10, 35, 300, 20)  
   $hX2 = GUICtrlCreateInput("", 10, 65, 300, 20)
   $hY2=GUICtrlCreateInput("", 10, 95, 300, 20)  
   $hX3 = GUICtrlCreateInput("", 10, 125, 300, 20)
   $hY3=GUICtrlCreateInput("", 10, 155, 300, 20)  
   
   $btn = GUICtrlCreateButton("Set", 40, 375, 260,40)
 
   GUISetState()

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
		 $msg = GUIGetMsg()
		 GetMouseCoordinates($msg) ; ====>
		Select
			Case $msg = $btn
			   $ii+=1
			   If $ii>3 Then $ii=1
		EndSelect
		Sleep(50)
    WEnd

Func GetMouseCoordinates($nEventMsg)
   Switch $nEventMsg
      Case $GUI_EVENT_MOUSEMOVE
         $aRet = DllCall("user32.dll", "int", "WindowFromPoint", "long", MouseGetPos(0), "long", MouseGetPos(1))
         $tPoint = _WinAPI_GetMousePos(True, $aRet[0])
         $X=$aRet[1]
		 $Y=$aRet[2]
	  Case $GUI_EVENT_PRIMARYDOWN
		 For $n=1 To 3
			$hp1=Eval('hX'& $ii)
			$hp2=Eval('hY'& $ii)
			GUICtrlSetData ( $hp1, $X)
			GUICtrlSetData ( $hp2, $Y )
		 Next  
   EndSwitch
EndFunc
 
Верх