Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2014, 20:07   #11
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Ну так и у меня те же свойства. А свойства ListView можно? Я его тоже динамически создаю просто.
Xo66um вне форума Ответить с цитированием
Старый 14.08.2014, 20:12   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Какие там свойства, только LargeImage изменил. Свойства ImageList выставить до загрузки иконок
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.08.2014, 20:16   #13
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Странно, сейчас попробовал через палитру создать оба компонента и в OnCreate добавил Item, все в порядке. А почему с динамически создаваемым ListView такая проблема?

Код:
 ListView := TListView.Create(Self);
 with ListView do
  begin
   Parent := Form1;
   ViewStyle := vsIcon;
   Top := 8;
   Left := 8;
   Width := 500;
   Height := 400;
  end;
 ListView.LargeImages := ImageList;
Xo66um вне форума Ответить с цитированием
Старый 14.08.2014, 20:22   #14
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

А как ты создаешь ImageList? И главное, как ты в него иконку грузишь?

К сожелению пора идти спать, но на вскидку:
может помогут небольшие танцы с бубном и работа с иконками напрямую через API-шные ф-ии аля какздесь (2010.12) Полупрозрачная иконка.zip

Последний раз редактировалось Sibedir; 14.08.2014 в 20:49.
Sibedir вне форума Ответить с цитированием
Старый 14.08.2014, 20:28   #15
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Нене, ImageList точно в порядке, т.к. что с динамическим, что с палитры компонентов - одинаково отображаются значки в ListView. А вот если скажем динамический ImageList и ListView с палитры - то все нормально. С чем это связано?

Хотя и тут есть грабли. Значок в ListView (с палитры) рисуется на белом фоне, на "проблемных" участках. Попробуйте у ListView выставить фон черным цветом, то это видно будет.

Прикрепил исходник динамически создаваемых компонентов.

Цитата:
К сожелению пора идти спать, но на вскидку:
может помогут небольшие танцы с бубном и работа с иконками напрямую через API-шные ф-ии аля какздесь
Спасибо, завтра попробую, может что и получится. Тоже баиньки пора
Но наверное лучше просто в OnCustomDrawItem рисовать нужные иконки... В общем, не знаю)
Вложения
Тип файла: zip dynLV_test.zip (4.0 Кб, 8 просмотров)

Последний раз редактировалось Xo66um; 15.08.2014 в 06:02.
Xo66um вне форума Ответить с цитированием
Старый 15.08.2014, 06:19   #16
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Xo66um, дело не простое. Нужен спец по виндам и апям.
Короче. Беру твою иконку и назначаю как иконку для папки на рабочем столе:
16bit.jpg
Меняю свойства экрана на 32-х битные цвета и опля:
32bit.jpg
При этом в программе нужно
Код:
 with ImageList do
  begin
   Width := 32;
   Height := 32;
   BkColor := ListView.Color;
  end;
Как-то получается, что при 16-bit полупрозрачности не работают.
Нужно вручную или программно на битмапе (с цветом фона как у ListView) рисовать твою иконку (111111.bmp) и грузить в ImageList этот битмап. Ну или программно половинить иконку на цвета и маску и грузить их в ImageList обе.

Последний раз редактировалось Sibedir; 15.08.2014 в 08:23.
Sibedir вне форума Ответить с цитированием
Старый 15.08.2014, 08:19   #17
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Странно, а у меня - нет
Как была белая тень, так белая тень и осталась...
Я сегодня все утро тестировал различные варианты, пытаясь убрать мусор с картинки, но получалось то же самое, что и ListView рисует, правда, чуть лучше, но не то все-равно...

Скинь исходник, пожалуйста, гляну как там сделано, и в D7 заодно проверю)

Цитата:
Как-то получается, что при 16-bit полупрозрачности не работают.
Нужно вручную или программно на битмапе (с цветом фона как у ListView) рисовать твою иконку (Вложение 69492) и грузить в ImageList этот битмап. Ну или программно половинить иконку на цвета и маску и грузить их в ImageList обе.
А, ну вот я так и делал сначала, рисовал картинку на фоне с цветом как у ListView (говорил об этом в этом посте)
Цитата:
Проблему пока решил перерисовкой icon в bmp на белом фоне.
И вот попробовал сегодня также по примеру (который ты вчера прикреплял) по маске сделать картинку. Вышло, но рисовать маску пришлось вручную, т.к. программное создание маски на прозрачность не реагирует, хотя может нужен немного другой алгоритм, с определением "мягкости" цвета пикселя.

Последний раз редактировалось Xo66um; 15.08.2014 в 08:31.
Xo66um вне форума Ответить с цитированием
Старый 15.08.2014, 08:26   #18
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Щас я на работе, потому исходник на XE3
Проблема со значками в ListView.zip // ПЕРЕЗАЛИЛ
При 32-битном качестве цветопередачи, всё ОК

Но все-таки кажется вариант с отрисовкой на битмапе самый 100 пудовый.

Последний раз редактировалось Sibedir; 15.08.2014 в 08:30.
Sibedir вне форума Ответить с цитированием
Старый 15.08.2014, 08:38   #19
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Да, думаю этот вариант самый оптимальный, если не требуется манипулировать с фоном ListView в рантайме. В общем, методы у нас сошлись, только я программно рисую битмап и пихаю его в ImageList, но не суть.
Сегодня еще попробую поколдовать с созданием нормальной маски для изображения, если все получится, то выложу сюда исходник.

UPD:
В общем, ничего не получилось... Хотел использовать метод от Peter Below, но глядя на то, какой результат он возвращает - решил сделать чуть иначе.
Собственно, исходник прикрепляю, кому интересно - посмотрите.
Там есть две маски, по которым на выходе получаются разные варианты картинок, и метод простой генерации маски.

P.S.
За основу взят пример от Sibedir из этого поста.
Вложения
Тип файла: zip BMP_test.zip (5.8 Кб, 9 просмотров)

Последний раз редактировалось Xo66um; 15.08.2014 в 10:29.
Xo66um вне форума Ответить с цитированием
Старый 15.08.2014, 19:20   #20
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
При 32-битном качестве цветопередачи, всё ОК
Мне кажется, что проблема тут не в Delphi, не в ListView и даже не в Windows, а в самом значке. Значок 32-битный, а 32-битные значки корректно могут отображаться только в 32-битной цветности, если не путаю. В системах с меньшей цветностью Windows автоматически подставляет менее ажурные значки, поэтому в ней всё работает. Ради этого все системные значки составные, содержат в себе по несколько изображений разного размера и цветности, отчего занимают много места, раздувая общий размер файлов и библиотек, а косвенно и саму ОС. Красота требует жертв.
В разработке: воспроизводственный контур ИТ
Vapaamies вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить расстояние по умолчанию между значками раб. стола fedorov2012 Общие вопросы Delphi 2 09.05.2013 20:59
Проблема с ListView Saumavalion Win Api 4 06.05.2012 16:02
Небольшая проблема с ListView mixer94 Компоненты Delphi 5 12.08.2009 09:08
Проблема с ListView mar4elo Общие вопросы Delphi 5 04.12.2008 14:48
форма под значками ERASERROR Общие вопросы Delphi 3 19.01.2008 14:32