Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798

Почему не срабатывает действие после модификации меню?

15.08.2014, 11:36. Показов 1933. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема возникла на пустом месте... . Чего-то не понимаю.
После модификации главного меню (из 3-х пунктов: "Первый" "Второй" "Выход") действие на нажатие "Выход", а именно - закрытие формы - не производится. Вот вкратце код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::FormShow(TObject *Sender)
{
   ModifyMenu(MainMenu1->Handle, 2,
           MF_BYPOSITION | MF_HELP, 2, "Âûõîä") ; //  | MF_POPUP
 
   Caption = MainMenu1->Items->Items[2]->Caption ;
   MainMenu1->Items->Items[2]->OnClick = N7Click ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{
    Close();
}
- кэпшн подтверждает, что пункт - именно "Выход". Но при нажатии на него выполняется пункт из выпадающего списка "Первый". Что не так??
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2014, 11:36
Ответы с готовыми решениями:

Как сделать чтобы после выполнение одного действие case of, возвращалось к меню выбора действий ?
#include <iostream> #include <string> #include <cstring> #include <cstdlib> using namespace std; const string login = "admin"; ...

Как сделать чтобы после выполнение одного действие case of, возвращалось к меню выбора действий ?
#include <iostream> #include <string> #include <cstring> #include <cstdlib> using namespace std; const string login = "admin"; ...

Почему слушатель на событие установлен после самого события, но все равно срабатывает?
Вот мой код: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33411 / 21521 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
15.08.2014, 14:07
Лучший ответ Сообщение было отмечено nick42 как решение

Решение

nick42, это - глючный метод, ShowMessage он показывает, а вот Close - "шиш с маслом" (С) П.П.Шариков...

Вот это будет работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::FormShow(TObject *Sender)
{
    TCHAR buffer[80];
    HMENU MyMenu = GetMenu(this->Handle);
 
    TMenuItemInfo mmi;
    mmi.cbSize = sizeof(TMenuItemInfo);
    mmi.fMask = MIIM_TYPE;
    mmi.dwTypeData = buffer;
    mmi.cch = 80;
    GetMenuItemInfo(MyMenu, 2, True, &mmi);
    mmi.fType |= MFT_RIGHTJUSTIFY;
    SetMenuItemInfo(MyMenu, 2, True, &mmi);
 
    MainMenu1->Items->Items[2]->OnClick = N7Click;
}
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.08.2014, 14:34  [ТС]
Спасибо! ща попробую...

Добавлено через 2 минуты
Работает!
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
15.08.2014, 15:05
Цитата Сообщение от nick42 Посмотреть сообщение
Работает
Осталось только понять как.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.08.2014, 15:13  [ТС]
С menuiteminfo как раз в общих чертах - логично. "Осталось понять" почему первый вариант - "от Полиграф Полиграфыча"...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33411 / 21521 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
15.08.2014, 16:28
Лучший ответ Сообщение было отмечено nick42 как решение

Решение

nick42, а вот это проверь:
C++
1
2
3
4
5
6
void __fastcall TForm1::FormShow(TObject *Sender)
{
    ::ModifyMenu(MainMenu1->Handle, 2, MF_BYPOSITION | MF_HELP,
        ::GetMenuItemID(MainMenu1->Handle, 2), TEXT("Выход"));
    MainMenu1->Items->Items[2]->OnClick = N7Click;
}
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.08.2014, 16:48  [ТС]
О-о! Как часы. (и запись короче).
Спасибо!

Добавлено через 12 минут
В итоге вот так (вместо двойки - идент подставляется):
C++
1
2
3
4
5
void __fastcall TForm1::FormShow(TObject *Sender)
{
    ModifyMenu(MainMenu1->Handle, 2, MF_BYPOSITION | MF_HELP,
         GetMenuItemID(MainMenu1->Handle,2), "Âûõîä");
}
- всё работает! (я не в курсе, на что двоеточия влияют)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33411 / 21521 / 8236
Регистрация: 22.10.2011
Сообщений: 36,922
Записей в блоге: 12
15.08.2014, 17:25
Цитата Сообщение от nick42 Посмотреть сообщение
я не в курсе, на что двоеточия влияют
Гарантируют, что будет вызываться функция, лежащая в глобальной области видимости. Я чаще всего при вызове API-функций добавляю два двоеточия, мало ли, вдруг есть такой же метод в каком-нибудь из VCL-классов. А если у него еще и параметры совпадают - вообще веселуха может получиться...
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.08.2014, 17:25
Помогаю со студенческими работами здесь

Редактирование реестра для модификации контекстного меню системы
Можно ли написать программу, которая при установке редактирует реестр на компьютере? Вообще изначально нужно было сделать так, чтобы в...

По нажатию на класс действие срабатывает множество раз
Объясните, первый раз с таким сталкиваюсь. Есть код: jQuery('.example').click(function(){ alert('ss'); })Таких классов example у...

Привязать действие из меню к контекстному меню
Добрый вечер. Как собственно привязать действие из подменю к контекстному меню(с помощью Events??). Получилось привязывать только из...

После модификации БД перестала работать регистрация
после небольшого пересмотра своей бд у меня возникли небольшие трудности, пришлось ее переделать, и у меня появилась проблема не могу...

После легкой модификации кода он перестал компилироваться
Здравствуйте,у меня такая вот проблема: есть готовый проект в CodeBlocks,нужно лишь изменить одну строчку в тексте программы. Пробовал...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru