Как элемент slider (UIcontrol) заставить перемещаться дискретными целыми шагами

Больше
07 апр 2024 07:03 #158 от roman
Необходимо создать объект slider (UIcontrol) таким образом, чтобы ползунок перемещался только целочисленными значениями в диапазоне от 1 до 16. Как заставить, чтобы ползунок перемещался только по целочисленным значениям?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
07 апр 2024 07:10 #159 от roman
Создать объект slider (UIcontrol), который перемещается только к целочисленным значениям можно двумя способами.
Вариант 1 - задать параметр SliderStep в настройках slider определенным образом, тогда для выбранного конкретного диапазона ползунок слайдера будет изменяться целочислено.
Вариант 2 - задать функции обратного вызова, которое будет округлять положение ползунка до целого значения. Данный метод гарантирует целое значение для любых исходных данных.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
07 апр 2024 07:12 - 07 апр 2024 07:14 #160 от roman
Вариант 1.
В настройках slider есть параметр SliderStep.
Чтобы гарантировать, что нажатие клавиш со стрелками перемещает ползунок на одну единицу, мы можем установить минимальный размер шага ползунка равным 1/(MaxSliderValue-MinSliderValue). В этом конкретном примере вы должны установить его как 1/15 единицы. Это можно установить с помощью свойства SliderStep объекта ползунка.
В примере кода мы установили для SliderStep значение [1/15 1]. Это означает, что нажатие на стрелку влево или вправо переместит ползунок на 1/15 нормализованной единицы (или на 1 целое значение), а нажатие на пространство между ползунком и стрелками переместит его полностью в одну сторону (это задается вторым элементом «SliderStep», который в этом примере равен 1).

Code:
function myslider figure; sld = uicontrol('Style', 'slider',... 'Min',1,'Max',16,'Value',8,... 'Units', 'Normalized',... 'Position', [0.3 0.48 0.4 0.04],... 'SliderStep', [1/15 1]); end
 
Т.е. основная строчка, которая задает целочисленные значения для диапазона от 1 до 16 это
Code:
'SliderStep', [1/15 1])
Последнее редактирование: 07 апр 2024 07:14 пользователем roman.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
07 апр 2024 07:17 - 07 апр 2024 08:00 #161 от roman
Вариант 2.
Чтобы гарантировать, что перетаскивание ползунка переместит его в целочисленное положение, мы можем округлить значение, указанное ползунком в функции обратного вызова, а также установить положение ползунка на это округленное значение.
Code:
function myslider figure; sld = uicontrol('Style', 'slider',... 'Min',1,'Max',16,'Value',8,... 'Units', 'Normalized',... 'Position', [0.3 0.48 0.4 0.04],... 'Callback', @print_val,... 'SliderStep', [0.9 0.9]); end function print_val(hObject,callbackdata) newval = hObject.Value; %get value from the slider newval = round(newval); %round off this value set(hObject, 'Value', newval); %set slider position to rounded off value disp(['Slider moved to ' num2str(newval)]); %display the value pointed by slider end

В данном случае независимо от выставленного шага ползунка 'SliderStep' значение ползунка будет округляться до целого значениям.
Округление значения будет выполняться в функции обратного вызова print_val
Функция round() отвечает за округление значения ползунка до целого значения.
А далее положение ползунка выставляется в рассчитанное целочисленное значение:
Code:
set(hObject, 'Value', newval);
и отображается на экране matlab
Code:
disp(['Slider moved to ' num2str(newval)]);



 
Последнее редактирование: 07 апр 2024 08:00 пользователем roman.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Работает на Kunena форум
Пользовательское соглашение.

По всем возникшим вопросам Вы можете обратиться к администрации сайта по электронной почте (administrator@simenergy.ru) или с помощью формы обратной связи.

Статистика сайта:
Яндекс.Метрика