[решено] Управление слайдером

Ответить
Аватара пользователя
gregaz

[решено] Управление слайдером

Сообщение gregaz »

Как правильно организовать управление слайдером ?



Почему при клике в теле слайдера движок не устанавливается точно в кликнутую позицию ,а проскакивает ее ?



Необходимо установить движок слайдера в кликнутую позицию и получить ее координаты.



Код:

Код: Выделить всё

#include   
$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

Re: [решено] Управление слайдером

Сообщение morgan1991 »

gregaz, можно отловить нажатие левой кнопки мыши (это было на форуме, поиск), затем считать координаты мыши относительно окна и исходя из них передвинуть слайдер, затем считать его расположение.
Аватара пользователя
gregaz

Re: [решено] Управление слайдером

Сообщение gregaz »

morgan1991, Спасибо

Извиняюсь ,что не сразу воспользовался поиском.

Правда не совсем понятно как считать точную позицию движка

Кликну на 25 - он все равно даст 20 (частота дискретицации?)

Повторный клик на 25 дает 40 и т.д. 20,40,20,40 ? (в примере от Yashied :
Yashied
)



Там была проблема предачи в скрипт позиции движка.

А здесь-получение этой позиции при клике ?
Аватара пользователя
morgan1991

Re: [решено] Управление слайдером

Сообщение morgan1991 »

gregaz, а зачем для считывания позиции использовать расширенный режим?





Код:

Код: Выделить всё

$read=GUICtrlRead($slider,1)

Может сделать так:





Код:

Код: Выделить всё

$read=GUICtrlRead($slider)

Проблема в этом?
Аватара пользователя
gregaz

Re: [решено] Управление слайдером

Сообщение gregaz »

Цитата morgan1991:



gregaz, а зачем для считывания позиции использовать расширенный режим?
[решено] Управление слайдером




Да разницы то ведь нет .

Даже используя _GUICtrlSlider_GetPos($Slider) все равно не получить точную координату скажем 23 (будет 20, следующий клик там же - 40 и т.д. 20-40-20-40...)

Вопрос : как установить движок точно в кликнутое место ?

Можно как-то уменьшить частоту дискретизации (здесь 20) ?
Аватара пользователя
morgan1991

Re: [решено] Управление слайдером

Сообщение morgan1991 »

gregaz,

А так не пробовали?



Код:

Код: Выделить всё

#include 
$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

Только ещё бы отключить стандартный сдвиг ползунка....
Аватара пользователя
gregaz

Re: [решено] Управление слайдером

Сообщение gregaz »

morgan1991 , Спасибо

Вообще то это мне и требовалось.

Решение действительно простое


Цитата morgan1991:



Только ещё бы отключить стандартный сдвиг ползунка....
[решено] Управление слайдером




От этого трудно избавиться , да и вряд ли это принципиально важно.
Аватара пользователя
Yashied

Re: [решено] Управление слайдером

Сообщение Yashied »

Цитата gregaz:



От этого трудно избавиться , да и вряд ли это принципиально важно.
[решено] Управление слайдером




Попробуй так.





Код:

Код: Выделить всё

#Include 
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
Аватара пользователя
gregaz

Re: [решено] Управление слайдером

Сообщение gregaz »

Yashied, спасибо .

Очень интересное решение .

Надо попробовать использовать .
Ответить

Вернуться в «AutoIt»