Что нового

Обновление элемента Slider в реальном времени

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
Наиболее "правильный" на мой взгляд сопособ организации "живого" slider'а. Не нагружает основной цикл.


Код:
#Include <EditConstants.au3>
#Include <GUIConstantsEx.au3>
#Include <SliderConstants.au3>
#Include <WindowsConstants.au3>

GUICreate('MyGUI', 120, 200)
$Input = GUICtrlCreateInput('50', 70, 10, 27, 19, BitOR($ES_CENTER, $ES_READONLY))
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Slider = GUICtrlCreateSlider(24, 10, 26, 180, BitOR($TBS_AUTOTICKS, $TBS_VERT, $WS_TABSTOP))
GUICtrlSetLimit(-1, 100, 0)
GUICtrlSetData(-1, 50)
$hSlider = GUICtrlGetHandle(-1)
$Dummy = GUICtrlCreateDummy()

;GUIRegisterMsg($WM_HSCROLL, 'WM_HVSCROLL')
GUIRegisterMsg($WM_VSCROLL, 'WM_HVSCROLL')

GUISetState()

While 1
	$Msg = GUIGetMsg()
	Switch $Msg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $Dummy
			GUICtrlSetData($Input, 100 - GUICtrlRead($Dummy))
	EndSwitch
WEnd

Func WM_HVSCROLL($hWnd, $iMsg, $wParam, $lParam)
    Switch $iMsg
		Case $WM_HSCROLL
			
        Case $WM_VSCROLL
            Switch $lParam
				Case $hSlider
                    GUICtrlSendToDummy($Dummy, GUICtrlRead($Slider))
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_HVSCROLL
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
Re: "Живой" Slider

Кстати, Dummy не обязателен... и вот пример со слайдерами в обе стороны (по вертикали и горизонтали):

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SliderConstants.au3>
;

$Gui = GUICreate("Slider Update Demo", 250, 200)

GUIRegisterMsg($WM_HSCROLL, "WM_HVSCROLL")
GUIRegisterMsg($WM_VSCROLL, "WM_HVSCROLL")

$Vertical_Label = GUICtrlCreateLabel("Vertical Slider Read: 100", 20, 20, 200)
$Horizontal_Label = GUICtrlCreateLabel("Horizontal Slider Read: 0", 80, 120, 200)

$Vertical_Slider = GUICtrlCreateSlider(20, 50, 30, 120, BitOR($GUI_SS_DEFAULT_SLIDER, $TBS_VERT))
$Horizontal_Slider = GUICtrlCreateSlider(60, 150, 160, 30)

GUISetState()

While 1
	$nMsg = GUIGetMsg()
	
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func WM_HVSCROLL($hWndGUI, $MsgID, $WParam, $LParam)
	Switch $LParam
		Case GUICtrlGetHandle($Vertical_Slider)
			GUICtrlSetData($Vertical_Label, "Vertical Slider Read: " & 100-GUICtrlRead($Vertical_Slider))
		Case GUICtrlGetHandle($Horizontal_Slider)
			GUICtrlSetData($Horizontal_Label, "Horizontal Slider Read: " & GUICtrlRead($Horizontal_Slider))
	EndSwitch
EndFunc


P.S
И пожалуйста, пиши более подробные заголовки, название «"Живой" Slider» мало о чём говорит, тут бы подошло больше такое название: «Обновление элемента Slider в реальном времени».
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
[?]
undefined сказал(а):
Кстати, Dummy не обязателен...
Да, действительно! Но я точно помню, что раньше это не работало! Вот только когда это было...

:laugh:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 165
Репутация
2 329
[?]
Yashied сказал(а):
Вот только когда это было
Видимо очень давно, т.к пример выше взят из моего скриптового архива, примерно 2-ух летней давности (не включая мелкие поправки в инклюдах) :smile:
 
Верх