Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
102 / 39 / 0
Регистрация: 16.09.2014
Сообщений: 429

Циклическая смена чисел на Caption

04.12.2024, 07:25. Показов 1904. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Button от The Trick-а. Поддерживается MouseWheel. При MouseWheel-е на Caption отображается число от 0 до 100 с шагом 1, в зависимости от направления вращения ролика мыши (dir = +-120) увеличивается или уменьшается в интервале 0-100:
Visual Basic
1
2
3
4
5
6
7
Private Sub cmdEvenlyCountV_MouseWheel(dir As Long, button As Integer, shift As Integer, x As Single, y As Single)
    intTMP = Val(cmdEvenlyCountV.Caption)
    intTMP = intTMP + (dir / Abs(dir)) прибавляем или отнимаем 1 в зависимости от направления вращения ролика
    If intTMP > 100 Then intTMP = 0 ’ зацикливаем
    If intTMP < 0 Then intTMP = 100 ’ зацикливаем
    cmdEvenlyCountV.Caption = intTMP
End Sub
С этим проблем нет, но вот дальше:
при каждом MouseDown-е число увеличивается/уменьшается на 20 в интервале 0-100:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub cmdEvenlyCountV_MouseDown(button As Integer, shift As Integer, x As Single, y As Single)
    '
    intTMP = Val(cmdEvenlyCountV.Caption)
    '
    Select Case button
        Case 1
            intTMP = intTMP + 20
 
        Case 2
            intTMP = intTMP - 20
 
    End Select
    '
    If intTMP > 100 Then intTMP = 0 ' зацикливаем
    If intTMP < 0 Then intTMP = 100 ' зацикливаем
 
    cmdEvenlyCountV.Caption = intTMP
    '
End Sub
Теперь, собственно, в чём мой затык:
Сейчас, какое бы число не было на Caption, при MouseDown-е к нему прибавляется/отнимается 20, например было 53, кликнули левой клавишей - стало 73, правой – стало 33, а мне надо чтобы значение приводилось к ближайшему реперному значению – 0, 20, 40, 60, 80, 100, при клике левой к ближайшему большему значению, при клике правой – к меньшему, то есть при 53 должно становиться или 60 или 40. И вот потратил весь вчерашний день, но так и не хватило мозгов придумать как реализовать такую в общем-то несложную логику.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.12.2024, 07:25
Ответы с готовыми решениями:

Циклическая смена даты
Помогите пожалуйста с написанием цикла в котором меняется дата на день вперед, а по достижению конца месяца, меняет месяц и идет новый счет...

Циклическая смена картинок
Друзья, помогите реализовать JavaScript циклической смены картинок, кучу способов перепробовал, не получается. Задача такая, чтобы...

Циклическая смена картинок
Друзья, помогите реализовать JavaScript циклической смены картинок, кучу способов перепробовал, не получается. Задача такая, чтобы...

26
Вернулся
 Аватар для HackerVlad
1777 / 672 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
09.12.2024, 13:28
Студворк — интернет-сервис помощи студентам
105 как-то некрасиво, проще мне кажется LowerLimit = 0, UpperLimit = 100
0
102 / 39 / 0
Регистрация: 16.09.2014
Сообщений: 429
09.12.2024, 13:56  [ТС]
Mikle Quits БОЛЬШОЕ спасибо !!! ЛЕПОТА!!! Ща попробую.
===
HackerVlad это все зависист от ситуации - вот, например, в данном случае LowerLimit = 0, UpperLimit = 100 будут определять на сколько равных частей по X и по Y будет разделена большая картинка в режиме AutoCut, то есть пользователь задаёт число -прога делит картинку, а поскольку есть и режим UserCut (собственно, основной) то, в режиме AutoCut, задавать числа меньшие ну, скажем, 5-ти, как бы бессмысленно - такое деление лучше делать в "ручном" режиме.
Аналогично, в режиме деления по размеру, а не по количеству - эти параметры будут определять в пикселях ширину и высоту "кусков" на которые разделяется картинка, прямоугольники размером меньше 10 пикселей тоже (по-моему) бессмысленны
1
102 / 39 / 0
Регистрация: 16.09.2014
Сообщений: 429
09.12.2024, 20:02  [ТС]
Mikle Quits всё-таки это не совсем то, что я хотел бы, понимаете, вот пользователь задаёт этими параметрами или количество "кусков" на которое разделится картинка, или размер (ширину или высоту) "кусков", скажем ширина ограничена 999 пикс, количество - 100. Основное управление вводом числа делается MouseWheel-ом с шагом в 1, а этот код чисто для удобства пользователя, для "скачков" по диапазону, скажем нужна пользователю ширина в 800 пикселей - неудобно же столько крутить ролик мышки, поэтому я хочу ввести в управление эти скачки, при простом MouseDown-е скачки скажем на 20, а если одновременно с нажатой клавишей CTRL, то ваще скачки на 50 или даже 100. Заболтался... Одним словом 5-105 как бы не соответствует задумке моей. Поэтому я и просил (если возможно) создать код с вариабельным LowerLimit, UpperLimit и UpDwnStep-ом
0
 Аватар для Mikle Quits
1023 / 312 / 18
Регистрация: 21.01.2023
Сообщений: 549
09.12.2024, 20:49
Цитата Сообщение от giaber Посмотреть сообщение
Поэтому я и просил (если возможно) создать код с вариабельным LowerLimit, UpperLimit и UpDwnStep-ом
Создать можно, но в первом сообщении написано:
Цитата Сообщение от giaber Посмотреть сообщение
надо чтобы значение приводилось к ближайшему реперному значению
То есть не просто скачки на UpDwnStep вперёд-назад, а по реперным точкам. Но, если задать диапазон, где UpperLimit - LowerLimit не делится на UpDwnStep, получим один кусок меньшего размера. Это устраивает?
1
102 / 39 / 0
Регистрация: 16.09.2014
Сообщений: 429
09.12.2024, 21:05  [ТС]
Конечно устраивает!
0
 Аватар для Mikle Quits
1023 / 312 / 18
Регистрация: 21.01.2023
Сообщений: 549
10.12.2024, 10:21
Лучший ответ Сообщение было отмечено HackerVlad как решение

Решение

Если писать универсальную функцию, то там уже не должно быть Button = 1, туда нужно передавать направление вперёд или назад по сетке.
На счёт куска меньшего размера, я подумал, что правильнее, чтобы и первый, и последний куски могли быть такими, зато сетка привязана к значениям, кратным шагу.
Универсальная функция должна корректно обрабатывать входящие значения вне диапазона.
Такую функцию тоже можно написать в одну строку, но это уже излишества, получится запутанно и непонятно, вот примерно то, что я считаю оптимальным:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Function FixToGrid(ByVal V As Long, ByVal Min As Long, ByVal Max As Long, ByVal Stp As Long, ByVal Up As Boolean) As Long
  If V < Min + 1 + (Up) Or V > Max + Up Then
    If Up Then FixToGrid = Min Else FixToGrid = Max
  Else
    V = ((V - 1) \ Stp) * Stp * -(Not Up) + ((V + Stp) \ Stp) * Stp * -Up
    If V < Min Then
      V = Min
    ElseIf V > Max Then
      V = Max
    End If
    FixToGrid = V
  End If
End Function
И проверочный код. Мышью выбираем начальное значение, сразу видим значения функции вперёд и назад по сетке, с помощью ЛКМ и ПКМ выставляем границы диапазона.
Вложения
Тип файла: zip FixToGrid.zip (1.8 Кб, 2 просмотров)
2
102 / 39 / 0
Регистрация: 16.09.2014
Сообщений: 429
10.12.2024, 18:34  [ТС]
Mikle Quits ! Я уж и не знаю какие слова подобрать для благодарности! Дай Бог вам здоровья и успехов во всём за вашу отзывчивость к чужим проблемам!
Разжевали, положили в рот, погладили по головке и колыбельную спели! Примерно такая аналогия от двух страниц этой темы!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2024, 18:34

Смена Caption при нажатие Button?
Здравствуйте ! Имеется - Panel1 и Button1 Нужно чтобы при нажатие Button1(скрыть) - Panel1 скрылась , Button1 поменяло имя (показать)...

Циклическая смена атрибутов символов
Доброго времени суток! Ниже привел код программы в котором надо добавить функцию циклической смены атрибутов символов строки. Подтолкните...

Циклическая смена атрибутов символов
Доброго времени суток! Необходимо создать две программы на tasm. К сожалению сам я в низкоуровневых языках вообще никак плюс время...

Циклическая смена изображений по клику
Подскажите, пожалуйста, как сделать, чтобы моя картинка менялась по щелчку на одну из кнопок. Допустим, у меня 5 картинок имеется. Нажимаю...

[SFML] Циклическая смена цвета
Добрый вечер, есть такое задание, построить шестиугольник, цвета секторов которого будут менять циклически. Циклов три, т е сначала все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru