21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663

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

16.01.2017, 21:02. Показов 2864. Ответов 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
33149 / 21441 / 8223
Регистрация: 22.10.2011
Сообщений: 36,773
Записей в блоге: 9
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru