Что нового

[Элементы GUI] Обработка событий пользовательских кнопок

DemkaDV

Новичок
Сообщения
16
Репутация
3
Д.Д.
Пишу довольно сложную программу по диагностике растворенных газов в масле, GUI работает в режиме Opt("GUIOnEventMode", 0)

Привожу часть кода
Код:
While 1
$nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE,$Exit
                GUISwitch($hParent)
                WinSetState($hParent, "", @SW_ENABLE)
                GUIDelete($hwnd)
            Case $hXAspectUp ;кнопка поворот фигуры вверх
                    $arrPoz[0]=700
                    $arrPoz[1]=525 - _GUICtrlSlider_GetPos($hSlideInterval)
                    Do
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap,10, 10, $Width*0.7, $Height*0.7)    
$draw_coordinates=Rotating1_($arrPoz,$draw_coordinates,$arrTek)
                    If _IsPressed(02)  Then 
            GUICtrlSetImage($hXAspectUp, @ScriptDir & "\ArrowGreyUp.ico",0,1)
                    ExitLoop
                    EndIf
            GUICtrlSetImage($hXAspectUp, @ScriptDir & "\ArrowBlueUp.ico",0,1)
                    Until $nMsg <> $hXAspectUp
                
            Case $hXAspectDown ;кнопка поворот фигуры вниз
                    $arrPoz[0]=700
                    $arrPoz[1]=525 + _GUICtrlSlider_GetPos($hSlideInterval)
                    Do
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 10, 10, $Width*0.7, $Height*0.7)
$draw_coordinates=Rotating1_($arrPoz,$draw_coordinates,$arrTek)
                            If _IsPressed(02)  Then 
			GUICtrlSetImage($hXAspectDown, @ScriptDir & "\ArrowGreyDown.ico",0,1)
                        ExitLoop
                    EndIf
			GUICtrlSetImage($hXAspectDown, @ScriptDir & "\ArrowBlueDown.ico",0,1)
                    Until $nMsg <> $hXAspectDown
            Case $hXAspectLeft ;кнопка поворот фигуры влево
                    $arrPoz[0]=700 - _GUICtrlSlider_GetPos($hSlideInterval)
                    $arrPoz[1]=525
                    Do
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 10, 10, $Width*0.7, $Height*0.7)
$draw_coordinates=Rotating1_($arrPoz,$draw_coordinates,$arrTek)
                        If _IsPressed(02)  Then 
			GUICtrlSetImage($hXAspectLeft, @ScriptDir & "\ArrowGreyLeft.ico",0,1)
                        ExitLoop
                        EndIf
			GUICtrlSetImage($hXAspectLeft, @ScriptDir & "\ArrowBlueLeft.ico",0,1)
                    Until $nMsg <> $hXAspectLeft                    
            Case $hXAspectRight ;кнопка поворот фигуры вправо
                    $arrPoz[0]=700 + _GUICtrlSlider_GetPos($hSlideInterval)
                    $arrPoz[1]=525
                    Do
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 10, 10, $Width*0.7, $Height*0.7)
$draw_coordinates=Rotating1_($arrPoz,$draw_coordinates,$arrTek)
                    If _IsPressed(02)  Then 
			GUICtrlSetImage($hXAspectRight, @ScriptDir & "\ArrowGreyRight.ico",0,1)
                        ExitLoop
                        EndIf
			GUICtrlSetImage($hXAspectRight, @ScriptDir & "\ArrowBlueRight.ico",0,1) 
                    Until $nMsg <> $hXAspectRight
           
            EndSwitch
                    
            
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 10, 10, $Width*0.7, $Height*0.7)

 WEnd
Вопрос: как можно организовать получения события при нажатии на кнопку?
в скрипте кнопки управления меняют цвет при активации и поворот прекращается
после нажатия правой кнопкой мыши на кнопку управления.
В существующем варианте кнопка получает событие лишь после отпускания.

Задача: организовать работу функции при нажатии на кнопку и её удержании,прекратить сразу после отпускания

Жду Ваших советов...
80c582a083fd.jpg
 

madmasles

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

$i = 0
$fYes = False

$hGui = GUICreate('Test', 450, 200)
$nButton_Primary = GUICtrlCreateButton('Primary mouse', 50, 50, 150, 50)
$nButton_Secondary = GUICtrlCreateButton('Secondary mouse', 250, 50, 150, 50)
$nLabel_Primary = GUICtrlCreateLabel('Primary mouse up', 50, 120, 150, 20)
$nLabel_Secondary = GUICtrlCreateLabel('Secondary mouse up', 250, 120, 150, 20)
GUISetState()

While 1
	$aCursorInfo = GUIGetCursorInfo()
	If Not @error Then
		Switch $aCursorInfo[4]
			Case $nButton_Primary
				Switch $aCursorInfo[2]
					Case 1
						$fYes = True
						$i += 1
						GUICtrlSetData($nLabel_Primary, 'Primary mouse down: ' & $i)
					Case Else
						If $fYes Then
							$fYes = False
							$i = 0
							GUICtrlSetData($nLabel_Primary, 'Primary mouse up')
						EndIf
				EndSwitch
			Case $nButton_Secondary
				Switch $aCursorInfo[3]
					Case 1
						$fYes = True
						$i += 1
						GUICtrlSetData($nLabel_Secondary, 'Secondary mouse down: ' & $i)
					Case Else
						If $fYes Then
							$fYes = False
							$i = 0
							GUICtrlSetData($nLabel_Secondary, 'Secondary mouse up')
						EndIf
				EndSwitch
			Case Else
				If $fYes Then
					$i = 0
					$fYes = False
					GUICtrlSetData($nLabel_Primary, 'Primary mouse up')
					GUICtrlSetData($nLabel_Secondary, 'Secondary mouse up')
				EndIf
		EndSwitch
	EndIf
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 
Автор
D

DemkaDV

Новичок
Сообщения
16
Репутация
3
Спасибо [madmasles] за Оригинальное решение......
респект...закрываю тему...
 
Верх