- Сообщения
- 8,673
- Репутация
- 2,484
Этот простой пример показывает как можно задать перемещение (перетаскивание) указанного элемента GUI при помощи указателя мышки.
Код:
#include <GUIConstantsEx.au3>
$hGUI = GUICreate("Move Label")
$Label = GUICtrlCreateLabel("My Label, Move me ;)", 20, 20, -1, 16)
GUICtrlSetCursor(-1, 0)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_PRIMARYDOWN
Ctrl_Drag_And_Move($hGUI, $Label)
EndSwitch
WEnd
Func Ctrl_Drag_And_Move($hGUI, $nCtrlID)
Local $iOld_Opt_MCM = Opt("MouseCoordMode", 2)
Local $aCurInfo = GUIGetCursorInfo($hGUI)
Local $aCtrl_Pos, $aMouse_Pos, $iNewLeft_Pos, $iNewTop_Pos
If IsArray($aCurInfo) And $aCurInfo[2] = 1 And $aCurInfo[4] = $nCtrlID Then
While IsArray($aCurInfo) And $aCurInfo[2] = 1
$aCurInfo = GUIGetCursorInfo($hGUI)
$aCtrl_Pos = ControlGetPos($hGUI, "", $nCtrlID)
$aMouse_Pos = MouseGetPos()
$iNewLeft_Pos = $aMouse_Pos[0] - ($aCtrl_Pos[2] / 2)
$iNewTop_Pos = $aMouse_Pos[1] - ($aCtrl_Pos[3] / 2)
If $aCtrl_Pos[0] <> $iNewLeft_Pos Or $aCtrl_Pos[1] <> $iNewTop_Pos Then
GUICtrlSetPos($nCtrlID, $iNewLeft_Pos, $iNewTop_Pos)
Else
Sleep(5)
EndIf
WEnd
EndIf
Opt("MouseCoordMode", $iOld_Opt_MCM)
EndFunc