Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Обитатель форума
201 / 184 / 54
Регистрация: 28.10.2012
Сообщений: 543

Узнать, для какого компонента был активирован пункт меню PopupMenu

04.03.2016, 11:38. Показов 3634. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Есть несколько Edit'ов: 5 шт.
Есть одно PopupMenu, которое привязано к каждому из пяти Edit'ов
В нем два действия ActionList'a: Копировать, Вставить

Есть ли возможность определить из какого Edit'a был вызван метод EditPasteExecute или EditCopyExecute?
Можно запоминать Edit через его событие EditMouseDown, но интересует, можно ли через привязку.

Или идти по-колхозному, создавая 5 PopupMenu и 10 action'ов (5 копировать, 5 вставить)
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2016, 11:38
Ответы с готовыми решениями:

Как узнать имя компонента в котором было вызвано PopupMenu?
Подскажите как узнать имя компонента в котором было вызвано PopupMenu Добавлено через 9 минут PopupComponent спс всем

PopupMenu для компонента FileListBox1
У меня есть компонент FileListBox1 в нем куча строчок (файлов) как при нажатии на тот или иной файл правой клавишей мышки вылазило...

Как в обработчик выбора одного из элементов PopupMenu передать имя компонента по клику на котором он был вызван?
На форме есть много разных шейпов, к ним ко всем привязан один и тот же PopupMenu. как в обработчике нажатия на один из пунктов PopupMenu...

5
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
04.03.2016, 12:11
Цитата Сообщение от Afflicted Посмотреть сообщение
Есть ли возможность определить из какого Edit'a был вызван метод
Если на событие PopupMenu OnPopup написать такую конструкцию__
C++
1
2
3
4
void __fastcall TForm1::PopupMenu1Popup(TObject *Sender)
{
    Caption = ((TPopupMenu*)Sender)->PopupComponent->GetNamePath();
}
то возвращаемым значением ( Caption ) будет имя эдита, из которого это меню вызывалось. Как вы его дальше примените - на свое усмотрение (может через FindControl, или отыщите способ не getnamepath, а сразу header получить...).

Добавлено через 5 минут
Вот так, к примеру__
C++
1
2
3
4
5
6
void __fastcall TForm1::PopupMenu1Popup(TObject *Sender)
{
    TComponent *ed;
    ed = ((TPopupMenu*)Sender)->PopupComponent ;
    ((TEdit*)ed)->Text = "All OK";
}
Добавлено через 1 минуту
Если это меню привязано не только к эдитам, то в таком исполнении будет ошибка, ессно... .
1
Обитатель форума
201 / 184 / 54
Регистрация: 28.10.2012
Сообщений: 543
04.03.2016, 12:15  [ТС]
Да, интересный способ, но, получается, таким образом можно запомнить компонент ДО нажатия на меню "Копировать" или "Вставить", что равносильно тому, чтобы запоминать его при обобщенному для Edit'ов событии OnMouseDown.
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::EditMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
{
    m_pCurrentEdit = dynamic_cast<TEdit*>(Sender);
}
 
void __fastcall TForm1::PopupMenu1Popup(TObject *Sender)
{
    m_pCurrentEdit = (TEdit*)FindComponent(((TPopupMenu*)Sender)->PopupComponent->GetNamePath());
}
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
04.03.2016, 12:23
Ну, можно ж и на ActionList что-то придумать...
C++
1
2
3
4
5
6
7
void __fastcall TForm1::EditPaste1Execute(TObject *Sender)
{
    TComponent *ed;
    TMenuItem *mi = static_cast<TMenuItem*>(Sender); 
    ed = ((TPopupMenu*)mi->GetParentMenu())->PopupComponent ;
    ((TEdit*)ed)->Text = "Всё хорошо";
}
0
Обитатель форума
201 / 184 / 54
Регистрация: 28.10.2012
Сообщений: 543
04.03.2016, 12:31  [ТС]
Только вот static_cast<TMenuItem*>(Sender) никогда не будет верным. Потому что в сендере передается TEditPaste*, который принадлежит TActionList*
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
04.03.2016, 12:39
У меня именно так работает. С таким вот ActionList...
Изображения
 
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2016, 12:39
Помогаю со студенческими работами здесь

Разделить меню так, чтобы каждый пункт меню был немного отдален друг от друга
Здравствуйте, на сайте есть меню: Мне нужно разделить его. Чтобы каждый пункт меню был немного отдален друг от друга. Как это...

Access: сервер OLE не был активирован?
Access: сервер OLE не был активирован? у меня не создаютса страницы HTM доступа к базе даже через мастер =( OLE сервер не...

Узнать имя юзера и с какого IP был доступ к файлу (папке) в сети
Использую в своей работе программу на основе FileSystemWatcher для мониторинга расшареной папки: к каким файлам папкам был доступ. Вопрос,...

Как узнать из какого объекта был вызван слот через QTimer::singleShot ?
Здравствуйте. Класс MainWindow, из которого вызов: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new...

Как узнать из какого потока был вызван метод класса находящегося в потоке?
Пример того как можно безопасно вызывать методы класса который в отдельном потоке: QMetaObject::invokeMethod(myThreadClass,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru