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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2014, 10:06   #1
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию как заменять картинки в TImageList ?

Доброго времени суток.
Хотел программно заменить картинку в TImageList - не вышло, пробовал и так и сяк, не понимаю какую маску нужно отправлять, закидал масками от души, меняется только нижняя часть картинки которую я перерисовываю, какую маску мне нужно нарисовать чтобы картинка заменилась полностью?
Код:
  bmp:=TBitmap.Create;
  bmp.SetSize(16,16);
  ImageList1.GetBitmap(12,bmp);
  bmp.Canvas.Brush.Color:=Color;
  bmp.Canvas.Brush.Style:=bsSolid;
  bmp.Canvas.FillRect(TRect.Create(0,12,16,16));

  mask:=TBitmap.Create;
  mask.SetSize(16,16);
  mask.Canvas.Brush.Color:=clWhite;
  mask.Canvas.Brush.Style:=bsSolid;
  mask.Canvas.FillRect(mask.Canvas.ClipRect);

  ImageList1.Replace(12,bmp,mask);
пыжок

Последний раз редактировалось maloun; 21.10.2014 в 12:20.
maloun вне форума Ответить с цитированием
Старый 21.10.2014, 13:12   #2
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

оказалось это болезнь всех SpeedButton ToolButton и прочих кнопок, их картинки обрезаются с краев от лишних цветов, таким образом моя картинка не полностью рисовалась с краев, а вот как это отрубить я уже хз
у SpeedButton к примеру, свойство Glyph выдает полноразмерную картинку, а отображает на форме уже обрезанную,
у ToolButton все проще, картинки берутся из ImageList'а, и рисуются нормально пока не начнешь заменять их в ImageList'е,
тогда они обрезаются так же как и в SpeedButton, картинку прикрепляю сюда, обрезается красная линия внизу картинки
Изображения
Тип файла: bmp color.bmp (822 байт, 125 просмотров)
пыжок

Последний раз редактировалось maloun; 21.10.2014 в 13:27.
maloun вне форума Ответить с цитированием
Старый 21.10.2014, 18:14   #3
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от maloun Посмотреть сообщение
оказалось это болезнь всех SpeedButton ToolButton и прочих кнопок, их картинки обрезаются с краев от лишних цветов, таким образом моя картинка не полностью рисовалась с краев, а вот как это отрубить я уже хз
у SpeedButton к примеру, свойство Glyph выдает полноразмерную картинку, а отображает на форме уже обрезанную,
у ToolButton все проще, картинки берутся из ImageList'а, и рисуются нормально пока не начнешь заменять их в ImageList'е,
тогда они обрезаются так же как и в SpeedButton, картинку прикрепляю сюда, обрезается красная линия внизу картинки
Тоже парился с SpeedButton через Gryph загружал картинку а она не менялась в размере то есть если изображение 256х256 пикселе то кнопку надо делать большую чтоб картинка норм была) потом и в меню тоже так было, а после взял и изменил все картинки через фотошоп и все нормально стало... Хотя бывает и такое что какой то мусор попадает вместе с картинкой....
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Старый 21.10.2014, 18:57   #4
indexx
Заблокирован
 
Регистрация: 12.09.2014
Сообщений: 544
По умолчанию

Gryph, то есть битмап, это контейнер для изображения (читать выделенная память). Как-то странно от контейнера ждать, что он будет что-то жать. Хочется жать, делаем ручками.
indexx вне форума Ответить с цитированием
Старый 22.10.2014, 10:35   #5
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

Цитата:
Сообщение от indexx Посмотреть сообщение
Как-то странно от контейнера ждать, что он будет что-то жать. Хочется жать, делаем ручками.
Никто не хочет чтобы он TBitmap сжимал картинку, на оборот, пусть рисуется как есть, но он рисуется обрезанным!
На кнопке моя картинка из Glyph рисуется без красной линии.
Если сохранить картинку из Glyph в другой bmp и нарисовать его на TImage - картинка рисуется полностью.
То есть в контейнере нормальная картинка, а на кнопке обрезанная.
При этом если использовать TToolButton вместо TSpeedButton в первый раз картинка будет нарисована полностью,
а после замены картинки на такую-же но с другим цветом уже будет обрезана.
Учитывая что я выяснил что ImageList тут не причем тема может считаться закрытой.
А вопрос уже переходит к другой теме: "Как правильно рисовать картинки на кнопках?",
может есть способы отключить на кнопках редактирование изображений или еще что,
но если никто не знает, придется лезть в недра компонентов и смотреть кто там рисует,
как-нибудь потом займусь этим вопросом


Случайно продублировал сообщение, вместо того чтобы отредактировать, прошу модератора удалить этот пост
пыжок

Последний раз редактировалось maloun; 22.10.2014 в 12:14.
maloun вне форума Ответить с цитированием
Старый 22.10.2014, 12:10   #6
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

Цитата:
Сообщение от Fahman Посмотреть сообщение
загружал картинку а она не менялась в размере
Да, у меня именно размер картинки 16x16, рисуется из них 16x14, и с картинками другого вида все нормально, проблема именно с теми
картинками, у краев которых есть область цвета на всю ширину картинки, какой-то "умный" оптимизатор убирает такие области
и моя картинка рисуется как бы без всего лишнего, хотя я такой помощи не просил и картинку хотел видеть в полном размере.



Цитата:
Сообщение от indexx Посмотреть сообщение
Как-то странно от контейнера ждать, что он будет что-то жать. Хочется жать, делаем ручками.
Никто не хочет чтобы он (TBitmap) сжимал картинку, на оборот, пусть рисуется как есть, но он рисуется обрезанным!
На кнопке моя картинка из Glyph рисуется без красной линии.
Если сохранить картинку из Glyph в другой bmp и нарисовать его на TImage - картинка рисуется полностью.
То есть в контейнере нормальная картинка, а на кнопке обрезанная.
При этом если использовать TToolButton вместо TSpeedButton в первый раз картинка будет нарисована полностью,
а после замены картинки на такую-же но с другим цветом уже будет обрезана.
Учитывая что я выяснил что ImageList тут не причем тема может считаться закрытой.
А вопрос уже переходит к другой теме: "Как правильно рисовать картинки на кнопках?",
может есть способы отключить на кнопках редактирование изображений или еще что,
но если никто не знает, придется лезть в недра компонентов и смотреть кто там рисует,
как-нибудь потом займусь этим вопросом
пыжок
maloun вне форума Ответить с цитированием
Старый 25.11.2014, 22:18   #7
maloun
Форумчанин
 
Аватар для maloun
 
Регистрация: 03.01.2011
Сообщений: 233
По умолчанию

И так спустя пару недель я решил рас и на всегда расквитаться с этим "багом" и таки умудрился откопать что к чему.

Секрет замены картинок с прозрачным цветом в ToolBar:
перед добавлением иконки в ImageList, в нем должны быть выставлены
ColorDepth: cdDeviceDependent; BkColor: clWhite; далее после добавления
иконки в окно ImageList'а должен быть выставлен прозрачный цвет для этой картинки.

Секрет замены картинок с прозрачным цветом в SpeedButton,
с отключением обрезания картинки по краям "умным" определителем:
выставляете Glyph.TransparentColor в цвет фона картинки которую
присваиваете и\или делаете Glyph.TransparentMode:=tmFixed вместо tmAuto.

выкладываю пример рабочего кода
Вложения
Тип файла: zip ColorTest.zip (56.9 Кб, 30 просмотров)
пыжок
maloun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как из TImageList'a, состоящий из PNG, вывести нужный в TImage fedorov2012 Общие вопросы Delphi 10 16.04.2013 17:28
TListView как заставить корректно отображаться png, через TImageList или TcxImageList fedorov2012 Общие вопросы Delphi 1 09.02.2013 21:08
Рандомно в Timage грузить картинки из TimageList Человек_Борща Общие вопросы Delphi 6 09.01.2011 09:45
Как заменять ',' на '.' ? kta87 Помощь студентам 4 02.03.2010 13:50
Как заставить одну ячейку заменять другую Kairan Microsoft Office Excel 8 22.02.2010 06:10