Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Autoit слайдер/slider (gui) нужна помощь в решении задачи (http://forum.oszone.net/showthread.php?t=168550)

aktivizion 25-02-2010 23:03 1356041

Autoit слайдер/slider (gui) нужна помощь в решении задачи
 
#include <GuiConstantsEx.au3>
#include <GuiSlider.au3>

GUICreate("Slider Set Pos", 600, 296)
$hSlider = GUICtrlCreateSlider(2, 40, 400, 20, BitOR($TBS_TOOLTIPS, $TBS_AUTOTICKS, $TBS_ENABLESELRANGE))
GUISetState()
GuiCtrlCreateInput("0,0148149998858571", 2, 10, 130, 20)
GuiCtrlCreateInput("0.14%", 140, 10, 130, 20)
$hSlider = GUICtrlCreateSlider(2, 100, 400, 20, BitOR($TBS_TOOLTIPS, $TBS_AUTOTICKS, $TBS_ENABLESELRANGE))
GUISetState()
GuiCtrlCreateInput("0,0198147568858794", 2, 70, 130, 20)
GuiCtrlCreateInput("0.15%", 140, 70, 130, 20)


; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE


начальный, даже не начальный, а просто шаблон скрипта.
Мне нужно чтобы
при движении слайдера, число над ним, именно в том формате как оно есть изменялась,
тоесть создать маленький миханизм.
На примере показано только два значения, их нужно мне примерно 10
и чтобы все они были взаимосвязаны друг с другом, тоесть чтобы вся их сумма была равна 1
например:
0,501393020153046
и
0,498607009649277
в сумме дают 1.00000022 небольшая погрешность есть
помогите, натолкните на мысль к решению проблемы

madmasles 26-02-2010 02:12 1356188

aktivizion,
Здесь есть пример: Обновление элемента Slider в реальном времени

Yashied 26-02-2010 10:30 1356330

Код:

#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUISlider.au3>
#include <GUIToolTip.au3>
#include <SliderConstants.au3>
#include <WindowsConstants.au3>

GUICreate('MyGUI', 300, 100)
$Input = GUICtrlCreateInput('0.50%', 20, 60, 40, 19, BitOR($ES_CENTER, $ES_READONLY))
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Slider = GUICtrlCreateSlider(20, 16, 260, 28, BitOR($TBS_AUTOTICKS, $TBS_TOOLTIPS, $WS_TABSTOP))
GUICtrlSetLimit(-1, 10, 0)
GUICtrlSetData(-1, 5)
$hSlider = GUICtrlGetHandle(-1)
$Dummy = GUICtrlCreateDummy()
$hWnd = _GUICtrlSlider_GetToolTips($hSlider)
_GUIToolTip_SetTitle($hWnd, '0.50%')
_GUIToolTip_SetMargin($hWnd, -8, -8, -8, -24)

GUIRegisterMsg($WM_HSCROLL, 'WM_HVSCROLL')

GUISetState()

While 1
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $Dummy
            $Val = StringFormat('%.2f%', GUICtrlRead($Dummy) / 10)
            GUICtrlSetData($Input, $Val)
            _GUIToolTip_SetTitle($hWnd, $Val)
            _GUIToolTip_Update($hWnd)
    EndSwitch
WEnd

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

Что именно должно отображаться, я так и не понял.

aktivizion 26-02-2010 16:34 1356600

Ну как бы обьяснить...

Вот есть число 1
его надо разбить на %-ы
и с помощью самого слайдера редактирую именно тот % составляющий число 1, но
он должен имень очень огромный формат, для этого я и хотел бы вместе с вами написать
подобия калькулятора.

0,501393020153046 ~~51%
0,498607009649277 ~~49%

или же

0,333332985639572 ~~34%
0,218854993581772 ~~22%
0,185185000300407 ~~18%
0,042087998241186 ~~4%

и чтобы сумма этих чисел равнялось 1

Двигая слайдер изменяем % строки, вместе с этим изменяеться число

Думаю вы считаете это какой-то странной затеей, но это мне действительно нужно
если что, я буду пробовать сделать это самостоятельно

kaster 26-02-2010 16:37 1356605

Цитата:

Цитата aktivizion
0,501393020153046 ~~51%
0,498607009649277 ~~49% »

я бы сказал наоборот
0,501393020153046 ~~50%
0,498607009649277 ~~50%

это я так, к слову (элементарные правила округления). чтобы коварная ошибка не прокралась в код.

aktivizion 26-02-2010 16:37 1356606

Цитата:

Цитата Yashied
GUICtrlSetLimit(-1, 10, 0) »

вот эту строчку немного подправил
GUICtrlSetLimit(-1, 1000, 0)
для более утонченного выбора %

aktivizion 26-02-2010 18:59 1356694

Цитата:

Цитата kaster
элементарные правила округления »

Я про это знал, просто надо было как-то выделить %-ое соотношение

aktivizion 01-03-2010 15:14 1358846

ладно) закрывайте тему)

зато вспомнили как работает слайдер

kaster 01-03-2010 18:05 1358955

aktivizion, просто отмечай тему решенной, если получил ответ на свой вопрос ;) закрывать ни к чему


Время: 15:20.

Время: 15:20.
© OSzone.net 2001-