
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[34.239.148.127] |
![]() |
|
Сообщ.
#1
,
|
|
|
Моя программа генерирует html-файлы-отчёты. Очень не хотелось бы таскать вместе с exe'шником стопку картинок, испольуемых в этом отчёте...
Нашёл здесь, на форуме инфу про протокол res. Но все мои попытки добраться до ico-файла были тщетны. Итак: Есть папка, в ней лежит сама программа с ресурсом и готовый html-отчёт. В ресурсах программы есть строка: ![]() ![]() IconMain ICON "C:\\Documents and Settings\\Алексей\\Мои документы\\Visual Studio 2008\\Projects\\FolderAccessManager\\Icon.ico" В html: ![]() ![]() <img src="res://FolderAccessManager.exe/IconMain" width=24 height=22 border=noborder /> Пробовал и так: ![]() ![]() <img src="res://FolderAccessManager.exe/ICON/IconMain" width=24 height=22 border=noborder /> Но картинка не отображается... |
![]() |
Сообщ.
#2
,
|
|
Попробуй
res://FolderAccessManager.exe/#3/#_тут_значение_IconMain |
Сообщ.
#3
,
|
|
|
какбэ
http://msdn.microsoft.com/en-us/library/aa767740%28VS.85%29.aspx Добавлено другой вопрос - как избавится от привязки к имени .exe ? передавать в htm имя .exe и там скриптом править все урлы? |
Сообщ.
#4
,
|
|
|
Вобщем-то цель - напечатать содержимое TreeView, я уже создавал тут подобную тему.
Решил перегонять TreeView в html, нашёл хороший скриптик для создания дерева, переписал его на C++. Но дерево-то из картинок состоит... Значит их надо где-то хранить. Но в идеале программа должна представлять собой всего 1 exe'шник. Вот я и вспомнил про Res://. То-есть отчёт живёт на диске только чтобы его 1 раз напечатать. Может даже и на диск-то сохранять его не надо, и открыть его можно прямо из памяти IWebBrowser'ом... Но мне кажется, что это лишнее усложнение. Просто файлик можно удалять при закрытии программы, если он создан... P.S. Поздравляю всех с Наступающим Новым Годом! |
Сообщ.
#5
,
|
|
|
Цитата B.V. @ Попробуй res://FolderAccessManager.exe/#3/#_тут_значение_IconMain Пробовал и так: ![]() ![]() <img src="res://C:%5CFolderAccessManager.exe/#3/#1" /> <img src="res://FolderAccessManager.exe/#3/#1" /> <img src="res://FolderAccessManager.exe/#3/#10" /> (во втором случае exe был и в корне диска C, а в третьем - id другой иконки... Но в любом случае вместо картинки - крестик... |
Сообщ.
#6
,
|
|
|
Насколько я знаю для res-ссылкок допустимы только абсмолютные пути. Так html генерируется, с этим не должно быть проблем. Т.е. должно быть что-то подобное:
![]() ![]() <img src="res://Допустим C:\\Program Path\\FolderAccessManager.exe/IconMain.ico" width=24 height=22 border=noborder> закрывающий слеш не нужен, указание расширения обязательно. По результатам экспериментов работает только в IE и др. на его основе. Лиса, опера, хром res-ссылки не воспринимают. Хотя может быть я чего-то не знаю, как их заставить читать из .exe... |
Сообщ.
#7
,
|
|
|
Цитата arj99 @ указание расширения обязательно расширение чего? Там ведь не имя файла, а ID ресурса. Или всё-таки имя файла? Цитата arj99 @ C:\\ И почему "\\", это ж не C++, а... Вобщем в msdn'е написано, что вместо бэкслэшей нужно писать %5C. Вобщем не работает к сожалению и такой вариант... А в .chm картинки можно хранить? Может лучше не html+картинки, а что-нибудь одно, целиковое? |
Сообщ.
#8
,
|
|
|
Цитата Алексей_Л @ Может лучше не html+картинки, а что-нибудь одно, целиковое? mht? Все лежит в одном файле, бинарные данные закодированы в Base64. |
Сообщ.
#9
,
|
|
|
Лёх, если тебе еще тема эта интересна, я немного поэкспериментировал по ней, расскажу.
По поводу, двойного слеша не обращай внимания, загнался я конечно. По поводу расширения и имени файла, конечно ты прав, там ID ресурса, расширение не нужно. Просто однажды тоже с этим возился, а в некоторых случаях там если за именем ресурса добавить расширение как для имени файла, браузер все равно это хавает. И как-то так совпало, что я указав расширение и сделав что-то там еще получил желаемый результат - подумал расширение обязательно. По поводу того что ты собираешься .chm или .mht использовать не понимаю как это если ты их генерируешь... их ведь компилировать еще надо... или разбираться с форматом, не, игра не стоит свеч. В общем из нынешних экспериментов полагаю, что при res-адресации поддерживаются только bmp, jpeg, gif и png. А иконки просто-напросто не поддерживаются. И кстати, на подобные упоминания натыкался в интернете, но теперь уже ссылку лень искать. Хотя, странно, на msdn'e не заметил ремарок об этой специфике. Если ты их из-за прозрачности хотел использовать, то в принципе png и gif помогут. В общем кое-что получилось, если нужно могу в билдере проект соорудить если устроит. |
Сообщ.
#10
,
|
|
|
Еще можно картинки прямо в HTML прописывать: "The 'data' URI scheme".
|
Сообщ.
#11
,
|
|
|
Цитата arj99 @ bmp, jpeg, gif и png. ммм... Спасибо, arj99! Вот так получилось: ![]() ![]() res://C:%5CFolderAccessManager.exe/#2/#111 с относительным путём не работает, хотя где-то читал, что может, точно читал... Цитата vst @ прямо в HTML Интересно, но если у меня в html дерево, скажем, на 300 эл-тов, 300 раз там будет одна и та же картинка вставлена... Сомнительно это всё, хотя можно поизвращаться и сделать картинки фоном ячеек таблицы, и картинка будет просто зависеть от одной строчки в css'ке. Посмотрю, поразбираюсь, спасибо. Добавлено ~~~~~ Мда... заменил я иконки на битмапы(*.bmp) и встретился с неприятной особенностью: картинки у меня 32x32, для печати - самое оно, а вот для программы - крупновато, иконки сами подстраивались под размер ImageList'a, тоесть уменьшались, а вот bmp'шки не уменьшаются, а обрезаются! Как бы выйти из такой ситуации... Можно конечно хранить в ресурсах 2 комплекта картинок - ico для программы и bmp для html... но я думаю можно и проще? Гружу так: ![]() ![]() HIMAGELIST TreeImageList; TreeImageList = ImageList_Create(16, 16, ILC_COLOR32, 3, 0); //16x16 - требуемый размер, настоящий размер - 32x32 for(int i=0; i<3; i++) { HBITMAP hBmp = LoadBitmap(App.hInst, MAKEINTRESOURCE((i+1)*10)+1); //Это я потом перепишу ;) ImageList_Add(TreeImageList, hBmp, NULL); } TreeView_SetImageList(GetDlgItem(hWnd, IDC_FOLDERTREE), TreeImageList, TVSIL_NORMAL); |
Сообщ.
#12
,
|
|
|
Вот нашёл такую ф-цию:
![]() ![]() HBITMAP Application::ResizeBitmap(HBITMAP hSrcBmp, int cx, int cy) { if (!hSrcBmp || !cx || !cx) return NULL; HBITMAP hBmpRet = ::CreateBitmap(cx, cy, 1, 32, NULL); HDC hDC = ::CreateCompatibleDC(NULL); HBITMAP hOldBmp = (HBITMAP)::SelectObject(hDC, hBmpRet); HDC hSrcDC = ::CreateCompatibleDC(NULL); HBITMAP hOldSrcBmp = (HBITMAP)::SelectObject(hSrcDC, hSrcBmp); BITMAP bmpinfo; ::memset(&bmpinfo, 0, sizeof(BITMAP)); ::GetObject(hSrcBmp, sizeof(BITMAP), &bmpinfo); ::StretchBlt(hDC, 0, 0, cx, cy, hSrcDC, 0, 0, bmpinfo.bmWidth, bmpinfo.bmHeight, SRCCOPY); ::SelectObject(hDC, hOldBmp); ::SelectObject(hSrcDC, hOldSrcBmp); ::DeleteDC(hDC); ::DeleteDC(hSrcDC); return hBmpRet; } Но качество уменьшенных ей битмапов хуже, чем качество автоматически уменьшенных ico'нок... Может правда просто хранить 2 комплекта иконок... bmp для html, а ico для программы? |
Сообщ.
#13
,
|
|
|
Цитата Алексей_Л @ Но качество уменьшенных ей битмапов хуже ну, дык, сглаживание укажите (SetStretchBltMode) |