Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/43: Рейтинг темы: голосов - 43, средняя оценка - 4.65
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 46

MDI приложение

22.02.2011, 13:18. Показов 8536. Ответов 14
Метки нет (Все метки)

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

1. Создал MDI приложение (из стандартного шаблона создал заготовку).
2. Разработал пару форм, которые вызываются через меню/тулбар.
3. Кинул на главную форму TActionList. Создал 2 события вызова необходимых форм (дабы не писать обработчики кликов на тулбаре и меню).
4. Все открывается как нужно.

Теперь проблемы:
1. Мне необходимо чтобы при открытии моих форм в основном меню добавлялись новые пункты и подпункты меню.
2. При закрытии форм новые пункты соответственно убирались - то есть все становилось как и было.


Подскажите, пожалуйста, как все это организовать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.02.2011, 13:18
Ответы с готовыми решениями:

Сделать многооконное приложение MDI
Сделать многооконное приложение MDI с помощью контейнера vector создать динамический массив из элементов {float z, char c}. Определить...

MDI приложение. Активация дочерних окон
Всем доброго вечера. Пишу MDI приложение и столкнулся со следующей проблемой. Запускаю проект, открываю (к примеру) три текстовых файла в...

MDI приложение - Открытие окон при запуске программы
Добрый день. При закрытии приложения сохраняю список открытых в данный момент формах: void __fastcall...

14
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
22.02.2011, 14:44
C++
1
2
3
4
5
6
7
8
9
        // Создание Item'a
        TMenuItem *item = new TMenuItem(MainMenu1);
        item->Caption = "blabla";
 
        // Добавление в MainMenu
        MainMenu1->Items->Items[0]->Insert(1, item);
 
        // Удаление Item'a
        MainMenu1->Items->Items[0]->Remove(item);
Добавлено через 48 минут
// Удаление Item'a
MainMenu1->Items->Items[0]->Remove(item);
немного ошибся, это строчка просто убирает item из MainMenu.
delete удаляет.
0
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 46
22.02.2011, 16:33  [ТС]
Спасибо за ответ.

Насколько я понял добавленный пункт меню будет всегда отображаться не зависимро от того активно окно (которое его создало) или нет. А механизма который будет сам отслеживать видимость меню под каждое окно в Buildere нет?
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
22.02.2011, 16:55
А механизма который будет сам отслеживать видимость меню под каждое окно в Buildere нет?
чет не понял предложение
0
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 46
22.02.2011, 17:30  [ТС]
Цитата Сообщение от kzru_hunter Посмотреть сообщение
чет не понял предложение
Извини может не понятно изьяснился.

1. Есть главное меню содержащее 2 итема:
Fom1
Form2

2. В обработчике обоих пунктов написал приблизительно следующее:
C++
1
2
3
4
5
6
7
8
void __fastcall TMainForm::Form1Click(TObject *Sender)
{
    TMDIChild *Child;
 
    //--- create a new MDI child window ----
    Child = new TMDIChild(Application);
    Child->Caption = Name;
}
3. Хочу сделать так чтобы при активности каждой из форм главное меню (остается без изменений) имело дополнительные пункты меню/подменю/и т.д. И при перемещении по окнам меню менялось в зависимости от активного окна. Чтобы все что написано и обрабатывается в главном меню так и обрабатывалось.


======================================== =
Пример меню:

Файл Изменить Окна Помощь
Новый Вырезать Каскад О программе...
Открыть Копировать .....
Закрыть Вставить
--------
Выход

Так вот хочу чтобы при создании окна Form1 в основное меню добавлялись след пункты меню:

Файл Изменить Окна Помощь Form1
Новый Вырезать Каскад О программе... MenuItem1
Открыть Копировать ..... MenuItem2
Закрыть Вставить .......
--------
Выход


Так вот хочу чтобы при создании окна Form2 в основное меню добавлялись след пункты меню:

Файл Изменить Окна Помощь Form2
Новый Вырезать Каскад О программе... MenuItem1
Открыть Копировать ..... MenuItem2
Закрыть Вставить .......
--------
Выход

При закрытии всех окон меню имело прежний вид.

Вот кажется в примерах описал что хотел.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
22.02.2011, 18:05
Цитата Сообщение от sergey.ivanov
И при перемещении по окнам меню менялось в зависимости от активного окна.
если я правильно понял, то надо добавить обработчик события OnActivate
0
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 46
22.02.2011, 18:26  [ТС]
Да вот я и спрашиваю как это все правильно делается - по науке.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
22.02.2011, 19:00
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::FormClick(TObject *Sender)
{
    TForm1 *Child = new TForm1(Form1);
    Child->Caption = "blabla";
    Child->Show();
    Child->OnActivate = FuncOnActivateChild;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FuncOnActivateChild(TObject *Sender)
{
    // что-нибудь делать
    return;
}
а в Uni1.h добавить в public:
C++
1
void __fastcall FuncOnActivate(TObject *Sender);
1
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 46
22.02.2011, 19:26  [ТС]
А вот в функции "FuncOnActivate" необходимо писать вот эти самые манипуляции с меню - включать отключать и так далее?

И еще может просто создать меню на главной форме полное (для всех форм) , а затем при активации просо их открывать или закрывать?
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
22.02.2011, 20:56
В предыдущем посте немного неправильно сделал.

А вот в функции "FuncOnActivate" необходимо писать вот эти самые манипуляции с меню - включать отключать и так далее?
Во время создания Form1 и Form2 можно создать MenuItem's, и затем в FuncOnActivateChild то убирать, то вставлять в основное меню нужные item's.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
23.02.2011, 02:46
в ActionList сделать разные наборы меню и активировать при потребности без гемора, или в ІНІ сделать секции [FullMenu], [ShortMenu] и т.д., и грузить секции по желанию.
0
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 46
23.02.2011, 12:02  [ТС]
Спасибо за консультацию. Но вот нарыл в инете решение данного вопроса. Все очень просто - как все гениальное. Хочу поделиться решением:

1. На дочерних окнах в построителе строишь меню такое какое тебе нужно (дополнительные пункты)
2. В обьекте TMenuItem (заголовок меню) устанавливаешь свойство GroupIndex допустим в значение 1.
3. Запускаешь программу открываешь дочерние окна и все действия с меню делает интерфес программы - ничего писать по обработкам не нужно.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
23.02.2011, 12:13
Цитата Сообщение от sergey
Все очень просто - как все гениальное. Хочу поделиться решением:
Решение давно известно и не отвечает изначально поставленной задаче:
Цитата Сообщение от sergey.ivanov Посмотреть сообщение
1. Мне необходимо чтобы при открытии моих форм в основном меню добавлялись новые пункты и подпункты меню.
2. При закрытии форм новые пункты соответственно убирались - то есть все становилось как и было.
- для начала неплохо бы научиться правильно задавать вопросы и не отвлекать людей лишними мозгодвижениями .
0
3 / 3 / 0
Регистрация: 22.02.2011
Сообщений: 46
23.02.2011, 13:36  [ТС]
Насчет правильности постановки вопросов спорить не буду - старался описать суть проблемы даже в примерах (см. выше).

А за консультации большое спасибо.
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
23.02.2011, 13:48
Спросить можно было проще, типа "как создать меню в дочерних формах MDI приложения", и ответ, скорее всего, не понадобился бы
за то, что решил сам - (+) .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2011, 13:48
Помогаю со студенческими работами здесь

MDI
Книга Borland C++ за 21 день , день шестой глава Пример MDI-программы . Не компилиться . Среда разработки Borland C++ Bulider 6 . ...

MDI и Ribbon
Недавно начал работать с RibbonControls попробовал сделать на MDI но когда MDIChild развернуть то в заголовке будет вот такое: Как...

MDI Форма
Доброго времени суток, пишу приложение, используя MDI формы. Суть проблемы в выведении дочерней (MDIChild) формы над родительской (MDIForm)...

MDI интерфейс
Требуется создать программу в которой: 1. Одна главная форма 2. Три дочерних, у которых у каждой собственное меню(не должно...

MDI интерфейс
И еще такой вопрос: у меня програмка с MDI интерфейсом, вот только когда я закрываю дочерние окна, то они не закрываются, а просто...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru