Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3

Отследить нажатие пункта в компоненте MainMenu

28.04.2010, 17:16. Показов 2358. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята подскажите, пожалуйста, по такому вопросу.
У меня есть компонент MainMenu, я хочу отследить когда нажат конкретный пункт этого меню чтобы его можно было вписать в условие.
Сделал так
C++
1
if ((ComboBox1->ItemIndex == 0)&& CopyIzbrannayaClick(Sender))
Такое условие не катит пишит ошибку такого плана

[C++ Error] Unit1.cpp(3198): E2109 Not an allowed type
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2010, 17:16
Ответы с готовыми решениями:

Вставка иконки в компоненте Mainmenu
Здравствуйте! Такой вот вопросик, как вставить иконку в компонент Mainmenu! Нужна не такая маленькая а побольше! Вообщем зачем писать, вот...

Столкнулся с необходимостью смены шрифта в компоненте MainMenu
Здравствуйте уважаемые программисты, я столкнулся с необходимостью смены шрифта в компоненте Main Menu! Я знаю про функцию OwnerDraw = true...

MainMenu узнать Items конкретного пункта
Здравствуйте, как считать в переменную Items конкретного пункта меню, при этом этот конкретный пункт нам не известен. К примеру у меня есть...

15
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
28.04.2010, 18:01
Не очень понял вопроса. Тебе нужно узнать какой из пунктов меню был нажат??? И где это условие должно описываеться?
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
28.04.2010, 18:13
какой тип параметра у CopyIzbrannayaClick()
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
28.04.2010, 21:26  [ТС]
Цитата Сообщение от Ni'Tan Посмотреть сообщение
Не очень понял вопроса. Тебе нужно узнать какой из пунктов меню был нажат??? И где это условие должно описываеться?
Да, именно так

Добавлено через 5 минут
Цитата Сообщение от Roma_F Посмотреть сообщение
какой тип параметра у CopyIzbrannayaClick()
TObject*
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
28.04.2010, 21:31
с одной строчкой трудно разбираться
на всякий случай уточню - что возвращает CopyIzbrannayaClick
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
28.04.2010, 21:39  [ТС]
C++
1
void __fastcall TMainForm::CopyIzbrannayaClick(TObject *Sender)
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
28.04.2010, 21:40
if ((BOOL) && VOID) - Not an allowed type, по русски - void'у здесь не место
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
28.04.2010, 21:43  [ТС]
Цитата Сообщение от Roma_F Посмотреть сообщение
if ((BOOL) && VOID) - Not an allowed type, по русски - void'у здесь не место
Ну так как правильно?
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
28.04.2010, 21:51
Что-то я перестал улавливать мысль, сначала я думал, что CopyIzbrannayaClick - это какая-то своя функция и приведённая строчка пишется в обработчике нажатия у пункта меню.
Где пишется эта строчка и какая конечная цель?
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
28.04.2010, 22:14  [ТС]
Суть такая есть три таблицы. Их названия расположены в MainMenu - 3 штуки. И от того на какой пункт я нажму в MainMenu в ту таблицу нужно и скопировать строку, да ещё перед копированием нужно проверить какой текст выбран в компоненте комбобокс.
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
28.04.2010, 22:46
Например вместо таблиц Edit'ы:
Пунктам меню делаем разные Tag'и. Потом в обработчике одного из них
C++
1
2
3
4
5
6
void __fastcall TFormMain::Mnu1Click(TObject *Sender)
{
    int tag = dynamic_cast<TComponent *>(Sender)->Tag;
    TEdit *edits[] = { Edit1, Edit2, Edit3 };
    edits[tag]->Text = ComboBox1->Text;
}
И повесить этот обработчик на остальные пункты

Можно создать ещё свой обработчик - MyMenuClick(TObject *Sender), или использовать TActionMeneger, чтобы жёстко не привязываться к интерфейсу
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.04.2010, 00:03  [ТС]
Чё то запутанно а по легче чё-нить?
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
29.04.2010, 00:10
Sasha, код копирования строки напиши в обработчике нажатия нужной кнопки в главном меню.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.04.2010, 12:34  [ТС]
Поясните пожалуйста я сделал код переключения

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
void __fastcall TMainForm::Switch_of_copytoTable()
{
TLocateOptions Options;
Options.Clear();
Options << loPartialKey;
ADOQuery1->DisableControls();
AnsiString textsql = ADOQuery1->SQL->Text,sortsql = ADOQuery1->Sort;
int zap = ADOQuery1->FieldByName("Invent_Number")->AsInteger;
 
 switch (ComboBox1->ItemIndex)
 {
 case 0:
 {
 if (MainForm->CopyIzbrannaya->Tag== 2)
 {
   IzbrInv();
 if(ADOQuery1->Locate("Invent_Number",zap,Options))
 {
  AnsiString cw = "Такая строка уже есть в таблице Избранное!!! \n\n"
  + IntToStr(ADOQuery1->FieldByName("Invent_Number")->AsInteger)+" - "
  +ADOQuery1->FieldByName("Number_in_Lan")->AsString+" - "
  +ADOQuery1->FieldByName("Department")->AsString+" - "
  +ADOQuery1->FieldByName("Processor")->AsString+" - "
  +ADOQuery1->FieldByName("Memory")->AsString+" - "
  +ADOQuery1->FieldByName("HDD")->AsString+" - "
  +ADOQuery1->FieldByName("Room")->AsString + "\n\n"
  + "Выберите другую строку";
  Application->MessageBox(cw.c_str(),"Внимание",MB_ICONWARNING);
 }
 else
 {
  ADOQuery1->Close();
  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Add("INSERT INTO Vubrannaya SELECT *FROM Glavnaya");
  ADOQuery1->SQL->Add("WHERE Invent_Number ="+IntToStr(zap));
  ADOQuery1->ExecSQL();
 }
 }
  else if (MainForm->CopySpisanie->Tag == 3)
 {
   ShowMessage("Привет");
   SpisanInv();
   if(ADOQuery1->Locate("Invent_Number",zap,Options))
 {
  AnsiString cw = "Такая строка уже есть в таблице Списание!!! \n\n"
  + IntToStr(ADOQuery1->FieldByName("Invent_Number")->AsInteger)+" - "
  +ADOQuery1->FieldByName("Number_in_Lan")->AsString+" - "
  +ADOQuery1->FieldByName("Department")->AsString+" - "
  +ADOQuery1->FieldByName("Processor")->AsString+" - "
  +ADOQuery1->FieldByName("Memory")->AsString+" - "
  +ADOQuery1->FieldByName("HDD")->AsString+" - "
  +ADOQuery1->FieldByName("Room")->AsString + "\n\n"
  + "Выберите другую строку";
  Application->MessageBox(cw.c_str(),"Внимание",MB_ICONWARNING);
 }
 else
 {
  ADOQuery1->Close();
  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Add("INSERT INTO Spisanie SELECT *FROM Glavnaya");
  ADOQuery1->SQL->Add("WHERE Invent_Number ="+IntToStr(zap));
  ADOQuery1->ExecSQL();
 }
 }
  break;
 }
Почему-то когда я нажимаю на другой пункт меню должна сработать вот эта строка
C++
1
 else if (MainForm->CopySpisanie->Tag == 3)
А она почему-то не срабатывает, подскажите что не так по коду?
0
332 / 247 / 32
Регистрация: 13.12.2009
Сообщений: 589
29.04.2010, 21:51
1-й вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TMainForm::Switch_of_copytoTable (int MenuNum)
{
    ...
    if (MenuNum == 2)
    {
 
    }
    else if (...)
}
//---------------------------------------------------------------------------
 
void __fastcall TMainForm::CopyIzbrannayaClick(TObject *Sender)
{
    Switch_of_copytoTable (dynamic_cast<TComponent *>(Sender)->Tag);
}
//---------------------------------------------------------------------------
потом в Object Inspector для остальных пунктов просто выбираешь CopyIzbrannayaClick

2-й вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
__fastcall TMainForm::TMainForm(TComponent* Owner)
    : TForm(Owner)
{
    CopyIzbrannaya->OnClick = Switch_of_copytoTable;
    CopySpisanie->OnClick = Switch_of_copytoTable;
    ...
}
//---------------------------------------------------------------------------
 
void __fastcall TMainForm::Switch_of_copytoTable (TObject *Sender)
{
    int MenuNum = dynamic_cast<TComponent *>(Sender)->Tag;
    ...
    if (MenuNum == 2)
    {
 
    }
    else if (...)   
}
1
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
29.04.2010, 22:18  [ТС]
Спасибо по пробую
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2010, 22:18
Помогаю со студенческими работами здесь

Отключение пункта MainMenu по тексту Edit1.text
Добрый день! Пишу программу и столкнулся с такой проблемой: У меня есть форма Form1 в ней есть edit1 и edit2 - на ней я сделал...

Нажатие ПКМ на MainMenu
Всем привет. Возникла немного странная необходимость... нужно обработать нажатие ПКМ на MainMenu. Как это сделать? Ну вообще цель ему...

Как отследить клик на динамически созданном компоненте?
Создаю динамически несколько чекбоксов. AnsiString asKSPrefix = {&quot;GB&quot;, &quot;BS&quot;, &quot;VE&quot;, &quot;CB&quot;, &quot;ST&quot;, &quot;SP&quot;, &quot;PF&quot;}; int iSize =...

Как в компоненте MediaPlayer отследить, когда закончилось воспроизведение?
Подскажите, пожалуйста, как в компоненте MediaPlayer отследить, когда закончилось воспроизведение (кончилась видюшка или нажалась кнопка...

Как отследить какое сообщение посылает менюшка при выборе пункта?
Помогите пожалуста советом или исходником (что намного лучше). Кратка предъистория: Создал иконку в Systray-е, создал менюшку...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru