Шаг 4.
Вкладка Win32. Компонент TImageList

    На этом шаге мы рассмотрим компонент TImageList.

    Компонент TImageList (Список изображений) является невизуальным и применяется в приложениях, где используется много графических изображений. Он позволяет хранить наборы изображений фиксированного размера, такие как пиктограммы или битовые карты, обращаться к ним по номерам и осуществлять вывод изображений на экран различными способами.

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

    Рассмотрим свойства компонента TImageList.

   
Таблица 1. Свойства компонента TImageList
Свойство Описание
property AllocBy: Integer; Число, определяющее увеличение длины массива изображений при заполнении массива. Например, если значение свойства AllocBy равно 4 и список содержит четыре картинки, то при добавлении пятой длина списка увеличится до 8 элементов (на 4). Используется для эффективного распределения памяти при работе с большим числом изображений
property BkColor: TColor; Фоновый цвет рисунка. При выводе этим цветом заполняется маскируемая область
property BlendColor: TColor; Цвет переднего плана. Используется, когда изображение рисуется как выделенное (например, имеющее фокус)
property DrawingStyle: TDrawingStyle; Способ вывода изображений на экран. Возможны значения:
  • dsFocused - цвет картинки смешивается с цветом, установленным для свойства BlendColor, на 25%;
  • dsSelected - цвет картинки смешивается с цветом, установленным для свойства BlendColor, на 50%;
  • dsNormal - в качестве фонового цвета используется цвет, установленный для свойства BkColor (если значение свойства равно clNone (цвет не задан), то изображение рисуется с использованием прозрачного цвета и маски);
  • dsTransparent - изображение рисуется прозрачным цветом независимо от значения свойства BkColor.
property ImageType: TImageType; Тип изображения. Возможные значения:
  • itImage (картинка),
  • itMask (маска).
property Masked: Boolean; Имеет значение True, если при выводе изображения используется маска. Маскируемая часть изображения либо выводится как прозрачная, либо заполняется цветом, указанным в свойстве BkColor
property ShareImages: Boolean; Имеет значение False, если область памяти, выделенная для списка картинок, освобождается после завершения работы программы. Значение True смысл устанавливать, только если доступ к списку картинок выполняется нестандартным путем, например в результате обращения к ресурсам другой программы

    В свойствах Width и Height указываются ширина и высота одного изображения в пикселях. Все изображения в списке должны иметь одинаковые размеры. Рекомендуется использовать размеры 24*24 пикселя, при которых можно получить достаточный визуальный эффект.

    Для загрузки изображений используется редактор списка изображений. Он вызывается двойным щелчком на объекте ImageList.


Рис.1. Редактор списка изображений

    Новые картинки добавляются с помощью кнопки Add (Добавить). Пока редактор не закрыт, добавленные изображения можно редактировать. Раскрывающийся список Transparent Color (Прозрачный цвет) позволяет выбрать цвет, который будет считаться прозрачным. Пиксели этого цвета не выводятся. Если прозрачность не нужна, следует выбрать значение clNone.

    В группе Options (Параметры) задается способ позиционирования картинки. Выбор Crop (Обрезка) означает, что изображение будет вкладываться в элемент списка, начиная от его верхнего левого угла. Выбор Stretch (Растяжение) указывает, что изображение будет сжиматься или растягиваться, чтобы соответствовать параметрам ширины и высоты элемента списка. Выбор Center (Центр) размещает изображение по центру допустимого прямоугольника. Если оно превышает размеры выделенной области, то происходит обрезка.

    Кнопка Delete использует для удаления выделенного изображения из списка.

    Кнопка Clear используется для удаления всех изображений из списка.

    Кнопка Export используется для сохранения выделенного изображения в файл. Файл будет содержать изображение, уже обработанное для размещения в объекте.

    В классе TImageList определены следующие методы.

function Add (Image, Mask: TBitmap): Integer;

    Добавление в список изображения и его маски (черно - белого точечного изображения, где белый цвет обозначает прозрачную область). Возвращаемое значение - номер изображения в списке. Нумерация начинается с нуля.

function AddIcon (Image: TIcon): Integer;

    Добавление пиктограммы. Пиктограммы всегда рисуются прозрачным цветом.

procedure AddImages (Value: TCustomImageList);

    Копирование всех изображений из другого объекта ImageList.

function AddMasked (Image: TBitmap; MaskColor; TColor): Integer;

    Аналогично методу Add, но вместо дополнительной маски задается цвет изображения, который считается прозрачным, подобно работе с редактором списка.

procedure Clear;

    Удаление всех изображений из списка.

procedure Draw (Canvas: TCanvas; X, Y, Index: Integer; Enabled: Boolean=True);

    Основная процедура вывода изображения с номером Index на холст Canvas в позицию X,Y. Способ отображения определяется значением свойства DrawingStyle. Если значение параметра Enabled равно False, то изображение будет бледным.

function FileLoad (ResType: TResType; Name: String; MaskColor: TColor): Boolean;

    Загрузка изображения из файла ресурсов с именем Name. В параметре ResType указывается тип ресурса, в параметре MaskColor задается прозрачный цвет.

procedure GetBitmap (Index: Integer; Image: TBitmap);

    Получение элемента изображения с номером Index как объекта класса TBitmap. Результат возвращается во втором параметре, который должен быть переменной.

procedure Getkon (Index: Integer; Image: TIcon);

    Получение элемента изображения (или его фрагмента) с номером Index как объекта класса TIcon.

procedure GetImages (Index: Integer; Image, Mask: TBitmap);

    Разделение изображения с номером Index на две части: цветное точечное изображение и монохромная маска. Эти изображения возвращаются во втором и третьем параметрах.

procedure Insert (Index: Integer; Image, Mask: TBitmap);

    Добавление изображения и маски в конкретную позицию списка.

procedure InsertIcon (Index: Integer; Image:TIcon);

    Добавление значка в конкретную позицию списка.

procedure InsertMasked (Index: Integer; Image: TBitmap; MaskColor: TColor); 

    Добавление изображения с маскируемым цветом в конкретную позицию списка.

procedure Move (CurIndex, NewIndex: Integer);

    Перестановка изображения в списке из позиции CurIndex в позицию NewIndex.

procedure Replace (Index: Integer; Image, Mask: TBitmap);

    Замена элемента списка на новое изображение (с маской).

procedure ReplaceIcon (Index: Integer; Image: TIcon);

    Замена элемента списка на новое изображение.

procedure ReplaceMasked (Index: Integer; NewImage: TBitmap; MaskColor: TColor);

    Замена элемента списка на новое изображение (с маскируемым цветом).

function ResourceLoad (ResType: TResType; Name: String; MaskColor: TColor): Boolean;

    Загрузка изображения из ресурса программы под названием Name. В параметре ResType указывается тип ресурса, в параметре MaskColor - прозрачный цвет.

    Компоненты типа TImageLists используются библиотекой Windows Comctl32.dll. Если установлена не самая последняя версия этой библиотеки, то могут возникнуть проблемы с выводом изображений, так как в предыдущих версиях имеются ошибки.

    Корректно загружать изображения в список можно динамически. Это делается следующим образом.

procedure TForm1.Button3Click (Sender: TObject);
var
   Bitmap: TBitmap;
begin
   Bitmap: = TBitmap. Create;
   Bitmap.LoadFromFile ('H: \Gennady\GDelphiLibrary\Icons\2.bmp');
   ImageList1.AddMasked (Bitmap, clWhite);
end;

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

    На следующем шаге мы рассмотрим компонент TRichEdit.




Предыдущий шаг Содержание Следующий шаг