Тема: Меню до 2006 и в 2006

To Александр Ривилис:
Тут в одном из топиков ниже прочитал твой совет относительно кнопочек через mnu в до 2006 и cui в 2006-ом.
Можно чуть поподробней.
А именно у меня такой трабл. Вчера стал проверять работу своей программы под 2006. В 2005 она работает. После этого пытаюсь стартануть ее в 2006 - летит эксепшен, что menu группа GroupName уже есть... тра-ля-ля... CUI. Я при загрузке программы через COM акада гружу свою меню группу через mnu файл + .dll с иконками кнопочек. Правда программа скомпилирована с acad.tlb из 2004-го (для 2005-го все продолжао работать, можно ли юзать acad.tlb из 2004 в 2006?).
Ну дак вот, при загрузке менюшек в 2006 они грузятся (т.е. их видно, появляется тулбар), потом пишится эта надпись
----
Unable to load customization file: C:\Program Files\XXX\Name.cui
That Customization Group name already exists.
----
потом падает...

Re: Меню до 2006 и в 2006

Правда потом падать может из-за того что не стартанулась менюшка (скорее всего эксепшен это уже мой косяк, просто причина в том, что в 2006 загрузка mnu происходит чуть иначе чем в 2005-м)

Re: Меню до 2006 и в 2006

> KonstantinM
1) Поставь в 2006 исправленный AcCustomize.dll (http://images.autodesk.com/adsk/files/AcCustomize.dll)
2) У тебя наверняка есть твой mns-файл от AutoCAD 2004(2005). Не поленись и переименуй его в mnu. В mns-файле предыдущие версии AutoCAD дописывали необходимые поля и исправляли ошибки, которые были в mnu-файлах. Это должно помочь. Во всяком случае мне это помогло. А вообще даже исправленный AcCustomize.dll отказывается загружать мой исходный mnu-файл - только mns-файл. Но теперь вроде без ошибок.
А поповоду exception - попробуй ручками загрузить свой mnu-файл командой CUI. Наверняка получишь exception.
По поводу 100%-ой совместимости acad.tlb в 2004 и 2006 ничего сказать наверняка не могу. Т.е. вроде все мое работает, но я крайне мало использую COM. Только менюшки и тулбары...

Re: Меню до 2006 и в 2006

P.S. Кажется я ответил не совсем по делу sad Но с твоей стороны информации маловато.
Может быть ты используешь уже задействованное menugroup и в этом случае AutoCAD ведет себя не корректно?
К сожалению, все что связано с CUI очень сырое...
Еще один совет - сконвертируй свой MNU/MNS с CUI и загружай его.
Если хочешь, черкни мне на e-mail более подробную информацию. Может получится помочь...

Re: Меню до 2006 и в 2006

Сегодня поставли 2006 Акад, попробовал - всё нормально работает, мои старые mnu-файлы полностью прокатили smile

Re: Меню до 2006 и в 2006

> archimag
Счастливчик! smile

Re: Меню до 2006 и в 2006

> Александр Ривилис
Я тоже использую COM только для загрузки mnu файлов, так что спинной мозг чувствует, что acad.tlb из 2004 можно проюзать и в 2006 для этих целей, полная совместимость меня тоже не очень сильно волнует.
И еще :)
Что-то я не могу сходу понять как выгрузить mnu группу...

Re: Меню до 2006 и в 2006

Нашел cuiunload...

Re: Меню до 2006 и в 2006

Понятно... что какая-то жопа...
Оставил только name.mnu файл и name.dll с ресурсами.
Попробовал сделать просто mnuload - выдал сообщение
---
Warrning: Error in MNU\MNS file at line 106, Toolbar must have at least one alias (**SUBSECTION) defined
---
Щас буду пытыться скачать customize dll и поколдовать над mns/mnu :)

Re: Меню до 2006 и в 2006

:(
Чем дальше в лес тем толше партизаны.
В mnu файле написано:
***MENUGROUP=PSPower
Кода я загружаю этот mnu файл в первый раз то все ОК, потом перебираю группы через COM акада и... упс, у меня есть группа PSPOWER вместо PSPower :(
В программе и в mnu файле все имя группы поменял на верхний регистр - и упс... как у архимага все задышало и зажило... (почти)
Архимаг - у тебя в mnu названия групп были большими буковками написаны? И для чичтоты экспиримента удли все mnr mns mnc файлы - проверь что грузится все, удалив свою группу из акада предварительно ручками...
Второй косяк...
Есть у меня парочка тулбаров, так предупреждение про ошибку в mnu файле все равно выдается и вместо двух тулбаров, появляется только один (первый), но на нем кнопки с ОБОИХ тулбаров... Такие пирожки...

Re: Меню до 2006 и в 2006

> KonstantinM
Теперь уже понятнее откуда у тебя появлялось сообщение:
----
Unable to load customization file: C:\Program Files\XXX\Name.cui
That Customization Group name already exists.
----
Ты его не находил и грузил дважды?! smile
С регистром в MENUGROUP у меня проблем не было.

В программе и в mnu файле все имя группы поменял на верхний регистр - и упс... как у архимага все задышало и зажило... (почти)

Не проще ли было делать регистронезависимую проверку? Типа stricmp(...)
А поповоду второго косяка - думаю, что и сам разберешься... Она тебе явно указала, что у тебя нет алиаса. Это уже мелочи.

Re: Меню до 2006 и в 2006

Ну и с последним косяком разобрался... :) Действительно поменял mns созданый под 2004 в mnu - и под 2006 все заработало, предупреждение об ошибке в MNU пропало и тулбары правильно "прохавались". Видать требования к синтаксису mnu ужесточились...

Re: Меню до 2006 и в 2006

Именно алиаса и не было.
Спасибо за помощь.
AcCustomize.dll - не качал и так все заработало...

Re: Меню до 2006 и в 2006

Еще одно замечание, которое тебе возможно поможет. Вот оригинал одного из тулбаров в MNU-файле:

**TB_ANGLES
MID_ANGLES   [_Toolbar("Углы", _Floating, _Show,  655, 710, 3)]
MID_ANGLE_135          [_Button("Угол 135", "ANGLE135", "ANGLE135")]<135
MID_ANGLE_090          [_Button("Угол 90",  "ANGLE090", "ANGLE090")]<90
MID_ANGLE_045          [_Button("Угол 45", "ANGLE045", "ANGLE045")]<45
                       [--]
MID_ANGLE_180          [_Button("Угол 180", "ANGLE180", "ANGLE180")]<180
MID_ANGLE_ASK          [_Button("Угол", "ANGLE", "ANGLE")]<\
MID_ANGLE_000          [_Button("Угол 0", "ANGLE000", "ANGLE000")]<0
                       [--]
MID_ANGLE_225          [_Button("Угол 225", "ANGLE225", "ANGLE225")]<225
MID_ANGLE_270          [_Button("Угол 270", "ANGLE270", "ANGLE270")]<270
MID_ANGLE_315          [_Button("Угол 315", "ANGLE315", "ANGLE315")]<315

А вот так он выглядит в MNS-файле, откуда нормально импортируется в CUI-файл:

**TB_ANGLES
**УГЛЫ
MID_ANGLES     [_Toolbar("Углы", _Floating, _Show, 655, 710, 3)]
MID_ANGLE_135  [_Button("Угол 135", "ANGLE135", "ANGLE135")]<135
MID_ANGLE_090  [_Button("Угол 90", "ANGLE090", "ANGLE090")]<90
MID_ANGLE_045  [_Button("Угол 45", "ANGLE045", "ANGLE045")]<45
               [--]
MID_ANGLE_180  [_Button("Угол 180", "ANGLE180", "ANGLE180")]<180
MID_ANGLE_ASK  [_Button("Угол", "ANGLE", "ANGLE")]<\
MID_ANGLE_000  [_Button("Угол 0", "ANGLE000", "ANGLE000")]<0
               [--]
MID_ANGLE_225  [_Button("Угол 225", "ANGLE225", "ANGLE225")]<225
MID_ANGLE_270  [_Button("Угол 270", "ANGLE270", "ANGLE270")]<270
MID_ANGLE_315  [_Button("Угол 315", "ANGLE315", "ANGLE315")]<315

Видимо не зря добавляется строка **УГЛЫ
О! Увидел, что ты уже разобрался, но решил оставить информацию для других "мучеников" biggrin

Re: Меню до 2006 и в 2006

> KonstantinM
Фактически (IMHO) в CUI выкинут этап конвертации MNU->MNS, который присутствовал во всех предыдущих версиях, когда проводился анализ MNU-файла с нормальной диагностикой и дополнение/исправление меню для следующего этапа конвертации MNS->MNC Теперь считается, что формат MNU полностью аналогичен формату MNS и никакой дополнительной обработки не производится... Отсюда большинство ошибок.
Поэтому всем рекомендую использовать вместо MNU-файлов MNS-файл, полученный в предыдущих версиях AutoCAD.
Рад был помочь. Удачи!

Re: Меню до 2006 и в 2006

Ну и еще глючок.
При первой загрузке mnu файла - все ОК. При второй загрузке - тулбары грузятся, а вот меню в MenuBar не вствляются... т.е. если cui файлик уже есть, то приходится при загрузке меню группы через COM автокада ручками проверять если onMenuBar - FALSE, то инсертить меню на insertInMenuBar... тоже отличие от ранних версий там если говоришь loadMenu - то менюшки показывались сразу, а теперь они хоть и загружены, но сами добавляться в MenuBAR не желают.

Re: Меню до 2006 и в 2006

Это не глючок - это у них теперь такая логика работы. С учетом того, что в MenuBar сохраняется всего 24 пункта меню между сеансами работы AutoCAD, а cui-файлов содержащих свои POP'ы ты можешь загрузить сколько угодно, то теперь как бы требуется указать какие и в каком порядке ты собираешься POP'ы вставить в MenuBar. Хотя это и непривычно. Раньше достаточно было прописать этот список в при инсталляции в регистратуре и не мучится. Теперь такая схема не работает. sad