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