Главная страница
    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.007 c
1-44216
Zew
2003-03-31 21:03
2003.04.14
Свернуть в трей при запуске


4-44501
Drw
2003-02-13 10:22
2003.04.14
Temporary Internet Files


3-44031
Silver_
2003-03-24 12:55
2003.04.14
SQL (СУБД - Access)


7-44484
NetKnight
2002-12-04 16:06
2003.04.14
Program Shortcut ?


6-44320
Bosh
2003-02-20 10:42
2003.04.14
Проблеммы с FTP компонентом Indy





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