Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
1

Перемещение объекта правой кнопкой мыши

11.08.2015, 11:30. Показов 1752. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Вопросик есть.
Перемещаю панель по MouseDown
C++
1
2
3
4
5
if(Button == mbLeft)
{
ReleaseCapture();
Map->Perform(WM_SYSCOMMAND, 0xF012, 0);
}
но если вместо if(Button == mbLeft) написать
if(Button == mbRight) //- правая кнопка мыши
или
if(Button == mbMiddle) //-средняя кнопка мыши,
то не работает. В чем может быть причина?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.08.2015, 11:30
Ответы с готовыми решениями:

Блокировка копирования и вставки правой кнопкой мыши
нужна функция не позволяющая вставлять (к примеру в Edit) правой кнопкой мыши. чтобы понятнее было...

Запрет клика правой кнопкой мыши в программе
Подскажите, пожалуйста, код.

DbGridEh (или dbgrid) выделение правой кнопкой мыши
Добрый день. Подскажите пожалуйста как выйти из подобной ситуации. Есть DBGridEh, в нем включен...

ListView. Выбор элемента при клике правой кнопкой мыши
Нужно, чтобы при клике правой кнопки мыши по элементу выбирался этот самый элемент TreeView. Как...

5
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
11.08.2015, 13:10 2
Попробуйте вот так:
C++
1
if( Shift.Contains( ssMiddle ) ) //ssRight
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32855 / 21189 / 8151
Регистрация: 22.10.2011
Сообщений: 36,441
Записей в блоге: 8
11.08.2015, 13:39 3
Цитата Сообщение от Sergey_03 Посмотреть сообщение
В чем может быть причина?
Этот метод не предназначен для работы с кнопкой мыши, отличной от левой.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
11.08.2015, 14:22  [ТС] 4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Попробуйте вот так:
не хочет..
Цитата Сообщение от volvo Посмотреть сообщение
Этот метод не предназначен для работы с кнопкой мыши, отличной от левой.
если использовать метод с fMove, то работает, но не работает наша оконная функция.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32855 / 21189 / 8151
Регистрация: 22.10.2011
Сообщений: 36,441
Записей в блоге: 8
11.08.2015, 14:35 5
Метод с fMove - это другое. Я про метод с sc_dragmove. Ни он ни перехват сообщения WM_NCHITTEST и возврат в ответ на него HTCAPTION не будут работать с правой кнопкой мыши.

А в чем проблема заставить метод с fMove работать вместе с оконной функцией? Можно показать окончательный вариант этой самой оконной функции? Я попробую запустить вместе с обработкой перемещения.
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
11.08.2015, 14:50  [ТС] 6
Цитата Сообщение от volvo Посмотреть сообщение
окончательный вариант этой самой оконной функции?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void __fastcall TForm1::NewMapWndProc(Messages::TMessage &Message)
{
    switch (Message.Msg)
    {
    case WM_MOVING:
        {
            // тут у нас хранится указатель на структуру RECT с размерами окна
            LPRECT pRect = (LPRECT)(Message.LParam);
            // запоминаем ширину/высоту перетягиваемой панельки
            int width = pRect->right - pRect->left;
            int height = pRect->bottom - pRect->top;
            // получаем _экранные_ координаты точки, за которую заходить нельзя
            TPoint p2 (Panel1->Width ,Panel1->Height);
            TPoint p1 (0,0);
            if (pRect->left > p1.x)
            {
                pRect->right = (pRect->left = p1.x) + width;
            }
            if (pRect->top > p1.y)
            {
                pRect->bottom = (pRect->top = p1.y) + height;
            }
            if (pRect->right < p2.x)
            {
                pRect->left = (pRect->right = p2.x) - width;
            }
            if (pRect->bottom < p2.y)
            {
                pRect->top = (pRect->bottom = p2.y) - height;
            }
            Message.Result = 1;
            break;
        }
    }
    OldMapWndProc(Message); // Вызываем стандартную оконную функцию
}
0
11.08.2015, 14:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2015, 14:50
Помогаю со студенческими работами здесь

Нажатие на пункт PopupMenu MenuItem по событию MenuItemClick правой или левой кнопкой мыши
Собственно никак не получается. Надо, чтобы по левой работал код пункта, а по правой только чекинг...

Как отследить перемещение мыши с удерживаемой нажатой кнопкой?
В событии void __fastcall TForm1::Panel1MouseMove(TObject *Sender, TShiftState Shift, int...

Компонент MaskEdit должен стать доступным, если нажать на нем правой кнопкой мыши с зажатой клавишей Ctrl
На форме разместить компонент MaskEdit, в котором нельзя изменять текст. Если нажать на компоненте...

TPopupMenu не появляется при нажатии правой кнопкой по StringGrid-у
Здравствуйте. Помогите разобраться с работой компонента TPopupMenu. Разместил на форме стаблицей, в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru