Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Особенности ImageList


Автор: Rrader 28.9.2007, 15:08
Здравствуйте, ребята! Сейчас очень сильно болею и не могу работать в полную силу... smile 
Вот в чем проблема. Дело в том, что добавление иконок динамически в лист отличается от добавления статически через редактор. Так вот, мне нужно знать, в чем эти отличия. Вы спросите, а почему они есть, а я раскрою суть проблемы:

Почему-то 32-битные иконки, добавленные динамически, отображаются неправильно при работе с TBX (нет прозрачности). Для статически добавленных иконок все нормально.

Может все проще? smile 

Автор: VICTAR 28.9.2007, 16:43
Совершенно недавно нашел на форуме решение этой прблемы. К сожалению не помню автора... Суть заключается в том, TImageList не поддерживает 32-битные иконки. Решение: перед добавлением иконок проделать следующую операцию:
Код

procedure ConvertTo32BitImageList(const ImageList: TImageList);
const
  Mask: array[Boolean] of Longint = (0, ILC_MASK);
var
  TempList: TImageList;
begin
  if Assigned(ImageList) then
  begin
    TempList := TImageList.Create(nil);
    try
      TempList.Assign(ImageList);
      with ImageList do
      begin
        Handle := ImageList_Create(
          Width, Height, ILC_COLOR32 or Mask[Masked], 0, AllocBy);

        if not HandleAllocated then
        raise EInvalidOperation.Create(SInvalidImageList);
      end;

      Imagelist.AddImages(TempList);
    finally
      FreeAndNil(TempList);
    end;
  end;
end;

Автор: Rrader 28.9.2007, 16:53
Большое спасибо!

Новичкам добавлю, что если хотите использовать этот код, не забудьте:
Код

Uses CommCtrl;

 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)