Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Динамическое добвление и удаление пунктов меню


Автор: Medved 27.1.2004, 03:03
Вопрос вот в чем. Нужно придумать универсальный механизм.

Есть главная форма. FormStyle - fsMDIForm.
Есть дочернии формы.

Как организовать такой универсальный алгоритм, чтобы при открытии дочерних форм добавлялся новый пункт, в меню "Окна" (Name итемса - nmWindow), а при закрытии этот пункт удалялся. Причем,не должно быть перекрестных ссылок между главной и дочерними формами. Иначе говоря, дочерие окна не должны ссылаться на главную. Но можно использовать модуль данных (TDataModule) на который ссылается как главное окно, так и дочернии.
Для открытия дочерних форм, я использю TAction (в обработчике которого уже предусмотрено, что если дочерняя форма открыта, то она выходит на передний план, а не открывается новый экземпляр этой формы. Но это так, для информации)

Данный механизм я реализовал, но через жопу. Хотелось бы увидеть вашу реализацию этой проблемы.

Заранее благодарен!

P.S. Под словом "универсальный" я понимаю то, чтобы не привязываться к конкретным названиям TAction и TMenuItem. Иначе говоря, я должен вставить данный код в любое (подобное) приложение, и он должен работать без внесения каких-либо изменений.

Автор: <Spawn> 27.1.2004, 06:38
А пункт должен добавляться в главную форму или во все дочерние?

Автор: <Spawn> 27.1.2004, 06:44
Если в главной форме, то я бы сделал так:
1) В отдельном юните создал бы класс для добавления удаления итемов из указаного TMenuItem.
2) Определил бы в том юните глобальную переменную созданного класса.
3) В главной форме создал его экземпляр и поместил бы указатель на него в эту переменную.
4) Для дочерних форм сделал бы наследников от TForm и переписал бы там конструктор и деструктор с использованием этой глобальной переменной.

Ну это только теория))) Нужно проверять.

Автор: x77 27.1.2004, 22:01
народ, вы свои таблетки принимали с утра? 8)

Цитата
Specifies the Window menu for an MDI parent form.

property WindowMenu: TMenuItem;

Description

Use WindowMenu to get or set the Window menu for an MDI parent form. The Window menu is a standard menu in MDI applications. It contains commands that let the user manage the windows in the application. Menu items usually include Cascade, Arrange Icons, Tile, and so on.

The Window menu also lists (at the bottom) the child windows that are currently open in the application. When the user selects one of these windows from the menu, the window becomes the active window in the application.

Although this menu is commonly called the Window menu, it can have any name that corresponds to an existing menu item on the menu bar. The names of open child forms are merged onto the menu automatically at run-time.


WindowMenu is meaningful only if the form is an MDI parent (that is, if the form’s FormStyle property is set to fsMDIForm).


может, я чего круто не догнал??

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