Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
Инна   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.039 c
1-1123169990
MaxVal
2005-08-04 19:39
2005.08.28
Добавление AVI-файла в EXE-файл!


3-1121416353
DD
2005-07-15 12:32
2005.08.28
Динамический запрос в Оракле 8


4-1120564476
[Savage]
2005-07-05 15:54
2005.08.28
Dump


1-1123310249
Андрей Молчанов
2005-08-06 10:37
2005.08.28
узнать, что это драйв по IShellFolder и Pidl


3-1121327519
denis24
2005-07-14 11:51
2005.08.28
Запрос на обновление болевого поля в дбф





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский