Форум: "Основная";
Текущий архив: 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.035 c