Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Два меню на одной форме   Найти похожие ветки 

 
Инна   (2005-08-02 19:40) [0]

Как сделать так чтобы на форме было два меню: одно которое бы сливалось с меню главной формы, а второе было непосредственно на форме?
Или что-бы только некоторые пункты сливались, а остальные оставались на форме.


 
Profi ©   (2005-08-07 00:33) [1]

Инна   (02.08.05 19:40)
Имеется ввиду Mdi приложение?


 
msguns ©   (2005-08-07 09:37) [2]

ИМХО, не стоит дублировать пункты в дочках, если они есть в основном. Достаточно посмотреть реализацию элементов управления в таком профессионально сделанном продукте, как MsOffice. Есть Главная форма с полной палитрой функций, которую очень удобно настраивать "под себя". И есть "дочки" - окна с документом, книгой, .. У дочек нет своих кнопок - используется общая панель (панели) управления с Гл.формы.
Задача "дочек" в том, чтобы контекстно переключать "кнопки" (экшины) в активное или пассивное состояние в зависимости от ее конкретных условий. Обычно это укладывается в одну процедуру-метод класса "дочки", вызов которой выполнется по событиям Ativate, Deactivate формы, а также OnEnter/OnExit ее винконтролов. Вся обработка кликов юзера цетрализуется в гл.форме через TActionList/TActions+TImageList. Каждый обработчик экшина также реализуется в Гл.форме, причем без привязки к конкретным экземпярам классов-компонент дизайна. Получая управление, процедура-обработчик определяет активную "дочку", тип активного контрола, и если это тот, что надо, выполняет соотв.действия.
В общем, довольно просто.

В некоторорых случаях "дочка" может иметь свои, чисто специфические функции. Вот их, имхо, не стоит выносить в Главную, а реализовать на самой "дочке" в виде либо панели управления (если функций много), либо просто кнопками с надписями.

Перед тем, как проектировать MDI-приложение, надо 100 раз подумать. Ведь подобные программы требуют от пользователя некоторой начальной опытности работы с многодокументными интерфейсами (хотя бвы с тем же вордом) и часто приводят к непониманию новичков того, что происходит на экране его монитора.
Кроме того, "дочку" нельзя "заставить" работать в модальном режиме (можно лишь сэмулировать, играя на OnExit, On DeActivate, OnClose, OnCloseQuery и т.д. - но обязательно будут проблемы, в частностьи с тем же управлением от Гл.формы), что часто делает управление приложением весьма запутанным.

Мой совет, найдите профессиональную программу, схожую по функциям с Вашей, посмотрите, как реализован контрол там. И сделайте так же.


 
msguns ©   (2005-08-07 09:47) [3]

И еще про MDI
"Дочки" весьма капризны. Например, при распахивании хотя бы одной дочки, распахиваются все. И наоборот. При создании и открытии дочки Гл.форма не может получить эффективный доступ к ее полям и методам, как она это может при создании обычной (fsNormal) формы.
 Например, код

 With TfrmChild.Create(MainForm) do
  begin
   Top := MainForm.Top+20;
   Left := MainForm.Left+20;
   Show;
  end


который совершенно эффективно спозиционирует вновь созданную fsNormal форму как указано, будет совершенно "холостым" при создании "дочки" (fsMDIChild).
Этот эффект делает стартовое позиционирование дочек затруднительным и, главное, приводит к мельканию на экране (видно, как форма рисуется сначала там, где ей "сказали" в Position, а потом перерисовывается в новом месте).

Возможно, подключатся мастера и посоветуют, как избежать подобного эффекта, у меня получилось только переопределив некоторые части конструктора, что в общем совсем не так просто. Код получился громоздким, а результат несколько "смазанным" из-за побочных эффектов. В рез-те эти эксперименты я бросил, "подгоняя" концепцию управления окнами своих приложений под стандартные борландовские решения ;)


 
Юрий Зотов ©   (2005-08-07 09:57) [4]

Слияние меню, дефолтное позиционирование, одновременное распахивание и пр. - все это не борландовские, а майкрософтовские решения. Совершенно стандартное поведение дочерних окон в Windows, с которым ничего делать и не нужно.



Страницы: 1 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
9-1114794185
Warchief
2005-04-29 21:03
2005.08.28
lightmap


4-1121169826
Piter
2005-07-12 16:03
2005.08.28
Эмуляция нажатий клавиш


4-1121234237
Volumer
2005-07-13 09:57
2005.08.28
Процесс


14-1123166938
lookin
2005-08-04 18:48
2005.08.28
Музыкальный стиль


4-1121166012
ATarget
2005-07-12 15:00
2005.08.28
Работа с винтом