Redline
AutoIT Гуру
- Сообщения
- 506
- Репутация
- 375
Дизайнер из меня никакой :whistle:, да и Gimp-ом очень редко пользуюсь.
Вот для 8 позиций - сделал по примеру пульта для телевизора :D перерисуй под себя
Вот для 8 позиций - сделал по примеру пульта для телевизора :D перерисуй под себя
Код:
#Include <GDIPlus.au3>
#Include <Misc.au3>
#Include <WinAPIEx.au3>
#Include <WindowsConstants.au3>
$hCursor = _WinAPI_CopyCursor(_WinAPI_LoadCursor(0, 32512))
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Sectorz.png')
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Sectorz1.png')
$hBitmap1 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Sectorz2.png')
$hBitmap2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Sectorz3.png')
$hBitmap3 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Sectorz4.png')
$hBitmap4 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Sectorz5.png')
$hBitmap5 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Sectorz6.png')
$hBitmap6 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Sectorz7.png')
$hBitmap7 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & '\Sectorz8.png')
$hBitmap8 = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
$hForm = GUICreate('', 300, 300, -1, -1, $WS_POPUPWINDOW, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST), GUICreate('', -1, -1, -1, -1, -1, $WS_EX_TOOLWINDOW))
$Index = 1
While 1
Sleep(100)
If _IsPressed('04') Then
$XY = MouseGetPos()
WinMove($hForm, '', $XY[0] - 40, $XY[1] - 40)
GUISetState(@SW_SHOW, $hForm)
For $i = 5 To 125 Step 5
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap, $i)
$Timer = TimerInit()
While Not Floor(TimerDiff($Timer))
; Задержка 1 мс
WEnd
Next
_WinAPI_SetSystemCursor(_WinAPI_LoadCursor(0, 32649), 32512, 1)
While _IsPressed('04')
$Pos = MouseGetPos()
$Ang = _Angle($Pos[0], $Pos[1], $XY[0], $XY[1]) ; Угол относительно 11:15 (часов:минут) по часовой стрелке (в градусах)
$R = Sqrt(($XY[0] - $Pos[0]) ^ 2 + ($XY[1] - $Pos[1]) ^ 2) ; Удаление (радиус) от центра
If $R > 40 Then ; Если курсор выходит за пределы окружности, радиус = 40
MouseMove($XY[0] + 40 * Sin($Ang * ATan(1) / 45), $XY[1] - 40 * Cos($Ang * ATan(1) / 45), 0)
EndIf
If $R > 20 Then
Select
Case ($Ang >= 22.5 ) And ($Ang < 67.5 )
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap2, 255)
ToolTip('Функция 2')
$Index = 2
Case ($Ang >= 67.5 ) And ($Ang < 112.5)
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap3, 255)
ToolTip('Функция 3')
$Index = 3
Case ($Ang >= 112.5) And ($Ang < 157.5)
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap4, 255)
ToolTip('Функция 4')
$Index = 4
Case ($Ang >= 157.5 ) And ($Ang < 202.5 )
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap5, 255)
ToolTip('Функция 5')
$Index = 2
Case ($Ang >= 202.5 ) And ($Ang < 247.5)
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap6, 255)
ToolTip('Функция 6')
$Index = 3
Case ($Ang >= 247.5) And ($Ang < 292.5)
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap7, 255)
ToolTip('Функция 7')
$Index = 4
Case ($Ang >= 292.5) And ($Ang < 337.5)
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap8, 255)
ToolTip('Функция 8')
$Index = 4
Case Else
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap1, 255)
ToolTip('Функция 1')
$Index = 1
EndSelect
Else
$Index = 0
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap, 125)
ToolTip('')
EndIf
Sleep(1)
WEnd
_WinAPI_SetSystemCursor($hCursor, 32512, 1)
ToolTip('')
For $i = 125 To 0 Step -5
_WinAPI_UpdateLayeredWindowEx($hForm, $hBitmap, $i)
$Timer = TimerInit()
While Not Floor(TimerDiff($Timer))
; Задержка 1 мс
WEnd
Next
GUISetState(@SW_HIDE, $hForm)
ConsoleWrite('Функция ' & $Index & '...' & @CR)
EndIf
WEnd
Func _Angle($X, $Y, $XC, $YC)
If ($X = $XC) And ($Y = $YC) Then
Return 0
Else
Return Mod(360 + ($Y > $YC) * 180 - ATan(($XC - $X) / ($YC - $Y)) * 45 / ATan(1), 360)
EndIf
EndFunc ;==>_Angle