| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > контекстнозависимое меню ... |
| Автор: korotkov 17.10.2006, 21:26 |
| как реализовать "контекстнозависимое" меню? т.е. меню, элементы которого зависят от "типа" активного окна, полностью раскрытого (wsMaximized), элементы меню дочернего окна добавляются к элементам меню основного окна ... может технология как-то иначе называется!? таким же образом в некоторых программах обходятся и с панелью "инструментов"!!! подскажите как реализуется, мне кажется это должно быть с минимумом кода ... |
| Автор: BreakPointMAN 18.10.2006, 01:11 |
| Если работаешь в Borland C+ Builder, читай во встроенной справке среды описание компонента TPopupMenu, а также воспользуйся http://forum.vingrad.ru/index.php?act=Search&f=94 по форуму, ибо подобные темы уже обсуждались. |
| Автор: korotkov 18.10.2006, 09:39 |
| еслибы ты прочитал внимательно исходное сообщение, то не писал бы глупости нравоучительным тоном!!! для таких пИсак я еще ж хотел приписать, не контекстное меню (Popupmenu), а "контекстнозависимое" ... основное меню главного окна, которое меняет список своих SubMenu ... знал что найдется "мудрец" не умеющий читать, а только пИсать ;) набрал я поиском, по твоему "совету" фразу "контекстнозависимое меню" и что я увидел: свой же вопрос ... и все! В том то и вопрос, что я не знаю как эта "возможность" в программах называется. ... читай вопрос прежде чем нравоучать, дурная привычка!!! ну и конечно же Borland C++ Builder? я ж раздел правильно выбрал ;) Модератор: А зачем же так волноваться и грубить. Вас не поняли и да и я бы непонял. Нужно правильно задавать вопросы и только. Ответ ниже |
| Автор: Vyacheslav 18.10.2006, 10:16 |
| 1. В MDI модели слияние (Merge) поддерживается автоматически. Достаточно на дочернюю форму добавиль свое TMainMenu 2. Если Вы не используете MDI модель, то слияние можно осуществить вручную Смотрите хелп TMainMenu::Merge |
| Автор: korotkov 18.10.2006, 12:52 |
| > TMainMenu::Merge Спасибо Из вопроса то можно было понять что речь идет не о PopupMenu Этот вопрос как раз из той серии, что еслиб я смог сформулировать четко вопрос, то и ответ бы нашел!!! Может подскажете как должен был звучать вопрос ;) А может еще: >таким же образом в некоторых программах обходятся и с панелью "инструментов"!!! ToolBar или еще какой-нибудь компонент может такоеже позволить с кнопками ... |
| Автор: Vyacheslav 18.10.2006, 13:06 |
| Э... Тут сложнее. Все делается ручками. Во всяком случае так делал я. |
| Автор: korotkov 18.10.2006, 13:17 |
| >Аппетит приходит во время еды? так я процетировал еще первое свое сообщение ... так куда ручки ... ;) черкни пару строк (кода ;) ) о вопросе, если не сложно! |
| Автор: Vyacheslav 18.10.2006, 14:11 | ||
| Кода под рукой нет. Так только общие принципы У меня там были свои заморочки, по скольку все дочерние окна были в подгружаемых dll и события дочерних окон не использовались А если не накладывать ограничений, то все очень просто. Кладешь на основную форму ControlBar. На ControlBar добавляешь ToolBar c кнопками главного окна. На дочерние окана кладешь ToolBar cо своими кнопками. Для дочернего окна определяешь обработчики
|
| Автор: korotkov 18.10.2006, 14:29 |
| Спасибо за ответ, но как то это совсем ручками и ... "прямо в лоб" ;) |
| Автор: Vyacheslav 18.10.2006, 16:07 |
| 5 строк кода? А что такое тогда не "прямо в лоб"? Компонент из Тори? |
| Автор: korotkov 18.10.2006, 17:59 |
| не кипишуй ;) у собеседника все не так плохо Если главная форма знает о MDIChild, то почему не все ;) Зачем мне из child-а говорить главной форме что ей делать, т.е. ToolBar1->Left = 100; а сначала узнавать у него этот Left!!!??? С меню через Merge получается, что-то на подобие этого я и хотел, а не позволять младшим копаться "в кишках" старших ;) Это я имел ввиду! P.S. Отвечу Вашими словами: А зачем же так волноваться и ... Вы Ответ смотри выше! Большой привет! |
| Автор: Vyacheslav 18.10.2006, 18:14 |
| А я вроде и не волновался. Просто удивился. А чтобы в "кишках не ковырятся" есть стандартное с++ решаение, а именно у главной формы сделать соответствующий метод типа ToolBarMerge( TToolBar*). Есть и другой способ. Воспользоваться событием TMainMenu::OnChange на главной форме. Оно как раз будет срабатывать при слиниянии меню. И на него повесить соответ свующий код. |
| Автор: korotkov 18.10.2006, 21:06 |
| Ok! ;) |