Показать полную графическую версию : [решено] Управление слайдером
Как правильно организовать управление слайдером ?
Почему при клике в теле слайдера движок не устанавливается точно в кликнутую позицию ,а проскакивает ее ?
Необходимо установить движок слайдера в кликнутую позицию и получить ее координаты.
#include <GUIConstants.au3>
$hGUI = GuiCreate('Test',660, 200)
Opt("GUIOnEventMode", 1)
GUISetOnEvent($GUI_EVENT_CLOSE, "quit")
$slider = GUICtrlCreateSlider(10, 130, 630, 25 )
GUICtrlSetOnEvent( -1, "Sl")
GUISetState(@SW_SHOW)
While 1
Sleep(100)
WEnd
Func quit()
Exit
EndFunc
Func Sl()
$read=GUICtrlRead($slider,1)
ConsoleWrite( $read & @crlf)
EndFunc
Вопрос простой
Похоже решение тоже простое , но я не нашел .
morgan1991
17-06-2009, 14:57
gregaz, можно отловить нажатие левой кнопки мыши (это было на форуме, поиск), затем считать координаты мыши относительно окна и исходя из них передвинуть слайдер, затем считать его расположение.
morgan1991, Спасибо
Извиняюсь ,что не сразу воспользовался поиском.
Правда не совсем понятно как считать точную позицию движка
Кликну на 25 - он все равно даст 20 (частота дискретицации?)
Повторный клик на 25 дает 40 и т.д. 20,40,20,40 ? (в примере от Yashied : Yashied (http://forum.oszone.net/showthread.php?t=139855&highlight=%F1%EB%E0%E9%E4%E5%F0) )
Там была проблема предачи в скрипт позиции движка.
А здесь-получение этой позиции при клике ?
morgan1991
17-06-2009, 21:32
gregaz, а зачем для считывания позиции использовать расширенный режим?
$read=GUICtrlRead($slider,1)
Может сделать так:
$read=GUICtrlRead($slider)
Проблема в этом?
gregaz, а зачем для считывания позиции использовать расширенный режим? »
Да разницы то ведь нет .
Даже используя _GUICtrlSlider_GetPos($Slider) все равно не получить точную координату скажем 23 (будет 20, следующий клик там же - 40 и т.д. 20-40-20-40...)
Вопрос : как установить движок точно в кликнутое место ?
Можно как-то уменьшить частоту дискретизации (здесь 20) ?
morgan1991
18-06-2009, 10:41
gregaz,
А так не пробовали?
#include <GUIConstants.au3>
$gui = GUICreate("slider",220,100, 100,200)
GUISetBkColor (0x00E0FFFF) ; will change background color
$slider1 = GUICtrlCreateSlider (0,10,220,20)
GUICtrlSetLimit(-1,200, 0) ; change min/max value
$button = GUICtrlCreateButton ("Value?",75,70,70,20)
GUISetState()
GUICtrlSetData($slider1,45) ; set cursor
$start=TimerInit()
Do
$n = GUIGetMsg ()
If $n = $button Then
MsgBox(0,"slider1",GUICtrlRead($slider1),2)
$start=TimerInit()
EndIf
If $n = $slider1 Then
$pos = GUIGetCursorInfo($gui)
GUICtrlSetData($slider1, $pos[0]-10)
EndIf
Until $n = $GUI_EVENT_CLOSE
Только ещё бы отключить стандартный сдвиг ползунка....
morgan1991 , Спасибо
Вообще то это мне и требовалось.
Решение действительно простое
Только ещё бы отключить стандартный сдвиг ползунка.... »
От этого трудно избавиться , да и вряд ли это принципиально важно.
От этого трудно избавиться , да и вряд ли это принципиально важно. »
Попробуй так.
#Include <GUISlider.au3>
Global $Form, $Slider, $Data, $Release = False
$Form = GUICreate('Test', 220, 100)
$Slider = GUICtrlCreateSlider(0, 10, 220, 20)
GUICtrlSetLimit(-1, 200, 0)
_GUICtrlSlider_SetPageSize($Slider, 0)
GUISetState()
Do
$Data = GUIGetCursorInfo()
Switch $Data[4]
Case $Slider
If $Data[2] Then
If $Release Then
GUICtrlSetData($Slider, $Data[0] - 10)
$Release = False
EndIf
Else
$Release = True
EndIf
EndSwitch
Until GUIGetMsg() = -3
Yashied, спасибо .
Очень интересное решение .
Надо попробовать использовать .
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.