Загрузка значков (икононок)
|
|
sashasold | Дата: Среда, 29.07.2020, 09:04 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Возник вопрос по иконкам Вобщем как я увидел и прочел, внутри файла иконки находятся несколько независимых изображений В библиотеке w9, да и в API, не увидел параметра на указание номера загружаемого изображерия, как загрузить нужное?
Сообщение отредактировал sashasold - Среда, 29.07.2020, 09:08 |
|
| |
haav | Дата: Среда, 29.07.2020, 13:16 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Цитата sashasold ( ) Возник вопрос по иконкам Вобщем как я увидел и прочел, внутри файла иконки находятся несколько независимых изображений В библиотеке w9, да и в API, не увидел параметра на указание номера загружаемого изображерия, как загрузить нужное?
Код #include "window9.bi"
Dim As HICON iconSmall , iconLarge
Dim As integer iEvent
iconLarge = LoadImage(0 , "1.ico", IMAGE_ICON , 256 , 256 , LR_LOADFROMFILE)
iconSmall = LoadImage(0 , "1.ico", IMAGE_ICON , 32 , 32 , LR_LOADFROMFILE)
OpenWindow("",300,10,400,400)
ButtonImageGadget(1,10,10,280,280,iconLarge, BS_ICON)
ButtonImageGadget(2,310,10,50,50,iconSmall, BS_ICON)
Do iEvent=WaitEvent() If iEvent=EventClose Then End Loop
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
sashasold | Дата: Четверг, 30.07.2020, 07:23 | Сообщение # 3 |
Лейтенант
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Ага, значит функция загрузки определяет размер созданного изображения, и загружает иконку такого же или меньшего размера
Вот еще вопрос как это изображение положить в формат изображения FB? Для использования его со стандартными функциями вставки (put) Api функции сложноваты для меня=)
|
|
| |
haav | Дата: Четверг, 30.07.2020, 10:18 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Цитата sashasold ( ) Вот еще вопрос как это изображение положить в формат изображения FB?
Форматом иконок я не интересовался. Простых средств не знаю. Могу лишь подкинуть направление. По линкам ниже на других языках программирования есть коды сохранения иконок. Перед сохранением , все потроха иконок (инфа о цветности, размеры, буфер с пикселями и пр.) должны быть в наличии. Ну а имею всю инфу, дальше думать как преобразовать в формат FB. Возможно эти коды содержат ошибки, тут уж надо самому до всего доходить. Формат иконок наверное изучить придется. В общем, если есть желание , вот ссылки:
http://delphimaster.net/view/1-1166694594
https://www.purebasic.fr/english....aveicon
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
sashasold | Дата: Четверг, 30.07.2020, 11:21 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Ну посмотрю вечером Хотя я не про вот что: после загрузки функцией Api, формат уже загрженного изображения никак не приводится к формату FB ? И еще про задний фон иконок спросить, через FreeImage смог ее загрузить, отображается череый фон никак не могу изменить...
|
|
| |
zamabuvaraeu | Дата: Четверг, 30.07.2020, 12:31 | Сообщение # 6 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Рекомендую сконвертировать все значки в BMP и загружать его.
|
|
| |
haav | Дата: Четверг, 30.07.2020, 12:39 | Сообщение # 7 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Цитата sashasold ( ) Хотя я не про вот что: после загрузки функцией Api, формат уже загрженного изображения никак не приводится к формату FB ?
Как-то некорректно задан вопрос. Думаю "не" в первом предложении лишнее? Если так, то я уже ответил. Могу дополнить.
Для того чтобы привести данные изображения\иконки , загруженного с помощью LoadImage к формату FB.image , нужно: 1) Получить хендл изображения\иконки c помощью LoadImage 2) Получить буфер пикселей с помощью других API (см. ссылки , что я привел выше) 3) Преобразовать формат пикселей (если это будет необходимо) к формату пикселей FB.image 4) Прикрутить этот буфер к изображению FB.image
Я могу привести пример, где это проделывается с изображениями, загруженными с помощью GDI+: http://users.freebasic-portal.de/freebasicru/gdiplusgfx.html Как этот пример будет работать с иконками , не знаю. По идее GDI+ должна загружать иконки, вот только какого размера будут иконки...
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
sashasold | Дата: Понедельник, 03.08.2020, 01:56 | Сообщение # 8 |
Лейтенант
Группа: Пользователи
Сообщений: 41
Статус: Offline
| Итак 1. Твой код у меня не работает )) Код #include "window9.bi"
Dim As HICON iconSmall , iconLarge
Dim As integer iEvent
iconLarge = LoadImage(0 , "1.ico", IMAGE_ICON , 256 , 256 , LR_LOADFROMFILE) iconSmall = LoadImage(0 , "1.ico", IMAGE_ICON , 32 , 32 , LR_LOADFROMFILE)
OpenWindow("",300,10,400,400) ButtonImageGadget(1,10,10,280,280,iconLarge, BS_ICON) ButtonImageGadget(2,310,10,50,50,iconSmall, BS_ICON)
Do iEvent=WaitEvent() If iEvent=EventClose Then End Loop
2. Удалось отобразить иконки через IconDraw Код #include "window9.bi"
Dim As HICON iconSmall , iconLarge
Dim As integer iEvent Dim hwnd As hwnd iconLarge = LoadImage(0 , "1.ico", IMAGE_ICON , 256 , 256 , LR_LOADFROMFILE) iconSmall = LoadImage(0 , "1.ico", IMAGE_ICON , 32 , 32 , LR_LOADFROMFILE)
hwnd=OpenWindow("",300,10,400,400) 'ButtonImageGadget(1,10,10,280,280,iconLarge, BS_ICON) 'ButtonImageGadget(2,310,10,50,50,iconSmall, BS_ICON)
WindowStartDraw(hwnd) IconDraw(100,100,iconLarge) IconDraw(50,50,iconLarge) 'FillRectDraw(0,0,&hffffff) StopDraw
Do iEvent=WaitEvent() If iEvent=EventClose Then End Loop
но, как видно LoadImage грузит их в одинаковом размере. т.е. не работает как надо (по крайней мере у меня, ну как обычно=) ) Win7 64bit 3. Нашел вот статью, поковыряю иконки на днях http://www.comprice.ru/articles/detail.php?ID=42603 хотя странно что нет нормальных, распрастраненных средств...
Сообщение отредактировал sashasold - Понедельник, 03.08.2020, 02:01 |
|
| |
haav | Дата: Понедельник, 03.08.2020, 06:39 | Сообщение # 9 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Цитата Итак 1. Твой код у меня не работает ))
У меня работает. Ты либо запускал код , не имея рядом иконку. Либо используешь не самую последнюю версию библиотеки.
Цитата Удалось отобразить иконки через IconDraw
Да, она отображает , но сама по себе эта функция в своей основе имеет API из первых виндоузов , когда иконки имели как правило размеры 16х16 , 32х32. Возможно она просто не умеет работать с иконками большого размера или же заточена четко под определенный размер.
Цитата хотя странно что нет нормальных, распрастраненных средств...
Ничего странного. Иконки не настолько часто используемые компоненты, чтобы им уделяли так много внимания. А там где они используются (в заголовках окон, кнопках, listview ...) , там поддержка иконок на уровне несложных WINAPI нормально реализована.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
|