Что нового

[Элементы GUI] Вертикальный slider - максимальное значение сверху

Krokodile

Новичок
Сообщения
43
Репутация
1
Требуется поставить максимальное(100) значение слайдера сверху, а минимальное(0) соответсвенно снизу :smile:
Вот наброски. Единственный способ/зацепка - $TBS_REVERSED(с англ не оч, но кажется это то самое), но он не работает ни с одним из слайдеров(или я не правильно понял его значение). Кстати что за фрукт _GUICtrlSlider_Create, чем он отличается от обычного и почему его справка на англ?
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <SliderConstants.au3>
#Include <GuiSlider.au3>

Dim $slider[11]

$Gui=GUICreate("",150,120)
GUISetState()
Opt("GUIOnEventMode",1)
GUISetOnEvent($GUI_EVENT_CLOSE,"CLOSEClicked")

$slider=GUICtrlCreateSlider(10,10,20,100,BitOR($TBS_VERT,$TBS_NOTICKS,$TBS_TOOLTIPS,$TBS_REVERSED))
GUICtrlSetLimit(-1,100,0)
GUICtrlSetData(-1,50)
$hSlider=_GUICtrlSlider_Create($GUI,40,10,20,100,BitOR($TBS_VERT,$TBS_NOTICKS,$TBS_TOOLTIPS,$TBS_REVERSED))
GUICtrlSetLimit(-1,100,0)
GUICtrlSetData(-1,50)

While 1
   
WEnd

Func CLOSEClicked()
   Exit
EndFunc
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
TBS_REVERSED судя по всему не работает.
Если нужна наглядность в виде подсказок, то придется делать SetLimit(-1, 0, -100), но у подсказок появится знак минус. А пересчет значений вести с корректировкой знака.

И второй вариант: считывать значения во время перемещений - как в примере или по какому-либо событию, а подсказки не выводить ;)
Код:
#include <WindowsConstants.au3>
#include <GuiSlider.au3>
#include <GuiConstants.au3>

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

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

$Vertical_Label = GUICtrlCreateLabel("Vertical Slider Read: 0", 20, 20, 200)
$Vertical_Slider = GUICtrlCreateSlider(20, 50, 30, 120,BitOr($TBS_VERT,$TBS_NOTICKS))
GUICtrlSetData($Vertical_Slider,100)

GUISetState()

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case -3
            Exit
    EndSwitch
WEnd

Func WM_HVSCROLL($hWndGUI, $MsgID, $WParam, $LParam)
    Switch $LParam
        Case GUICtrlGetHandle($Vertical_Slider)
            $Vertical_val=100-GUICtrlRead($Vertical_Slider)
            ConsoleWrite($Vertical_val&@LF)
            GUICtrlSetData($Vertical_Label, "Vertical Slider Read: " & $Vertical_val)
    EndSwitch
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
#Include <GUIConstantsEx.au3>
#Include <GUISlider.au3>
#Include <GUIToolTip.au3>
#Include <SliderConstants.au3>
#Include <WindowsConstants.au3>

$hForm = GUICreate('MyGUI', 80, 300)
$Slider = GUICtrlCreateSlider(19, 20, 42, 260, BitOR($TBS_AUTOTICKS, $TBS_BOTH, $TBS_TOOLTIPS, $TBS_VERT, $WS_TABSTOP))
$hToolTip = _GUICtrlSlider_GetToolTips(-1)
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
GUISetState()

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
		Case Else
    EndSwitch
WEnd

Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)

	Local $tNMTDI = DllStructCreate($tagNMTTDISPINFO, $lParam)
	Local $hTarget = DllStructGetData($tNMTDI, 'hWndFrom')
	Local $ID = DllStructGetData($tNMTDI, 'Code')

	Switch $hWnd
		Case $hForm
			Switch $hTarget
				Case $hToolTip
					Switch $ID
						Case $TTN_GETDISPINFOW
							DllStructSetData($tNMTDI, 'aText', 100 - GUICtrlRead($Slider))
					EndSwitch
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
 
Автор
K

Krokodile

Новичок
Сообщения
43
Репутация
1
еще бы разобраться, как работает этот GUIRegisterMsg...
Поискал на форуме - никто видимо не поднимал тему TBS_REVERSED или не сталкивался. Однако гугл выдает много ссылок на форумы, где рассматривают эту проблему(в разных языках программирования). И везде ссылаются на обновление библиотек(например тут)... Это какие такие библиотеки надо обновить, чтобы в autoit заработал этот стиль?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Для общего развития.

Любой control (Button, Slider и т.д.) - это "зашитый" в систему элемент с предопределенными свойствами и возможностями. В AutoIt, как и в любом другом ЯП, реализованы далеко не все эти свойства и возможности. Когда с элементом что-то происходит, например ты передвинул бегунок на Slider'е, то он (элемент) информирует об этом программу, посылая ей специальное сообщение - WM_NOTIFY. А с помощью GUIRegisterMsg() мы как раз и отлавливаем это сообщение и предпринимает соответствующие действия. В данном случае изменяем текст в ToolTip'е перед выводом.
 
Верх