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

Нажатие на пункт PopupMenu MenuItem по событию MenuItemClick правой или левой кнопкой мыши

16.01.2017, 21:02. Показов 3003. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно никак не получается.
Надо, чтобы по левой работал код пункта, а по правой только чекинг ставился...
по GetKeyState(VK_RBUTTON) то работает то нет. без закономерностей.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2017, 21:02
Ответы с готовыми решениями:

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

Обработка клика левой или правой кнопкой мыши по ячейке DataGridView
Здравствуйте, помогите пожалуйста, в dataGridView1 я вывожу массив клеток с цифрами, я сделал чтобы по нажатию как какую нибудь из этих...

Работа с PopupMenu левой и правой кнопками мыши
В моем проекте требуется задать возможность менять пользователем названия осей координат (показаны зеленым цветом) с помощью всплывающего...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33395 / 21505 / 8236
Регистрация: 22.10.2011
Сообщений: 36,902
Записей в блоге: 12
17.01.2017, 02:22
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Цитата Сообщение от Sergey_03 Посмотреть сообщение
Надо, чтобы по левой работал код пункта, а по правой только чекинг ставился...
Ну, раз надо... Где-то видел решение на Дельфи, воспроизвел сейчас для Билдера. Разумеется, через класс-перехватчик:

header-файл формы:
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// ---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
// ---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
#include <Vcl.Buttons.hpp>
#include <Vcl.Imaging.pngimage.hpp>
#include <Vcl.Graphics.hpp>
#include <Vcl.Menus.hpp>
 
namespace RClick_PopupMenus
{
    class TMyPopupList : public TPopupList
    {
    protected:
        virtual void __fastcall WndProc(Winapi::Messages::TMessage &message);
    };
 
    TMyPopupList *RCPopupList;
 
    class TPopupMenu : public Vcl::Menus::TPopupMenu
    {
    public:
        bool DispatchRC(HMENU AHandle, int APosition)
        {
            if (Handle == AHandle)
            {
                RClick(Items->Items[APosition]);
                return true;
            }
            return false;
        }
 
    protected:
        void RClick(TMenuItem *AItem)
        {
            AItem->Checked = !AItem->Checked;
        }
 
    public:
 
        __fastcall virtual TPopupMenu(System::Classes::TComponent* AOwner)
            : Vcl::Menus::TPopupMenu(AOwner)
        {
            PopupList->Remove(this);
 
            if (!RCPopupList)
                RCPopupList = new TMyPopupList;
            RCPopupList->Add(this);
        }
 
        __fastcall virtual ~TPopupMenu(void)
        {
            RCPopupList->Remove(this);
            PopupList->Add(this);
        }
 
        virtual void __fastcall Popup(int X, int Y)
        {
            unsigned Flags[2][3] =
            { {TPM_LEFTALIGN, TPM_RIGHTALIGN, TPM_CENTERALIGN},
                {TPM_RIGHTALIGN, TPM_LEFTALIGN, TPM_CENTERALIGN}};
            unsigned Buttons[2] =
            {TPM_RIGHTBUTTON, TPM_LEFTBUTTON};
 
            DoPopup(this);
            int AFlags = Flags[UseRightToLeftAlignment()][Alignment];
 
            TrackPopupMenuEx(Items->Handle, AFlags, X, Y,
                RCPopupList->Window, 0);
 
        }
    };
 
}
#define TPopupMenu RClick_PopupMenus::TPopupMenu
 
class TForm1 : public TForm
{
__published: // IDE-managed Components
    TPopupMenu *PopupMenu1;
    TMenuItem *one1;
    TMenuItem *two1;
 
private: // User declarations
        public : // User declarations
 
    __fastcall TForm1(TComponent* Owner);
    __fastcall virtual ~TForm1();
};
 
// ---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
// ---------------------------------------------------------------------------
#endif
cpp-файл:
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
37
38
39
40
// ---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
 
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
void __fastcall RClick_PopupMenus::TMyPopupList::WndProc(Winapi::Messages::TMessage &message)
{
    switch (message.Msg)
    {
    case WM_MENURBUTTONUP:
        for (int i = 0; i < Count; i++)
        {
            TPopupMenu *pm = reinterpret_cast<TPopupMenu*>(Items[i]);
            if (pm->InheritsFrom(__classid(TPopupMenu)))
            {
                if (dynamic_cast<TPopupMenu*>(pm)->DispatchRC((HMENU)(message.LParam), message.WParam))
                {
                    return;
                }
            }
        }
    }
    Vcl::Menus::TPopupList::WndProc(message);
}
 
// ---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
 
__fastcall TForm1::~TForm1()
{
    delete RClick_PopupMenus::RCPopupList;
}
(форма пустая, только один TPopupMenu и лежит на ней, для теста. Если нужен проект на XE4 - скажи, прикреплю)

Ведет себя, как и ожидалось: при клике правой кнопкой элемент отмечается галкой, при клике левой срабатывает как обычно...
2
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
17.01.2017, 07:09  [ТС]
Спасибо огроменное! как раз у меня там там куча итемов на девайсы динамически создаются через один Popup. А чекинги - девайсы по умолчанию(горячие) в массив пишутся для текущего сеанса. Все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2017, 07:09
Помогаю со студенческими работами здесь

Тренажёр мыши, нажатие левой и правой кнопки поочерёдно
Вообщем проблема такая, мне нужно сделать тренажёр мыши. Я всё сделал вроде, но есть одна проблемка. Изначально на форме видно Image1 и...

Как нарисовать прямоугольник и изменять его цвет кликом левой и правой кнопкой мыши?
Здравствуйте. Мне нужно нарисовать прямоугольник и изменять его цвет кликом левой и правой кнопкой мыши. И пожалуйста, не могли бы вы...

Еще 1 вопрос по TreeView - нажатие левой кнопкой мыши
Мне надо чтобы если по нажатию левой кнопкой по TreeView если я кликнул по элементу высветилось одно окно, если по пустому месту другое. Я...

Как сделать запрет копирования информации (нажатие правой кнопкой мыши) на сайте?
Как сделать запрет копирования информации (нажатие правой кнопкой мыши) на сайте? Это какая то блокировка на javascript...?

Ограничить передвижение курсора мыши левой нижней четвертью экрана.При нажатие левой клавиши мыши выключить индикатор NumLock(+Звук),при нажатие право
Не могу решить подскожите кто знает.(Ограничить передвижение курсора мыши левой нижней четвертью экрана.При нажатие левой клавиши мыши...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru