Перевод иконок ресурсной dll с bmp на png

Автор Тема: Перевод иконок ресурсной dll с bmp на png  (Прочитано 19432 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Проблема следующая: все иконки меню собраны в dll в формате bmp. В AutoCAD 2017, насколько я понял, прекращена поддержка bmp в иконках, нужно переходить на png. Вернее акад показывает и bmp, но без прозрачности, т. е. выглядит это мягко говоря "не очень".
Как проще выполнить перевод проекта Visual Studio для создания ресурсной dll от bmp к png? Что-то не нахожу вообще информации по созданию dll для AutoCAD, содержащую иконки не bmp, а png.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
А я с png мучаюсь... Взял отсюда http://adn-cis.org/autodesk-developer-day-2016.html
Видимо png можно использовать, но только не в dll.
Спасибо, попробую ico

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Работает. И bmp, и ico можно держать в одной dll, которая подойдет под все версии акада - это очень хорошо)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
И bmp, и ico можно держать в одной dll, которая подойдет под все версии акада - это очень хорошо)
Держать то можно, но имена ресурсов должны отличаться и соответственно должны быть разные CUI/CUIX-файлы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Держать то можно, но имена ресурсов должны отличаться и соответственно должны быть разные CUI/CUIX-файлы.
Они разного типа, одни Bitmap, другие RCDATA, поэтому имена могут быть одинаковые.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Они разного типа, одни Bitmap, другие RCDATA, поэтому имена могут быть одинаковые.
А вот тут я не уверен. Каким образом AutoCAD определит брать ли ему IDI_TRIANGLE32 из раздела BITMAP или IDI_TRIANGLE32 из раздела RCDATA, если в cuix-файле указано IDI_TRIANGLE32?
Т.е. содержимое rc-файла такое допустимо:
Код - INI [Выбрать]
  1. BITMAP16                BITMAP                  "RES\\bitmap16.bmp"
  2. BITMAP32                BITMAP                  "RES\\bitmap32.bmp"
  3. BITMAP16                RCDATA                  "RES\\bitmap16.ico"
  4. BITMAP32                RCDATA                  "RES\\bitmap32.ico"
Но какую из иконок возьмёт AutoCAD если его просят BITMAP32?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Но какую из иконок возьмёт AutoCAD если его просят BITMAP32?
Ну для точного ответа нужно провести тесты на всех акадах)
Из того, что смотрел я:
AutoCAD 2006 - 2017 берут из RCDATA, т.е получается bmp вообще не нужен. На более низких версиях не смотрел, мне не нужно, подозреваю, что будут искать bmp.
А вот BricsCAD точно берет bmp.
Поэтому я и говорю, что вариант с двумя одинаковыми именами в разных типах должен сработать везде, т. е. более надежный и хуже не будет. Каждая версия будет искать свой тип, о котором она знает.
Еще бы для разных тем оформления (темная и светлая) всё в одну dll запихнуть - вообще сказка была бы)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Еще бы для разных тем оформления (темная и светлая) всё в одну dll запихнуть - вообще сказка была бы)
Да ладно. Добавишь ещё одну dll:
- в версиях 2015-2016 для темной схемы подгружается DLL, совпадающая с названием CUIX, для светлой - название с суффиксом "_light". Пример: "MyTools.cuix", иконки для темной схемы: "MyTools.dll", для светлой: "MyTools_light.dll".
Думаю что для AutoCAD 2017 аналогично.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Да ладно. Добавишь ещё одну dll:
Ну да. Только вот опять не по-русски всё: без суффикса в 2015 акаде-это для темной схемы (на пиктограммах цвет хорошо видимый - это белый, для светлой - черный), а в том же 2013-м для темной и светлой пиктограммки не отличаются (вычерчены черным). ИМХО нужно было для светлой схемы без суффикса. Ну это так, заморочки, это я к тому, что скорее всего одним меню не обойтись...
Александр, спасибо за подсказку на счет ico. Честно говоря, до сих пор встречал только информацию о том, что dll делают из bmp. И был сильно удивлен, что уже AutoCAD 2006 знал об RCDATA.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
И был сильно удивлен, что уже AutoCAD 2006 знал об RCDATA.
Насколько я помню и более ранние знали, но с какой версии не помню. Кажется с 2004-ой, но проверить не могу. Просто в своё время просматривал ресурсные dll-ки самого AutoCAD и находил, что стандартные иконки находятся именно в разделе RCDATA, а не BITMAP.
В основном они содержались в файле acadbtn.xmx, а в последних версиях в acadbtn.xmx и acadbtn_light.xmx
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
возможно будет интересно глянуть: http://bushman-andrey.blogspot.ru/2013/08/dll-partial-cui.html

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
возможно будет интересно глянуть: http://bushman-andrey.blogspot.ru/2013/08/dll-partial-cui.html
Теперь можешь статью немного подправить на предмет возможности использования ico-файлов (в том числе и прозрачных) и то, что цвет 192,192,192 в AutoCAD 2017 и последующих больше не воспринимается как прозрачный.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
и то, что цвет 192,192,192 в AutoCAD 2017 и последующих больше не воспринимается как прозрачный.
У меня в AutoCAD 2009 этот цвет на ribbon panel интерпретируется как прозрачный, а на toolbar - нет... В чём может быть затык?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Оказалось, что AutoCAD "сфотографировал" предыдущую версию картинки и после обновления dll обновление было подхвачено только риббонами, но не туллбаром. Выгрузка и повторная загрузка частичного меню не помогает - всё равно туллбар кажет старый вариант.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Перебил значения small image и lage image на инвалидные, нажал apply, получил "облачко с вопросиком", после чего снова переписал значения предыдущими, нажал apply - всё стало отображаться корректно.

Оффлайн VetalBYАвтор темы

  • ADN Club
  • Сообщений: 44
  • Карма: 3
Оказалось, что AutoCAD "сфотографировал" предыдущую версию картинки и после обновления dll обновление было подхвачено только риббонами, но не туллбаром. Выгрузка и повторная загрузка частичного меню не помогает - всё равно туллбар кажет старый вариант.
После подмены dll нужно удалять файл mnr, это скомпилированный файл ресурсов, он сформируется заново.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
После подмены dll нужно удалять файл mnr, это скомпилированный файл ресурсов, он сформируется заново.
Именно так. Необходимо удалять одноимённый mnr-файл, лежащий в том же каталоге, что и mnu/mns/cui/cuix- файл. И это в AutoCAD с незапамятных времён (> 15 лет)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
По теме библиотек с иконками - возможно кто-то не знает о наличии библиотеки от Майкрософт (может пригодиться) https://www.microsoft.com/en-us/download/details.aspx?id=35825

Оффлайн Виталий

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Еще бы для разных тем оформления (темная и светлая) всё в одну dll запихнуть - вообще сказка была бы)
Никогда не делал меню используя dll. Наверно это единственный вариант чтобы сделать разные иконки для светлого и темного меню? Если так, поделитесь полным проектом содержащим все (две) dll. Чтобы сразу по образцу адаптировать свое меню, а то бегая по разным ссылкам трудно понять что к чему.
А еще лучше было бы без этих знаний сделать 2 cuix и их перегружать при изменении переменной "COLORTHEME" если это вообще возможно. Было бы здорово для многих используя только Vlisp добиться того же результата.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Если так, поделитесь полным проектом содержащим все (две) dll. Чтобы сразу по образцу адаптировать свое меню, а то бегая по разным ссылкам трудно понять что к чему.
Еще раз повторюсь: http://adn-cis.org/ispolzovanie-resursnoj-dll-dlya-cuix-s-prozrachnyimi-rastrami.html
Там есть пример проекта:  cui resonly ico.zip
Ты конечно его уже попробовал?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Виталий

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Я не знаю сколько нужно времени чтобы его запустить (не открыавается и не компелируется и еще куча вопросов  где сам cuix и т.п.- не полный проект) и вообще разбираться в этой каше, когда уже есть готовый cuix c кучей png для light режима. Убежден, что проще и быстрее! сделать второй cuix c суффисом _dark или типа того, чем еще одну гору разгребать на ровном месте.

Там для Автодеска элементано было бы сделать в редакторе CUI еще одно поле в Properties для dark/light режима к тому же создаются разные .mnr и _light.mnr для каждого cuix. Но у нас автоматизация почему-то идет в противоположную сторону (для разработчиков).

Когда я задался этой темой меня интересовала больше сама организация решения. Например, есть здоровый готовый cuix (не из 2-3 команд) он должен создаваться, считаю только визуально в Автокаде! А потом, что получается его нужно с нуля воссоздать в формате ресурсов cpp для dll. К тому же в самом CUI редакторе внутри Автокада возможность добавления ICO нет вообще, т.е. дискуссия в этой теме про ICON это только для программистов сишников, а не большинства людей, которые всю жизнь адаптировали меню средствами Автокада.   

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
кознить нилзйа памилавать

Оффлайн Виталий

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Как я понял если неосторожно добавить png'гешку в cuix, то удалить или изменить ее в cuix невозможно, Только ее оставлять (мусор) и добавлять другую, но уже обязательно с другим именем. поскольку CUI интерфейс их не перезаписывает и не удаляет!

Шутка: Если изучить язык cpp, xml, VS IDE и т.п., то ее можно удалить, скомпелировать новый DLL и о чудо, картинка будет удалена - легко и главное надежно.

Если серьезно есть ли возможность ее удалить без VS? 

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
скомпелировать
Программисту настойчиво делать такие грамматические ошибки как-то не "кошерно"...
Если серьезно есть ли возможность ее удалить без VS? 
CUIX - это обычный архив, у которого заменили расширение. Распакуй, измени как тебе нужно и запакуй обратно.



Оффлайн Виталий

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
CUIX - это обычный архив, у которого заменили расширение. Распакуй, измени как тебе нужно и запакуй обратно.
Спасибо, не знал, помогло. Может уважаемые программисты добьете, что подменить в архиве чтобы были разные иконки для светлого и темного режимов. Вижу только причинно-следственную связь в двух файлах ###.mnr и ###_light.mnr. Пытался их подменять но не сработало.
Какие файлы отвечают внутри архива за различие темного и светлого режимов, если они вообще есть там?   

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Может уважаемые программисты добьете, что подменить в архиве чтобы были разные иконки для светлого и темного режимов.
Ничего подменять не надо. Точнее подменять там нечего.
Какие файлы отвечают внутри архива за различие темного и светлого режимов, если они вообще есть там?   
Нет там ничего, чтобы тебя интересовало. Только ресурсные DLL и только так, как было сказано выше. Другое решение - два CUIX-файла в зависимости светлой или тёмной тем.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Виталий

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Кто знает почему вставляешь в cuix png c прозрачным фоном, а в готовом меню прозрачный фон становится черным!? Вчера все было нормально. Вообще в CUI интерфейсе куча ошибок! Топчешься на одном месте, тем более когда сотни bmp конвертируешь в png (слава богу за раз), но потом каждому по отдельности меняешь фон на прозрачный, а в итоге в Автокаде он становится вдруг черным!!!
Высылаю как доказательство файлы. От чего это может зависеть.  Неужели еще и форматы PNG могут быть разными?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Есть такая поговорка: "от дурной головы ногам больно". Сам себе проблемы изобретаешь. Поиск забанили? Ты за то время, что мусолишь эту тему, мог уже сам сто раз найти на форумах этого сайта обсуждения по CUI\CUIX и изображений используемых в них (и по части прозрачности, в т.ч.). Кроме того, в документации полно информации по теме.

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

Перепечатывать здесь тебе то, что уже напечатано в др. темах - сомнительное удовольствие.
« Последнее редактирование: 15-06-2016, 17:02:44 от Андрей Бушман »

Оффлайн Виталий

  • ADN OPEN
  • ***
  • Сообщений: 125
  • Карма: -1
Тему всю читал. О том, что прозрачный цвет может быть в результате черным пояснений не встречал.
У меня все нормально было, а потом может быть другим способом png сделал. Короче если трудно подсказать в чем моя ошибка, сам разберусь.   

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
сам разберусь.
тоже неплохой вариант. Если надоест велосипед изобретать, то поиском можно (неожиданно) обнаружить, что решение проблемы прозрачности уже демонстрировалось на этом форуме. В своих проектах я успешно использую обозначенный способ.