С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 72

Событие MouseMove при нажатой кнопке мыши

23.11.2022, 10:57. Показов 474. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую, коллеги.

Уткнулся в казалось бы простую задачку, не знаю как решить.
Например:
На форме есть ряд контролов (например - лабелы).
Если над ними водить мышью, они не реагируют.
Но если над формой мы зажимаем левую кнопку мыши и ведём указатель над контролами - они скрываются.

Надеялся, оно сработает простым путём:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim a As Boolean
 
Private Sub form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
a = False
End Sub
 
Private Sub form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
a = True
End Sub
 
Private Sub image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If a = True Then
    Image1.Visible = False
End If
End Sub
...но в VB6 как всегда всё оказалось через ж..
Если активно событие с другого контрола (или в данном случае MouseDown формы), то следующее событие MouseMove не наступает.

Чую я, что попроще без API никак не получится решить?
Меня скатерти чужого кода с api, в котором я практически ничего не понимаю, вгоняют в депрессию...

Добавлено через 10 минут
хотел исправить ошибочку в коде, не успел. Сам объявил что используем лабелы, а в коде image.
Но это сути не меняет. Это я экспериментировал с разными контролами...
И ещё момент:
Если отключить MouseUp оно конечно сработает, но это событие тоже должно отрабатывать - по типу "выделения" контролов - отпустили кнопку мыши - контролы больше не исчезают.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.11.2022, 10:57
Ответы с готовыми решениями:

Событие MouseMove при нажатой кнопке
Здравствуйте уважаемые программисты. Вот есть такой код: procedure TForm1.Panel1MouseLeave(Sender: TObject); begin ...

Cобытие MouseMove при нажатой левой кнопке мыши
Сделал у PictureBox событие MouseMove. Если просто провести мышкой над PictureBox все срабатывает, но если нажать левой(собственно правой...

MouseMove при нажатой правой кнопке мыши и рамки в PictureBox
Как избежать изменения действия события pictureBox1_MouseMove при смене рамки изображения внутри процедуры pictureBox1_MouseDown или в...

2
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
23.11.2022, 11:26
Лучший ответ Сообщение было отмечено MrRoxMJ как решение

Решение

Цитата Сообщение от MrRoxMJ Посмотреть сообщение
...но в VB6 как всегда всё оказалось через ж..
Это вообще-то стандартное поведение окон в Windows. Когда ты зажимаешь кнопку мыши, окно захватывает ее и все события мыши передаются только ему. Сделано это для операций перетаскивания и VB6 тут не при чем. Решить можно просто:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Declare Function ReleaseCapture Lib "user32" () As Long
 
Dim b As Boolean
 
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    b = True
    ReleaseCapture
End Sub
 
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    b = False
End Sub
 
Private Sub Label1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    If b Then
        Label1(Index).Visible = False
    End If
End Sub
Но теперь если ты отпустишь мышь за пределами формы то ей не придет уведомление MouseUp, т.к. мышь не захвачена. Нужно просто смотреть в какую область попадает мышь, минимальный вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Option Explicit
 
Dim b As Boolean
 
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    b = True
End Sub
 
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim c As Object
    If b Then
        For Each c In Me.Controls
            If X >= c.Left And X < c.Left + c.Width And _
                Y >= c.Top And Y < c.Top + c.Height Then
                c.Visible = False
            End If
        Next
    End If
End Sub
 
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    b = False
End Sub
2
3 / 3 / 0
Регистрация: 15.05.2015
Сообщений: 72
23.11.2022, 12:10  [ТС]
Спасибо))
Адаптировал второй вариант применительно к лабелам, чтобы только эта группа скрывалась. Переменная b не понадобилась.
Весь код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim ctl As Control
 
'If Button = 2 Then       это условие нужно чтобы выбирать правую[1] или левую[2] кнопку мыши, иначе работает на любую
 
For Each ctl In Me.Controls
 If TypeOf ctl Is Label Then
    If X >= ctl.Left And X < ctl.Left + ctl.Width And _
    Y >= ctl.Top And Y < ctl.Top + ctl.Height Then
    ctl.Visible = False
    End If
 End If
Next ctl
 
'End If
 
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.11.2022, 12:10
Помогаю со студенческими работами здесь

Событие мыши Mouse Down и получение координат при нажатой кнопке
день добрый, подскажите пожалуйста, как сделать так, что бы при нажатой кнопке мыши в области окна я мог отслеживать координаты....

При нажатой кнопке мыши обработать событие "вход курсора" на другой обьект
Задажа в том что нужно сделать такой принцип: опускаем клавишу миши и тягаем её по екрану (за ней следом склонированный обект на котором...

Событие мыши: перемещение мыши при нажатой левой клавиши
Подскажите, пожалуйста как реализовать следующее: При перемещении мыши при нажатой левой клавише (выделение текста) выводится сообщение...

Рисование при нажатой кнопке мыши
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Canvas.MoveTo(X,Y);...

Прокрутка страницы при нажатой левой кнопке мыши
Есть такой код document.onmousedown = function(e) { e = e || window.event; down = 1; x = e.clientX; // начальное положение...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru