Войти

Показать полную графическую версию : Autoit слайдер/slider (gui) нужна помощь в решении задачи


aktivizion
25-02-2010, 23:03
#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
aktivizion,
Здесь есть пример: Обновление элемента Slider в реальном времени (http://autoit-script.ru/index.php?topic=404.0)

Yashied
26-02-2010, 10:30
#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
Ну как бы обьяснить...

Вот есть число 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
0,501393020153046 ~~51%
0,498607009649277 ~~49% »
я бы сказал наоборот
0,501393020153046 ~~50%
0,498607009649277 ~~50%
это я так, к слову (элементарные правила округления). чтобы коварная ошибка не прокралась в код.

aktivizion
26-02-2010, 16:37
GUICtrlSetLimit(-1, 10, 0) »

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

aktivizion
26-02-2010, 18:59
элементарные правила округления »
Я про это знал, просто надо было как-то выделить %-ое соотношение

aktivizion
01-03-2010, 15:14
ладно) закрывайте тему)

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

kaster
01-03-2010, 18:05
aktivizion, просто отмечай тему решенной, если получил ответ на свой вопрос ;) закрывать ни к чему




© OSzone.net 2001-2012