Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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 smile

Этот вопрос как раз из той серии, что еслиб я смог сформулировать четко вопрос, то и ответ бы нашел!!! Может подскажете как должен был звучать вопрос ;)

А может еще:
>таким же образом в некоторых программах обходятся и с панелью "инструментов"!!!
ToolBar или еще какой-нибудь компонент может такоеже позволить с кнопками ...

Автор: Vyacheslav 18.10.2006, 13:06
 Э...  smile  Аппетит приходит во время еды?
Тут сложнее. Все делается ручками. Во всяком случае так делал я.

Автор: korotkov 18.10.2006, 13:17
>Аппетит приходит во время еды?
так я процетировал еще первое свое сообщение ...

так куда ручки ... ;)

черкни пару строк (кода ;) ) о вопросе, если не сложно!

Автор: Vyacheslav 18.10.2006, 14:11
Кода под рукой нет. Так только общие принципы
У меня там были свои заморочки, по скольку все дочерние окна были в подгружаемых dll и события дочерних окон не использовались
А если не накладывать ограничений, то все очень просто. Кладешь на основную форму
ControlBar. На ControlBar добавляешь ToolBar c кнопками главного окна. На дочерние окана кладешь ToolBar cо своими кнопками. Для дочернего окна определяешь обработчики
Код

void __fastcall TForm2::FormActivate(TObject *Sender)
{
    ToolBar1->Parent  =  Form1->ControlBar1;
    ToolBar1->Left = 100; // определяется концом тулбара основного окна 
    ToolBar1->Visible = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormDeactivate(TObject *Sender)
{
      ToolBar1->Visible = false;
     ToolBar1->Parent = this;

}







Автор: korotkov 18.10.2006, 14:29
Спасибо за ответ, но как то это совсем ручками и ... "прямо в лоб" ;)



Автор: Vyacheslav 18.10.2006, 16:07
5 строк кода? А что такое тогда не "прямо в лоб"? Компонент из Тори?

Автор: korotkov 18.10.2006, 17:59
не кипишуй ;) у собеседника все не так плохо smile

Если главная форма знает о MDIChild, то почему не все ;)

Зачем мне из child-а говорить главной форме что ей делать, т.е. ToolBar1->Left = 100; а сначала узнавать у него этот Left!!!???

С меню через Merge получается, что-то на подобие этого я и хотел, а не позволять младшим копаться "в кишках" старших ;)

Это я имел ввиду!

P.S. Отвечу Вашими словами:
А зачем же так волноваться и ... Вы smile не поняли и ...
Ответ смотри выше!

Большой привет! smile

Автор: Vyacheslav 18.10.2006, 18:14
А я  вроде и не волновался. Просто удивился. А чтобы в "кишках не ковырятся" есть стандартное с++ решаение, а именно у главной формы сделать соответствующий метод типа  ToolBarMerge( TToolBar*). Есть и другой способ. Воспользоваться событием TMainMenu::OnChange на главной форме. Оно как раз будет срабатывать при слиниянии меню. И на него повесить соответ свующий код.
 

Автор: korotkov 18.10.2006, 21:06
Ok!

;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)