Вниз
Скачать: CL | DM;

Объединение меню (не MDI) через DLL   Найти похожие ветки 

← →
BPK   (2003-02-09 13:48) [0]

Есть главная программа и несколько подсистем, размещённых в DLL.
У каждой подсистемы есть своё немодальное окно.
Задача - подстыковать (внедрить) главное меню активного окна подсистемы к главному меню управляющей программы, а при деактивизации окна подсистемы - отстыковать его.
Без DLL всё получается замечательно с помощью метода "Merge".
Пробую через DLL. Выяснил, что через Handle это не сделать, поэтому
попробовал передать наружу указатель на объект меню и работать через него. Пока получается установить "Caption" для пунктов меню дочерней формы, но при попытке сделать "Merge" меню управляющей программы исчезает, и выдаются несколько ошибок чтения по недопустимому адресу для DLL.
Всё написано на Delphi, поэтому проблемы с несовместимостью не существует.
Посоветуйте как быть. Очень нехочется ползать по меню вложенными циклами и переносить пункты поодиночке с помощью функций WinAPI. К сожалению функции WinAPI, позволяющей легко подстыковывать и отстыковывать меню не существует.
Как быть?


← →
asmith   (2003-02-09 17:41) [1]

Я решал подобную проблему примерно так:
1. В дизайнере головному окну назначено некое меню mmMain со всякими общими задачами типа Exit, Help, About и пр
2. При старте запускающая программа сначала создает динамически еще один объект типа TMainMenu, например, mmNew
3. Далее строится список загружаемых модулей и по очереди из каждого модуля извлекается информация о его названии, количестве методов интерфейса и массив строк-названий методов.
4. Для каждого модуля в mmNew создается TMenuItem с прочитанным названием как Caption и в этот новый TMenuItem в цикле по числу методов добавляются отдельные TAction и TMenuItem, которые вяжутся на обработчики.
5. По завершению всего этого мержим меню mmMain и mmNew.
Схема немного упрощена, ибо в реальности еще читаются из ресурсов модулей растры для использования в качестве изображений на кнопках тулбаров и пунктах меню.


← →
BPK   (2003-02-12 23:14) [2]

Короче, если я правильно понял, нужно всё делать вручную?

Смысл в том, что каждая подсистема может работать как автономно (в виде EXE), так и в системе, под управлением главной программы (в виде DLL). Для этого есть разные *.DPR-файлы.

По этой причине у подсистемы уже есть своё меню, и при подстыковке его к главной программе нужно удалить старое меню и создать пункты в меню управляющей программы, причём если в обоих меню есть пункт "Файл", то меню "Файл" основной программы должно дополниться пунктами меню "Файл" окна подсистемы.



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
14-44444
_ncux_
2003-03-29 12:25
2003.04.14
Помогите найти тему для инженерной практики!


4-44512
Dober_m@N
2003-02-14 20:51
2003.04.14
как поставить hooks для сочетания клавиш


3-44007
vlgrig1961
2003-03-25 13:40
2003.04.14
Есть что-либо похожее на Refresh в TQuery


1-44155
lex01
2003-04-03 16:00
2003.04.14
как получить значение ключа реестре


14-44414
Wonder
2003-03-28 17:04
2003.04.14
Хммм... Утка?




   Наверх