![]() |
|
![]() ![]() ![]() |
|
artsb |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Как-то столкнулся с проблемой связанной с TResourceStream. Сейчас решил разобраться, но что-то сам никак...
Вот это отрабатывает отлично:
И другие функции, типа ExtractIcon, тоже отлично работают. Вот так, работать не хочет:
Вылетает AV - "Resource <resource name> not found". Что это за трабла? Добавлено через 11 минут и 12 секунд "Раскопал" реализацию конструктора. Там первым делом проверяется наличие ресурса с помощью FindResource. Поле таких действий:
resH равно NULL. Похоже всё дело в этой функции... -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||||||
|
|||||||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
Под именем иконки обычно скрывается IconGroup, где хранится информация о доступных иконках.
Функция LoadIcon парсит этот ресурс (подбирает иконку с необходимым размером и кол-вом цветов), определяет идентификатор иконки для извлечения из ресурса RT_ICON и извлекает её. Присоединённый файл ( Кол-во скачиваний: 16 ) ![]() |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
586, спасибо. Но я так ничего и не понял. Можно подробнее?
С RT_GROUP_ICON действительно лучше. Но тоже вылетает AV: "exception class EOutOfResources with message 'Не удаётся найти указанный файл'". Какой он файл найти не может ![]() Размер потока при этом равен 20 байт, хотя истинный размер иконки 5 Кб. PS а ведь я пробовал использовать флаг RT_GROUP_ICON. Но разницы между AV не замечал. Это ж как я задолбался... ![]() Это сообщение отредактировал(а) artsb - 29.12.2009, 19:43 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Кажись понял о чём вы говорили.
Вот что у меня: ![]() Тем не менее, при попытке обратиться к иконке по её идентификатору, получаю стандартную виндовую иконку приложения:
![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
Растр иконки можно загрузить так:
Но это растр - заголовка в нём нет. Без заголовка Icon->LoadFromStream не будет грузить иконку. Вот пример, как загружать иконку с помощью базовых API функций - http://msdn.microsoft.com/en-us/library/ms..._Icon_Resources - код сложноватый. Лучше всего загружать иконку с помощью LoadIcon или с помощью LoadImage. В LoadImage можно указать размер иконки, в отличии от LoadIcon. |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Интересно. А почему так не работает:
Точнее, что-то грузится из ресурсов (а может и не из них), но что? Да проблема не в том, с помощью чего загрузить. Я просто хочу понять что за чудо - TResourceStream. ![]() -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
RT_GROUP_ICON это список иконок (имена ресурсов). Самих иконок тут нет. Иконки есть в RT_ICON
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
LoadFromStream ожидает, что формат иконки будет как у файла .ico. Отсюда и проблемы. Вот так грузится нормально:
Это сообщение отредактировал(а) 586 - 29.12.2009, 20:58 |
|||
|
||||
artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Скорее всего так оно и есть. Иначе как объяснить, что в потоке только 20 байт. Ну эт понятно. ![]() Кстати, вы были правы на счёт битмапа. Но не совсем. ![]() ![]() В общем, своял такую функцию:
Результат: ![]() Но что же хранится до 40-го байта... И не буду же я каждый раз так извращаться если хочу достать иконку из ресурсов используя TResourceStream. Тем более, здесь есть огромный минус: в Image будет битмап, а не иконка. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
Как ни странно BitmapInfoHeader Добавлено через 3 минуты
Можно получить хэндл при помощи LoadImage или LoadIcon и присвоить его созданному экземпляру TIcon. Icon->handle = ... -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Наверное.
Это я знаю. Так работает. И ExtractIcon работает и т.д. Но я хотел разобраться именно с TResourceStream... -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
И всё-таки:
Что хранится в потоке после такой нехитрой операции:
Вывод в Memo показал, что это крякозяблы, а значит явно не текст. Странный битмап, однако. При попытке сделать следующее:
отхватил AV. Хотя, наверное, так и должно быть. В обычном битмапе же не хранится информация об альфа канале (или я не прав?). Что же это тогда за битмап? -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 26 Всего: 459 |
может и храниться, но обычный битмап имеет еще BitmapFileHeader, а тут его нет, так что нечего удивляться. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
А вот если при создании ресурса, присвоить ему какой-нибудь свой тип, например "MY_ICON_TYPE", то всё работает отлично:
Странно. Почему так... Может при обычном типе ("ICON") она сохраняется как-то по особенному... Это сообщение отредактировал(а) artsb - 30.12.2009, 18:48 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |