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

Вниз

Объединение меню (не 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.04.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.008 c
8-44279
Fissher
2002-12-11 16:25
2003.04.14
Звук в MediaPlayer


1-44261
RoadStar
2003-04-02 14:31
2003.04.14
Сигнализация выхода из приложения


14-44449
Vlad Oshin
2003-03-17 12:42
2003.04.14
Воспоминания


1-44238
VadimS
2003-04-02 10:30
2003.04.14
Текст кодировки DOS в Windows кодировку


3-43987
RDA
2003-03-24 11:36
2003.04.14
Проблемы с MS Jet и ADO





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский