Получить доступ из Resources к Bitmap

Автор Тема: Получить доступ из Resources к Bitmap  (Прочитано 12812 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Приветствую! Наконец-то решился на создание первого плагина на .NET. До этого имеется определенный опыт программирования на VBA. Изучив кое какие теоретические азы по .NET, практическое применение пока к сожалению вызывает слишком много вопросов. Теперь ближе к сути вопроса... В качестве первой программы я для себя выбрал "Создание собственной вкладки на ленте". Опираясь на несколько примеров из интернета, научился создавать кнопки, но прикрутить к ним собственную иконку не получается. Подскажите как же быть? Является ли верным подход включения иконок в раздел "Resources", с указанием свойства Build Action -> Resource?
На данный момент пытаюсь осуществить это через функцию (нашел тут: http://habrahabr.ru/post/263373/):
Код - C# [Выбрать]
  1. System.Windows.Media.Imaging.BitmapImage LoadImage(string ImageName)
  2.         {
  3.             return new System.Windows.Media.Imaging.BitmapImage(
  4.                 new Uri("pack://application:,,,/ACadRibbon;component/" + ImageName + ".png"));
  5.         }
Которую нагло перегнал через конвертер, т.к. иначе вообще не представляю как подступиться. Получилось вот что:
Код - vb.net [Выбрать]
  1.         Function LoadImage(ImageName As String) As System.Windows.Media.Imaging.BitmapImage
  2.             Return New System.Windows.Media.Imaging.BitmapImage(New Uri("pack://application:,,,/ACadRibbon;component/" + ImageName + ".png"))
  3.         End Function
Также пытался использовать информацию отсюда "https://support.microsoft.com/en-us/kb/324566" - безрезультатно.

Код целиком:
Извините, вам запрещён просмотр содержимого спойлеров.

ps Не судите строго. Я только учусь. :)


« Последнее редактирование: 21-10-2015, 15:36:16 от Александр Ривилис »

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Получить доступ из Resources к Bitmap
« Ответ #1 : 21-10-2015, 12:12:36 »
Цитата: Modis
создать файл АПИ (cui) со своей лентой и подгружать его. На мой взгляд самый плохой и проблемный вариант. ИМХО
А на мой взгляд - это самый простой и целесообразный вариант. Вот глянь.

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

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: Получить доступ из Resources к Bitmap
« Ответ #2 : 21-10-2015, 12:18:51 »
Огромное спасибо! Особенно за оперативность! Буду изучать.

А на мой взгляд - это самый простой и целесообразный вариант. Вот глянь.
Изучил. Но там скорее подспорье для того, чтоб создать ленту другим способом и подробное описание настроек, но ни одной строчки кода. Название говорит само за себя "Создание DLL файла ресурсов для Partial CUI файла", об этом пока речь не идет. Моя задача гораздо скромнее: "Занести в значение переменной vb.net информацию объекта типа "icon.png", который изначально хранится на жестком диске, но так чтоб он остался в сборке .dll "
« Последнее редактирование: 21-10-2015, 12:56:23 от art_rrc »

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Получить доступ из Resources к Bitmap
« Ответ #3 : 21-10-2015, 13:00:02 »
http://habrahabr.ru/post/263373/

И еще сто раз готов повторить - VB.Net - ФУ ФУ ФУ!!!

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

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: Получить доступ из Resources к Bitmap
« Ответ #4 : 21-10-2015, 13:07:53 »
Modis, Прекрасная статья! Ссылка на нее есть кстати в посте #1. ;) С наскока от VBA сразу на C# оказалось сложновато, пока решил подняться на промежуточную ступеньку vb.net. Но не хотелось бы отдаляться от темы...

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Получить доступ из Resources к Bitmap
« Ответ #5 : 21-10-2015, 13:19:20 »
Цитировать
В качестве первой программы я для себя выбрал "Создание собственной вкладки на ленте".
Возможно я тебя не верно понял, а понял я тебя сначала так: мол тебе нужно, наиболее простым и быстрым способом [не важно каким], создать для своего плагина файл меню с лентами, "туллбарами", "палетками" и т.д. который будет подгружаться в AutoCAD. Это легко и быстро делается при помощи "родного" визуального инструмента (т.н. "батоно-кидательство"), имеющегося в AutoCAD (присутствует на скринах в моей заметке) без какого-либо программирования. На выходе, всего за пару-тройку минут работы, получаем файл CUI или CUIX (зависит от версии AutoCAD). Моя заметка предполагает, что читатель знаком с этим "родным" функционалом AutoCAD, а если нет, то в состоянии нажать F1 и прочитать об этом в справке AutoCAD.

Но если целью является не наиболее быстрый и простой сиюминутный способ, но как сделать это именно программно тогда, наверное, да - смотри код Модиса (правда я пока не читал его, а лишь просмотрел картинки конечных результатов).

Но там скорее подспорье для того, чтоб создать ленту другим способом и подробное описание настроек, но ни одной строчки кода.
Нет, это подспорье на тему того, как все ресурсы, необходимые CUI файлу запихнуть в один DLL, вместо того, чтобы держать рядом кучу bmp и прочих картинок.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Получить доступ из Resources к Bitmap
« Ответ #6 : 21-10-2015, 13:27:58 »
New Uri("pack://application:,,,/ACadRibbon;component/" + ImageName + ".png")
Ошибка в этой строке, т.к. неправильно задан путь. В моем примере картинки лежали в корневом каталоге, а у вас в папке Resources...
Вот это почитайте
Modis, Прекрасная статья!
Тогда плюсуй мне карму  ;D ;D ;D
С наскока от VBA сразу на C# оказалось сложновато, пока решил подняться на промежуточную ступеньку vb.net
Я это проходил - тоже сначала на VB.Net пробовал. Результат один - потеря времени ))

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

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: Получить доступ из Resources к Bitmap
« Ответ #7 : 21-10-2015, 13:43:23 »
Видимо плохо сформулировал поставленные цели. Постараюсь исправиться:
Цитировать
Это легко и быстро делается при помощи "родного" визуального инструмента (т.н. "батоно-кидательство"), имеющегося в AutoCAD (присутствует на скринах в моей заметке) без какого-либо программирования.
Все верно. И мне эта тема неплохо знакома (как пример, прикрепляю старый скрин ленты). Но для среднестатистического пользователя это темный лес. А должно быть так.. я отправляю .dll-файл стороннему пользователю  и при загрузке через "netload" все панели и кнопки создаются сами, все готово к работе.
Немного не понимаю, чем же этот способ вы сочли неэффективным, код составляет с десяток строк, а функционал что надо!
Modis, Плюсанул! Огромное спасибо за ссылки!

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Получить доступ из Resources к Bitmap
« Ответ #8 : 21-10-2015, 13:52:22 »
Немного не понимаю, чем же этот способ вы сочли неэффективным, код составляет с десяток строк, а функционал что надо!
Я не писал, что он "неэффективен". Я писал, что создать меню "родными" средствами акада будет быстрее и проще, если знаком с родным, акадовским дизайнером меню. Во всяком случае мне это проще и видится более удобным способом.

Но для среднестатистического пользователя это темный лес.
У тебя какое-то невесёлое мнение о "среднестатестическом пользователе". :) Тёмный лес это только для деревянного пользователя. Почти все мои юзеры (около 300 человек) знают как загружать менюшки.

А должно быть так.. я отправляю .dll-файл стороннему пользователю  и при загрузке через "netload" все панели и кнопки создаются сами, все готово к работе.
Ты легко можешь сделать так, что в твоём коде  загрузка твоей менюшки будет выполняться автоматически, при загрузке твоей DLL.

Оффлайн Doublefish

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Re: Получить доступ из Resources к Bitmap
« Ответ #9 : 21-10-2015, 14:34:30 »
Я, например, пришел к выводу, что проще сделать один файл cuix вручную, запихав в него всё, и затем в xml плагина прописать одну строку с его загрузкой, чем делать отдельный файл ресурсов в виде dll и не пихать эти иконки в dll плагина.

Хотя наверное это зависит ситуации, если всего одна иконка, то возможно проще всё в один файл dll плагина запихать и всё.

VB.Net - false, C# - true

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Получить доступ из Resources к Bitmap
« Ответ #10 : 21-10-2015, 14:36:17 »
Хотя наверное это зависит ситуации
Например от такой: AutoCAD 2009 не умеет работать с CUIX. Именно эта версия акада используется в нашей организации. Я указывал на это в заметке, на которую давал ссылку.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Получить доступ из Resources к Bitmap
« Ответ #11 : 21-10-2015, 14:39:18 »
Хотя наверное это зависит ситуации
Например от такой: AutoCAD 2009 не умеет работать с CUIX. Именно эта версия акада используется в нашей организации. Я указывал на это в заметке, на которую давал ссылку.
Не только. У меня, например, надстройка (ну мой ModPlus) сделана в виде плагиного приложения - функции подключаются/отключаются. Поэтому обойтись одним файлом cui(x) не получится... А файлы иконок так вообще хранятся в самих подключаемых функциях

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

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: Получить доступ из Resources к Bitmap
« Ответ #12 : 21-10-2015, 14:46:56 »
Ну ни в какую... Хотя возможно нужно просто отдохнуть и продолжить со свежей головой. Хотя на данном этапе появился конкретный вопрос: "Пространство имен System.IO имеет какое либо отношение к решении данной задачи?" А то в ошибке на него программа ссылается, но всевозможные вариации с подключением/отключением, прописыванием в Imports на первый взгляд никакого влияния на работу не оказывает.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Получить доступ из Resources к Bitmap
« Ответ #13 : 21-10-2015, 14:52:40 »
У вас проект называется ну никак не art_Ribbon  ;)

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

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: Получить доступ из Resources к Bitmap
« Ответ #14 : 21-10-2015, 15:13:14 »
У вас проект называется ну никак не art_Ribbon  ;)
Спасибо за бесценные советы. Но переименование к результату не привело. Может быть у кого-то есть возможность  мой код у себя для теста запустить?
ps отлично представляю, какие элементарные и стыдные вопросы задаю, просто нахожусь в самом начале изучения и даже самые базовые вещи представляются непреодалимыми проблемами..