Что нового

Считывание координаты мыши происходит в несколько InputBox

Erection

Новичок
Сообщения
16
Репутация
0
Задача: считать последовательно 2 нажатия на ЛКМ и получить координаты соответственно с 1 и 2 нажатия в разные инпутбоксы.
Создаю кнопку, создаю 4 инпутбокса, обрабатываю нажатие, в результате получаю с первого же нажатия координаты мыши во все инпутбоксы.

Код:
Обработка нажатия мыши
Код:
Func DetectMousePosition2($X1,$Y1,$X2,$Y2)
   HotKeySet("{ESC}","stop")
   $a=0
   While $a<2
	  If _IsPressed("01", $dll) Then 
		 $aCoord=MouseGetPos()
		 If $a=0 Then
			GUICtrlSetData($X1,$aCoord[0])
			GUICtrlSetData($Y1,$aCoord[1])			
		 EndIf
		 If $a=1 Then
			GUICtrlSetData($X2,$aCoord[0])
			GUICtrlSetData($Y2,$aCoord[1])			
		 EndIf
		 $a=$a+1
	  EndIf
   WEnd
EndFunc


Создание кнопки и инпутбоксов
Код:
$ButtonTest = GUICtrlCreateButton("Тест", 250, 380, 90)
$TestX1 = GUICtrlCreateInput(0, 10, 320, 40, 20)
$TestY1 = GUICtrlCreateInput(0, 60, 320, 40, 20)
$Test123132X2 = GUICtrlCreateInput(0, 10, 345, 40, 20)
$Test123132Y2 = GUICtrlCreateInput(0, 60, 345, 40, 20)


Считываем по $msg
Код:
While $msg <> $GUI_EVENT_CLOSE
$msg = GUIGetMsg()
Select
Case $msg = $ButtonTest
DetectMousePosition2($TestX1,$TestY1,$Test123132X2,$Test123132Y2)


Завершающие операторы опустил тут.

В чем мой косяк?
 
Автор
E

Erection

Новичок
Сообщения
16
Репутация
0
Можно меня просто ткнуть мордой? После 4 часов сна невооруженный взгляд по-прежнему не работает.

Переменные передаваемые в порядке, цикл висит который читает нажатия. Счетчик который контролирует выход из цикла и то, куда попадают данные с нажатия первого и второго... не понимаю все равно.
 

Whited

Знающий
Сообщения
79
Репутация
10
Erection [?]
Можно меня просто ткнуть мордой? После 4 часов сна невооруженный взгляд по-прежнему не работает.Переменные передаваемые в порядке, цикл висит который читает нажатия. Счетчик который контролирует выход из цикла и то, куда попадают данные с нажатия первого и второго... не понимаю все равно.

"считать последовательно 2 нажатия на ЛКМ и получить координаты соответственно с 1 и 2 нажатия в разные инпутбоксы."

Передавай в функцию 2 параметра вместо 4-х ну и вызывай её 2 раза соответственно.
 
Автор
E

Erection

Новичок
Сообщения
16
Репутация
0
Код:
DetectMousePosition($TestX1,$TestY1)
	  DetectMousePosition($Test123132X2,$Test123132Y2)


Код:
Func DetectMousePosition($X,$Y)
   HotKeySet("{ESC}","stop")
   While $FlagMouseClick=False
	  If _IsPressed("01", $dll) Then 
		 $aCoord=MouseGetPos()
		 GUICtrlSetData($X,$aCoord[0])
		 GUICtrlSetData($Y,$aCoord[1])			
		 $FlagMouseClick=True
	  EndIf
   WEnd
   $FlagMouseClick=False
EndFunc


ты имел ввиду так?
 

Whited

Знающий
Сообщения
79
Репутация
10
Erection [?]
ты имел ввиду так?

Да, у а там откуда координаты взять и по нажатию кнопки или еще чего, это тебе решать, я показал тебе почему у тебя при нажатии на 1 кнопку сразу 4 заполняются.
 
Автор
E

Erection

Новичок
Сообщения
16
Репутация
0
Нет, не показал. Я ведь не просто так написал функцию последовательного считывания двух нажатий - такой вариант с двумя функциями и приводит к вводу в оба поля.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Erection,
Для 10 кликов.
Код:
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <Misc.au3>
#include <WindowsConstants.au3>

Global $aInput[11][3] = [[10, 1],['X', 'Y', 'Color'],['Copy', 'Clear']], $aBtn[2], $sTmp, $aTmp

$hGui = GUICreate('Test', 65 * 4, ($aInput[0][0] + 1) * 25 + 40, 0, 0, -1, $WS_EX_TOPMOST)
For $i = 0 To 2
	GUICtrlCreateLabel($aInput[1][$i], 45 + $i * 65, 4, 60, 16, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
Next
For $i = 0 To 1
	$aBtn[$i] = GUICtrlCreateButton($aInput[2][$i], 20 + $i * 120, $aInput[0][0] * 25 + 30, 100, 30)
	GUICtrlSetState(-1, $GUI_DISABLE)
Next
For $i = 1 To $aInput[0][0]
	GUICtrlCreateLabel($i & ':', 20, 22 + ($i - 1) * 25, 20, 16, BitOR($GUI_SS_DEFAULT_LABEL, $SS_CENTER, $SS_CENTERIMAGE))
	For $j = 0 To 2
		$aInput[$i][$j] = GUICtrlCreateInput('', 45 + $j * 65, 20 + ($i - 1) * 25, 60, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER, $ES_READONLY))
		GUICtrlSetBkColor(-1, 0xFFFFFF)
	Next
Next

GUISetState()

While 1
	Switch $aInput[0][1]
		Case $aInput[0][0] + 1
			;nothing
		Case Else
			Switch _IsPressed('01')
				Case 1
					If $aInput[0][1] = $aInput[0][0] Then
						For $i = 0 To 1
							GUICtrlSetState($aBtn[$i], $GUI_ENABLE)
						Next
					EndIf
					$aTmp = MouseGetPos()
					For $i = 0 To 1
						GUICtrlSetData($aInput[$aInput[0][1]][$i], $aTmp[$i])
					Next
					GUICtrlSetData($aInput[$aInput[0][1]][2], '0x' & Hex(PixelGetColor($aTmp[0], $aTmp[1]), 6))
					While _IsPressed('01')
						Sleep(5)
					WEnd
					$aInput[0][1] += 1
					$aTmp = 0
			EndSwitch
	EndSwitch
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $aBtn[0]
			For $i = 1 To $aInput[0][0]
				For $j = 0 To 2
					$sTmp &= GUICtrlRead($aInput[$i][$j]) & @TAB
				Next
				$sTmp = StringTrimRight($sTmp, 1) & @CRLF
			Next
			ClipPut($sTmp)
			$sTmp = ''
		Case $aBtn[1]
			For $i = 1 To $aInput[0][0]
				For $j = 0 To 2
					GUICtrlSetData($aInput[$i][$j], '')
				Next
			Next
			For $i = 0 To 1
				GUICtrlSetState($aBtn[$i], $GUI_DISABLE)
			Next
			$aInput[0][1] = 1
	EndSwitch
WEnd
 

Whited

Знающий
Сообщения
79
Репутация
10
Erection [?]
Нет, не показал. Я ведь не просто так написал функцию последовательного считывания двух нажатий - такой вариант с двумя функциями и приводит к вводу в оба поля.

Извини невнимательно прочитал твою функцию,(сам спал пару часов), скорее всего у тебя нету задержки при нажатии и поэтому у тебя быстро заполняются твои инпуты. После заполнения первых 2-х инпутов попробуй поставить задержку
 
Автор
E

Erection

Новичок
Сообщения
16
Репутация
0
К сожалению дело не в задержке... поставил задержку, реакция та же - до выбора по второму условию вообще не доходит.


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

Все, задержка втащила. Всем спасибо
 
Верх