Компонент TlmageList
Таким образом, с любой точки зрения правильнее явно читать картинки из ресурсов. Последовательность действий для этого следующая:
- Создать исходный файл ресурсов, куда нужно включить и поименовать требуемые файлы с расширением bmp, к примеру:
inout BITMAP "inout.bmp" tools BITMAP "tools.bmp"
Сохранить этот файл с расширением .rс, скажем, bitmap.rс.
- Скомпилировать ресурсы при помощи утилиты brcc32.exe, поставляемой с Delphi:
C:\Program Files\Borland\Delphi7\bin\brcc32 bitmap.rc
- Появившийся файл bitmap.res нужно включить в состав проекта. Для этого используется директива $R:
{$R bitmap.res}
- Теперь картинка содержится в ресурсах и будет включена в состав исполняемого файла. Осталось загрузить ее в компонент TimageList. Для этого используется метод ResourceLoad:
ImageListl.ResourceLoad(rtBitmap, 'bitmaps',TColor(0));
При этом произойдет автоматическая "нарезка" картинок в соответствии со свойствами width и Height. Если размер большой картинки, к примеру, 256x16 пикселов, а ширина, заданная свойством TimageList, равна 16 пикселам, то в список будут включены 16 элементов размером 16x16. Поэтому еще во время разработки нужно правильно настроить размеры в компоненте TimageList, иначе после загрузки ресурса картинки будут разрезаны как попало.
Есть и другой метод загрузки – FileLoad:
function FileLoad(ResType: TResType; Name: string; MaskColor: TColor): Boolean;
Аналогичным путем он позволяет загружать картинки из любого пригодного файла. Но загрузка из файла менее надежна – нет гарантии, что у пользователя вашего приложения нужный файл всегда находится на месте и он не изменен.
Описанный выше редактор списка картинок "умеет" делать их прозрачными еще во время разработки. Часто бывает необходимо сделать прозрачными картинки, загружаемые из файлов во время исполнения. Для этого нужно использовать их свойство Transparent:
Var bmp: TBitmap; bmp.LoadFromFile('с:\test.bmp'); bmp.Transparent: = True; ImageListl.AddMasked(bmp, bmp.TransparentColor);
В методе AddMasked нужно вторым параметром указать "прозрачный" (фоновый) цвет, который в данном случае равен bmp.TransparentColor.
Как элемент управления Win32, компонент TimageList имеет собственный дескриптор:
property Handle: HImageList;
Не следует путать этот дескриптор с дескрипторами растровых картинок, входящих в состав списка. В файле CommCtl.pas приведены прототипы всех функций для работы с этим элементом управления, и для их вызова необходимо значение свойства Handle. Обратитесь к ним, если опубликованных свойств TimageList вам недостаточно.