Тема: Мои иконки стали черными (влияние Acad2004 на Acad2002)

Штука вот какая. У меня было свое меню, со своими иконками. Иконки находятся в DLL.
Ковырялся с чем-то и из 2002 меню выгрузил.
Поставил 2004 Acad, подгрузил туда меню - нормально.
Подгрузил меню после этого в Acad2002, а там все мои иконки как у Малевича - суть черные квадраты.
В чем прикол, люди?

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

Дополнение к вышесказанному:
Если удалить файлы MNS,MNC,MNR и оставить только MNU и DLL, то в 2002 Acad все грузится нормально.
Но после следующего запуска 2004 - в 2002 все опять черными квадратами.
Может у меня в DLL-ке что не так, хотя кроме файла ресурсов там ничего нет, да и в 2002 (без 2004) и в самом 2004 она работает как часы.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

Оно конечно и отдельно для каждого Acad-а можно сделать свое меню, но это не очень удобно. Да и вообще у меня рабочий пример перед глазами - AcadVar Васильченко Алексея (у него похоже все и всегда работает). Там иконки тоже в DLL, никаких особенностей в MNU, MNS-файлах вроде нет, а тем не менее - иконки "показывают" в обоих CAD-ах.
В общем вот такие пироги.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

Дело не в DLL. Она в принципе вообще не нужна, после того, как уже созданы *.mnr и *.mnc, а нужна только для их создания (если, конечно, там только иконки и больше ничего). Проблема в том, что *.mnr и *.mnc разные для ACAD2000-2002 и для ACAD2004. И если 2004 еще поймет *.mnr и *.mnc, созданные под 2000, но переделает их под себя, и обратно 2000 их уже не поймет.
Лучше, конечно иметь разные меню для разных ACAD. Более простой (но более медленный) вариант - это в *.mnl файле написать:

(if (findfile "acadvar.mnc")
  (vl-file-delete (findfile "acadvar.mnc"))
);if
(if (findfile "acadvar.mns")
  (vl-file-delete (findfile "acadvar.mns"))
);if

*.mns, наверное, убивать и не обязательно, достаточно одного *.mnc. Повторюсь, это более медленный вариант, т.к. каждый раз при запуске ACAD, меню будет сначала компилироваться, а уже только потом загружаться.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

> leha
Спасибо, Алексей. Попробовал Ваш вариант с удалением *.MNC и все заработало. Пробовал еще удалять просто *.MNR, но так хуже, т.к. панели становятся ненастраиваемыми.
А вообщее, как это не печально, но наверное лучше действительно разные меню для разных ACAD иметь.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

> GRF
Все таки продолжу, боюсь слишком напугал медленностью этого варианта.
Все зависит и от данного, конкретного меню (его размеров), и от скорости железа, и от (как бы правильнее сказать) типа программы.
Если меню относительно небольшое, железо более-менее и программа в основном для себя или ближайших коллег по работе, то это вполне приемлемый вариант. Компиляция меню типа ACADVar (четыре пункта падающего меню, да пара кнопок) даже на медленной (по современным меркам) машине занимает какие-то доли секунды. И это практически незаметно, да и сказывается только при запуске ACAD, т.е. при открытии первого файла.
Другое дело, если меню большое, и если предполагается, что программа будет как-то распространяться/продаваться. Тогда да: для серьезной программы потеря даже пол-секунды на в общем-то пустом месте - вещь недопустимая.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

> leha
Да дело скорее все-таки не в скорости (т.к. для заметного замедления нужно очень большое меню на очень слабой машине - а это сочетание не так уж часто встречается по нынешним временам), а в гибкости настройки меню, т.к. одно меню - оно и в Африке одно (для всех Acad-ов). Но это уже наверное другая песня. Спасибо за ответ, Алексей.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

Подымал эту тему здесь https://www.caduser.ru/forum/topic5916.html но ответа не было. Проще всего вылечить сделав копию своего меню с другим именем. Два меню под разные автокады. При изменении меню изменять и его копию.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

Vova пишет:

При изменении меню изменять и его копию.

Если так, то гораздо лучше вариант с удалением файла *.MNC. Алексей плохого не посоветует, у него, по моему, талант находить кратчайшие пути.
А вот если говорить о различной настройке меню для разных Acad-ов, то здесь должны быть два абсоютно разные меню без всяких "изменить копию" и т.д.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

Итак, свое меню, побывавшее в 2004, при запуске в 2002 дает черные квадраты на кнопках. То есть файлы mnr mnc немного испортились, применительно к 2002. Предлагается перед запуском 2002 их предварительно удалить, чтобы они скомпилировались снова. В принципе, обновления этих файлов можно добиться простым пересейванием файла mns. (перед запуском 2002). По трудоемкости легче удаление-не надо открывать MNS. Но еще легче иметь разные меню. Беспокоится теперь надо будет только если, например, работая в одном из автокадов, вы создали новую кнопку. Чтобы перенести ее в меню другого автокада легко пересейвать этот mns в другой. Этот вариант удобен и для случая, когда оба автокада открыры одновременно

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

> Vova
По моему, мы говорим о несколько разных вещах.
Одно дело, когда постоянно работаешь с каким-то меню (чего-то добавляешь, убираешь, изменяешь), когда есть возможность постоянно следить за этим меню, и когда (даже если копии этого меню стоят у коллег по работе) легко и быстро пересохранить один файл и раздать всем кому нужно его копии. Тогда можно выбирать, что более удобно. И каждый из вариантов имеет право на существование.
Я же говорил (и так понял, что > GRF (2004-02-21 00:57:24) спрашивал именно об этом) о том, как сделать так, чтобы одно и то же меню без проблем работало в обоих ACAD. Т.е. сделал программу, отдал ее и забыл. И если пользователь потом и поставит себе параллельно другую версию ACAD, то у него все равно все будет работать, и он не будет Вас доставать вопросами о "черных квадратах".
Пока об этом говорить, конечно, рано, но ведь когда-то выйдет ACAD2006 (уже ходят слухи о 2005), ACAD2008 и т.д. И для каждого нужно будет делать соответствующую копию. А так один раз сделанная программа будет работать и работать, если в новых ACAD не выдумают чего-то уж совсем неразумного.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

leha> Конечно, если возможно сделать так, чтобы меню было независимо от версии, то почему-бы и нет. Как раз сегодня я установил вновь 2004. Все произошло, как описано выше. В 2004 кнопки вышли, а в 2002 появились черные квадраты. Я закрыл 2002 и пересейвал mns. После этого в 2002 все стало нормально. Затем сделал копию меню с именем файла 2004 и загрузил его. Оба автокада параллельно работают. А будут ли оба работать при одном универсальном меню? Я этого не проверял.
У меня другая проблема: иногда меню mns вдруг превращается в тип realone player. Расширение остается mns, а картиночка превращается в плэйерскую. Меню в результате не загружается

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

to All
Я действительно спрашивал именно о том, как заставить одно меню работать под разные ACAD-ы и еще раз повторюсь, что исходя из поставленного мною вопроса считаю вариант Алексея единственно верным.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

Единственное меню для всех версий делается так:
1. В специальном каталоге (не на путях доступа) лежит исходный mnu (один для всех версий)
2. В каталоге пользователя  создается специальная папка для Автокадовских файлов. В нее укладываются общие для всех версий файлы (lin и т.п.)
3. В этой папке создаются подкаталоги для каждого номера версии (14, 15...34)
4. В профиле в путь поиска включается сначала общая, а потом "версионная" папка. У каждой версии свой ключ в реестре, поэтому путаницы не происходит.
5. Имеется функция, возвращающая версию в виде строки. А далее любые файлы загружаются с помощью функций, учитывающих версию.
Таким образом редактируется всегда один файл меню. Полная перегрузка выполняется функцией, которая удаляет ненужные файлы, копирует в версионный каталог исходник меню и перегружает. Примерно так

(defun ru-menu-reload ()
  (vl-file-delete (strcat (ru-dirs-acad NIL) "ruCAD.mnc"))
  (vl-file-delete (strcat (ru-dirs-acad NIL) "ruCAD.mnr"))
  (vl-file-delete (strcat (ru-dirs-acad NIL) "ruCAD.mns"))
  (vl-file-delete (strcat (ru-dirs-acad NIL) "ruCAD.mnu"))
  (vl-file-copy   (ru-file-template "ruCAD.mnu") (strcat (ru-dirs-acad NIL) "ruCAD.mnu"))
  (ru-menu-ru-load)
  (princ "\nМеню перегружено и перекомпилировано\n")
  (princ)
)
(defun ru-menu-ru-load ()
   (ru-obj-set-preferences-key
    "Files"
    "MenuFile"
    (strcat (ru-dirs-acad NIL) "ruCAD")
  )
  (ru-menu-diesel)
  (princ)
)

ru-menu-ru-load - просто загружает меню без перекомпилирования
Таким образом откомпилированные файлы меню разных версий не пересекаются, а автор редактирует в одном месте. Несовместимые команды для разных версий в меню блокируются специальной функцией.
Все это делается программно, формирование путей и прочая подготовка - программой-инсталлятором. DLL с собственными иконками надо дублировать для каждой версии. Заодно можно избавиться от "мутных" иконок 2004, если не нравятся.

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

есть ключ к acad2004

Re: Мои иконки стали черными (влияние Acad2004 на Acad2002)

Мои иконки стали черными

Дык сглаз это, али колдавство какое. Тут и медитировать не надо.