Что нового

Мышь, клавиатура перемещение элементов

Alex58reg

Новичок
Сообщения
41
Репутация
0
прошу помощи есть скрип нарисованная точка мне нужно чтобы эту точку можно было перемещать по экрану с помощью клавиш в верх влево в право в низ по одному пикселю примерно по 100 пикселей по всем сторонам
заранее благодарен
вот точка

Код:
#include <GuiConstants.au3>
#include <WinAPI.au3>
$GUI = GUICreate("", 30, 30, 929, 551, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT, $WS_EX_LAYERED))
GUISetBkColor(0xFF1000)
_WinAPI_SetLayeredWindowAttributes($GUI, 0xFF1000, 0, $LWA_COLORKEY)
GUICtrlCreateLabel("•", 0, 0, 3, 3, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetFont(-1, 48)
GUISetState()
Do
Until GUIGetMsg() = -3
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Код:
Do
  ; вверх
  If _IsPressed("26") Then
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0], $aPos[1] - 1)
    Sleep(55)
  EndIf
  ; вниз, влево, вправо - по аналогии
Until GUIGetMsg() = -3

Знаки препинания ещё не проходили?
 
Автор
A

Alex58reg

Новичок
Сообщения
41
Репутация
0
Код:
Do
  ; вверх
  If _IsPressed("26") Then
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0], $aPos[1] - 1)
    Sleep(55)
  EndIf
  ; вниз, влево, вправо - по аналогии
Until GUIGetMsg() = -3

Знаки препинания ещё не проходили?
влево и в право не работает
может поменять что то нужно
 
Автор
A

Alex58reg

Новичок
Сообщения
41
Репутация
0
Разберитесь, что делает данный фрагмент кода, и поймёте, что нужно поменять. Если сложно, опишите, что конкретно не понятно. Желательно код приложить.
Код:
If _IsPressed("26") Then
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0], $aPos[1] - 1)
    Sleep(55)
 EndIf

 If _IsPressed("28") Then
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0], $aPos[1] + 1)
    Sleep(55)
 EndIf

  If _IsPressed("25") Then
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0], $aPos[1] - 1)
    Sleep(55)
 EndIf

 If _IsPressed("27") Then
    $aPos = WinGetPos($GUI)
   WinMove($GUI, "", $aPos[0], $aPos[1] + 1)
    Sleep(55)
  EndIf

моя часть кода и все они только вверх и вниз работают а влево и право нет я просто еще только неделю связан с автоитом много не понимаю
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
$aPos[0] содержит X-координату окна, $aPos[1] соответственно Y-координату.
Следовательно, для смещения влево-вправо нужно изменять $aPos[0], а вы изменяете $aPos[1].
 

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
Вот по наглядней и по проще вариант:
Код:
#include <GuiConstants.au3>

HotKeySet('{UP}', '_UP') ; Стрелка вверх
HotKeySet('{DOWN}', '_DOWN') ; Стрелка вниз
HotKeySet('{LEFT}', '_LEFT') ; Стрелка влево
HotKeySet('{RIGHT}', '_RIGHT') ; Стрелка вправо
HotKeySet('{ESCAPE}', '_Exit') ; Выход

Global $iOffset = 4 ; Величина смещения
Global $GUI = GUICreate("", 10, 10, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
GUISetBkColor(0xFF1000)
GUISetState()
Do
Until GUIGetMsg() = -3

; === USER FUNCTIONS: =====================================
Func _UP()
    _GuiMove(0, ($iOffset * -1))
EndFunc   ;==>_UP

Func _DOWN()
    _GuiMove(0, $iOffset)
EndFunc   ;==>_DOWN

Func _LEFT()
    _GuiMove(($iOffset * -1), 0)
EndFunc   ;==>_LEFT

Func _RIGHT()
    _GuiMove($iOffset, 0)
EndFunc   ;==>_RIGHT

Func _GuiMove($nX, $nY)
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0] + $nX, $aPos[1] + $nY)
EndFunc   ;==>_GuiMove

Func _Exit()
    Exit
EndFunc   ;==>_Exit

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

... неделю связан с автоитом много не понимаю.
Совет: тогда не лезьте пока в дебри _UDF-функций, изучайте штатные.
 
Последнее редактирование:
Автор
A

Alex58reg

Новичок
Сообщения
41
Репутация
0
$aPos[0] содержит X-координату окна, $aPos[1] соответственно Y-координату.
Следовательно, для смещения влево-вправо нужно изменять $aPos[0], а вы изменяете $aPos[1].
меняю по всякому она прыгает через пикселей 300 а потом идет по диагонали
Сообщение автоматически объединено:

Вот по наглядней и по проще вариант:
Код:
#include <GuiConstants.au3>

HotKeySet('{UP}', '_UP') ; Стрелка вверх
HotKeySet('{DOWN}', '_DOWN') ; Стрелка вниз
HotKeySet('{LEFT}', '_LEFT') ; Стрелка влево
HotKeySet('{RIGHT}', '_RIGHT') ; Стрелка вправо
HotKeySet('{ESCAPE}', '_Exit') ; Выход

Global $iOffset = 4 ; Величина смещения
Global $GUI = GUICreate("", 10, 10, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
GUISetBkColor(0xFF1000)
GUISetState()
Do
Until GUIGetMsg() = -3

; === USER FUNCTIONS: =====================================
Func _UP()
    _GuiMove(0, ($iOffset * -1))
EndFunc   ;==>_UP

Func _DOWN()
    _GuiMove(0, $iOffset)
EndFunc   ;==>_DOWN

Func _LEFT()
    _GuiMove(($iOffset * -1), 0)
EndFunc   ;==>_LEFT

Func _RIGHT()
    _GuiMove($iOffset, 0)
EndFunc   ;==>_RIGHT

Func _GuiMove($nX, $nY)
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0] + $nX, $aPos[1] + $nY)
EndFunc   ;==>_GuiMove

Func _Exit()
    Exit
EndFunc   ;==>_Exit

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

Совет: тогда не лезьте пока в дебри _UDF-функций, изучайте штатные.
к сожалению ваш вариант мне не подходит
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
меняю по всякому
Код:
#include <GuiConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>

$GUI = GUICreate("", 30, 30, 929, 551, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW, $WS_EX_TRANSPARENT, $WS_EX_LAYERED))
GUISetBkColor(0xFF1000)
_WinAPI_SetLayeredWindowAttributes($GUI, 0xFF1000, 0, $LWA_COLORKEY)
GUICtrlCreateLabel("•", 0, 0, 3, 3, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetFont(-1, 48)
GUISetState()

Do
  Sleep(55) ; скорость
  If _IsPressed("26") Then ; вверх
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0], $aPos[1] - 1)
  EndIf
  If _IsPressed("28") Then ; вниз
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0], $aPos[1] + 1)
  EndIf
  If _IsPressed("25") Then ; влево
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0] - 1, $aPos[1])
  EndIf
  If _IsPressed("27") Then ; вправо
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0] + 1, $aPos[1])
  EndIf
Until GUIGetMsg() = -3

по проще вариант
Фигасе "попроще". Вызов функций из функций да ещё с инверсией аргумента. Самое то для недели знакомства с AutoIt :yes:
 
Автор
A

Alex58reg

Новичок
Сообщения
41
Репутация
0
Код:
If _IsPressed("26") Then
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0], $aPos[1] - 1)
    Sleep(55)
 EndIf

  If _IsPressed("28") Then
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0], $aPos[1] + 1)
    Sleep(55)
 EndIf

 If _IsPressed("25") Then
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0] - 1 , $aPos[1])
    Sleep(55)
 EndIf

  If _IsPressed("27") Then
    $aPos = WinGetPos($GUI)
    WinMove($GUI, "", $aPos[0] + 1 , $aPos[1])
    Sleep(55)
  EndIf

РАЗОБРАЛСЯ С ВАШЕЙ ПОМОЩЬЮ СПАСИБО
 
Верх