Правильная ссылка на эту страницу
http://az-design.ru/Support/SoftWare/Delphi/D3/SB35.shtml

Глава 35. TCustomImageList и его производные

  • TCustomImageList
  • TImageList
  • TGlyphList
  • Пример проекта

       TCustomlmageList является абстрактным классом, от которого произведены два основных класса — TImageList и TGlyphlist Иерархия наследования показана на рисунке 35-1.
       Сначала мы обсудим функциональность TCustomlmageList, затем исследуем свойства, характерные для компонента TImageList, и в конце разберем класс TGlyphList.
       Вообще, группа классов TCustomImageList используется в качестве контейнеров для графических образов. Данные классы способны содержать большое количество образов одинакового размера. Эти образы имеют по умолчанию сторону в 16 пикселов, что делает их удобными для использования в качестве пиктограмм. Кроме того, возможно хранить образы и другого размера. Для этого следует указать измененный размер в специальном методе создания. Как и в большинстве контейнерных классов, отдельные элементы, хранящиеся в классе, доступны через индексное свойство. Класс TCustomlmageList является абстрактным и непосредственно не используется. Используется компонент TImageList, который произведен непосредственно от TCustomlmageList. Образы, которые содержатся в TImageList, можно запомнить предварительно для использования в приложениях, где требуется быстрое воспроизведение картинок без накладных расходов на считывание с диска. Такая работа является основным Назначением класса TGLyphList и используется внутренне компонентом TSpeedButton.
       В данной главе мы обсудим только особенности, которые отличают TGlyphList от TImageList. Более подробная информация о компоненте TSpeedButton приведена в главе 45, "TSpeedButton и его производные".


РИСУНОК 35-1 Иерархия TCustomImageList и производных.

ПОЛЕЗНАЯ ИНФОРМАЦИЯ
       Новым механизмом, поддерживаемым Windows 95 (и Windows NT), является список образов. Вот определение, предоставленное Borland:
       "Список образов представляет собой коллекцию образов одинакового размера, на каждый из которых можно сослаться по его индексу. Списки образов используются для эффективного управления большими множествами пиктограмм или битовых карт. Все образы в списке хранятся в одной большой битовой карте в формате экранного устройства. Список образов также может включать монохромные битовые карты, которые содержат маски, прозрачно применяемые для рисования образов (в стиле пиктограмм)". Класс TCustomImageList и его производные на самом деле инкапсулируют интерфейс с новой внутренней структурой данных Windows. Во многих случаях есть ссылка на объект mask. Маска является монохромной битовой картой того же размера, что и битовый образ. Они объединяются таким образом, что любые ненулевые пикселы битовой карты позволяют отрисовываться соответствующим пикселам в образе. Нулевой пиксел в маске указывает на то, что на конкретном холсте на этом месте будет рисоваться пиксел из фона.

TCustomImageList
       Класс TCustomlmageList похож на другие, определенные в Delphi классы, которые управляют списками объектов, например на TList или TStrings. Класс TCustomlmageList используется для хранения одного или нескольких образов с одинаково определенным размером. Размер образов определяется при создании конкретного экземпляра. TCustomlmageList является абстрактным классом, не используемым непосредственно. Во многих функциях имеется ссылка на группу перечисляемых типов, которые для справки приведены в листинге 35-1.

Листинг 35-1 Перечислимые типы, используемые TCustomlmageList и его потомками

TDrawingStyle = (dsFocus, dsSelected, dsNormal, dsTransparent);
TImageType = (itlmage, itMask);
TresType = (rtBitmap, rtCursor, rtlcon);
TOverlay = 0..3;
TLoadResource = (lrDefaultColor, lrDefaultSize, lrFromFile, lrMap3DColors,
                 lrTransparent, lrMonoChrome);
TLoadResources = set of TLoadResource;

В таблице 35-1 перечислены свойства, методы и события, реализуемые классом TCustomlmageList.

Таблица 35-1 Методы, свойства и события, реализуемые TCustomImageList

Использовать или установить это ... Чтобы сделать это ... Наследование
Add Добавить образ или маску к списку. Нет
AddIcon Добавить к списку пиктограмму. Нет
AddImages Добавить к текущему объекту образы из другого TCustomImageList. Нет
AddMasked Добавить к списку образ и указать цвет для генерации маски. Нет
Assign Выполнить глубокое копирование образов с другого элемента управления TCustomlmageList в текущий объект. TPersistent
BeginDrag Начать операцию перетаскивания на текущий объект TCustomlmageList. Нет
Clear Удалить список образов из внутренней памяти и освободить ресурсы. Нет
Count Возвратить количество образов, хранящихся в списке. Нет
Create Конструктор TComponent по умолчанию. TComponent
CreateSize Альтернативный конструктор. Нет
Delete Удалить из списка конкретный образ. Нет
Destroy Деструктор TComponent
DragCursor Определить, какой курсор использовать при перетаскивании элемента управления. Нет
Dragging Определить, будет ли перетаскиваться список образов. Нет
DragLock Ассоциировать образ с перетаскиваемым компонентом. Нет
DragMove Переместить перетаскиваемый образ в указанную позицию. Нет
DragUnlock Удалить ассоциацию между перетаскиваемым образом и окном. Нет
Draw Нарисовать индексированный образ на указанном холсте. Нет
DrawOverlay Нарисовать образ и переложить на указанный холст. Нет
EndDrag Завершить операцию перетаскивания. Нет
FileLoad Загрузить битовую карту, курсор или пиктограмму из поименованного файла, указать прозрачный цвет. Нет
GetBitmap Загрузить индексированный образ как битовую карту. Нет
GetHotSpot Получить горячую точку, ассоциированную с текущим перетаскиваемым образом. Нет
GetIcon Загрузить индексированный образ как пиктограмму. Нет
GetImageBitmap Получить дескриптор битовой карты, содержащей все образы. Нет
GetInstRes Получить ресурс образа и добавить его к списку образов. Нет
GetMaskBitmap Получить дескриптор битовой карты, содержащей все маски. Нет
GetResource Загрузить из файла указанный ресурс. Нет
Handle Получить дескриптор для функций Windows API. Нет
HandleAllocated Определить, был ли создан дескриптор списка образов. Нет
HideDragImage Скрыть перетаскиваемый образ, если он был виден. Нет
Insert Вставить битовую карту и маску после указанной позиции. Нет
InsertIcon Вставить пиктограмму после указанной позиции. Нет
InsertMasked Вставить битовую карту после указанной позиции и создать маску. Нет
Move Переместить образ из одного индекса в другой. Нет
Overlay Сделать образ в указанной позиции пригодным для перекрытия. Нет
RegisterChanges Указать объект для уведомления, когда список образов изменяется. Нет
Replace Заменить образ в указанной позиции новым образом и маской. Нет
ReplaceIcon Заменить пиктограмму в указанной позиции новым образом и маской. Нет
ReplaceMasked Заменить образ в указанной позиции новым образам, используя для генерации маски указанный цвет. Нет
ResourceLoad Загрузить образ из поименованного ресурса и использовать для генерации маски указанный цвет. Нет
ResInstLoad Получить ресурс образа и добавить его к списку образов. Нет
SetDragImage Указать индексированный образ для использования, когда элемент управления будет перетаскиваться. Нет
UnRegisterChanges Удалить связь с объектом, принимающим уведомление об изменении списка. Нет

TImageList
       Класс TImageList определяет компонент, доступный со страницы Win95 стандартной Палитры компонентов в Delphi 3. Главная разница между компонентом TImageList и родительским классом TCustomImageList заключается в количестве защищенных свойств, выставляемых и публикуемых классом, что делает их доступными в Object Inspector при использовании одного из данных компонентов.
       Дополнительные методы, свойства и события, опубликованные данным компонентом, показаны в таблице 35-2.

Таблица 35-2 Методы, свойства и события, реализуемые TImageList

Использовать или установить это ... Чтобы сделать это ... Наследование
АllосВу Указать инкремент роста. Нет
BkColor Указать фоновый цвет. Нет
BlendColor Указать цвет переднего плана. Нет
DrawingStyle Указать метод рисования образов. Нет
Height Установить высоту для хранимых образов. Нет
ImageType Указать что использовать для рисования — маску или образ. Нет
Masked Определить, будет ли список содержать прозрачные или непрозрачные образы. TCustomlmageList
OnChange Метод, который будет выполняться при изменениях. TCustomImageList
ShareImages Определить, будет ли разрушаться дескриптор образа при разрушении списка. TCustomImageList
Width Установить ширину хранимых образов. TCustomImageList

TGlyphList
       Класс TGlyphList используется компонентом TSpeedButton внутренне для хранения образов, которые применяются данным компонентом. Этот класс определяет несколько дополнительных методов и свойств, что делает его удобным для компонента TSpeedButton. Главное различие между классами TListlmage и TGlyphList заключается в том, что удаленные входы автоматически используются методом add related. Если конкретный образ удаляется из образов глифов, то внутренний механизм TGlyphList берет удаленный вход на заметку. При следующем вызове на добавление TGlyphList использует его для запоминания образа нового глифа. Изменения методов для данного класса являются модификациями стандартных методов TListlmage с целью обеспечения дополнительного уровня сложности, который не поддерживается самим классом TImageList.
       Дополнительные свойства и методы описаны в таблице 35-3.

Таблица 35-3 Методы и свойства, реализуемые TGlyphList

Использовать или установить это ... Чтобы сделать это ... Наследование
Add Добавить новый образ глифа. TCustomImageList
AddMasked Добавить новый образ глифа, используя для маски указанный цвет. TCustomImageList
Count Получить количество активных глифов в списке. TCustomImageList
Create Конструктор. TCustomImageList
Delete Удалить образ из списка глифов. TCustomImageList
Destroy Деструктор. TCustomImageList


       Помните о том, что свойства, защищенные в TCustomImageList и опубликованные в TImageList, будут внешне доступны только компонентам в классах, произведенных от TImageList или тем, которые явно отмечают их как опубликованные. Именно поэтому свойство, подобное Sharelmages, показано как потомок TCustomlmageList в компоненте TImageList, хотя данное свойство в TCustomlmageList внешне невидимо, поскольку объявлено здесь как защищенное. Если вы порождаете от TCustomlmageList новый класс, убедитесь в том, что желаемые свойства корректно указаны как опубликованные, если они предназначаются для пользователя.

Метод Add
Метод AddIcon
Метод AddImages
Метод AddMasked
Свойство AllocBy
Метод Assign
Метод BeginDrag
Свойство BkColor
Свойство BlendColor
Метод Clear
Свойство Count
Метод Create
Метод CreateSize
Метод Delete
Метод Destroy
Свойство DragCursor
Свойство Dragging
Метод DragLock
Метод DragMove
Метод DragUnlock
Метод Draw
Свойство DrawingStyle
Метод DrawOverlay
Метод EndDrag
Метод FileLoad
Метод GetBitmap
Метод GetHotSpot
Метод GetIcon
Метод GetImageBitmap
Метод GetInstRes
Метод GetMaskBitmap
Метод GetResource
Свойство Handle
Метод HandleAllocated
Свойство Height
Метод HideDragImage
Свойство ImageType
Метод Insert
Метод InsertIcon
Метод InsertMasked
Свойство Masked
Метод Move
Событие OnChange
Метод Overlay
Метод RegisterChanges
Метод Replace
Метод ReplaceIcon
Метод ReplaceMasked
Метод ResInstLoad
Метод ResourceLoad
Метод SetDragImage
Свойство ShareImages
Метод ShowDragImage
Метод UnRegisterChanges
Свойство Width

Пример проекта
       Пример проекта для настоящей главы иллюстрирует основные применения компонента TImageList по визуализации нескольких последовательных образов пиктограмм, которые можно использовать для анимации вращения. В примере последовательные образы рисуются рядом друг с другом, чтобы быть видимыми пользователю. (Трудно проводить анимацию на бумаге!) Форма для проекта представлена на рисунке 35-7
       Обратите внимание на то, что форма содержит компонент TImageList и кнопку, которая активирует иллюстрирующий код. Результат нажатия кнопки показан на рисунке 35-8 Обратите также внимание на то, что проект служит основой для некоторых рисунков, которые были представлены в главе ранее. Если вы хотите поэкспериментировать, например, с DrawingStyle или BkColor, программу легко модифицировать. Именно это и делалось для генерации фигур, которые появлялись прежде.
       Код проекта показан в листинге 35-2.


РИСУНОК 35-7 Дизайн формы для проекта


РИСУНОК 35-8 Результаты нажатия кнопки во время выполнения программы

Листинг 35-2 Листинг кода проекта

unit TILDemo;
interface
uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls,
   Forms, Dialogs, StdCtrls, ExtCtrls;
type TForml = class(TForm)
     ImageListl: TImageList;
     Buttonl: TButton;
     procedure ButtonlClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
   Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
  theBits: TBitmap;
  theMask: TBitmap;
begin
   theBits := TBitmap.Create;
   theMask := TBitmap;
   theBits.Height := 32;
   theBits.Width := 32;
   theMask.Height := 32;
   theMask.Width := 32;
   theMask.LoadFromFile('MASK.BMP');
   theBits.LoadFromFile('SPIN1.BMP'); ImageListl.Add(theBits, theMask);
   theBits.LoadFromFile('SPIN2.BMP'); ImageListl.Add(theBits, theMask);
   theBits.LoadFromFile('SPIN3.BMP'); ImageListl.Add(theBits, theMask);
   theBits.LoadFromFile('SPIN4.BMP'); ImageListl.Add(theBits, theMask);
   ImageList1.Draw(Forml.Canvas, 0, 200, 0);
   ImageList1.Draw(Forml.Canvas, 64, 200, 1);
   ImageList1.Draw(Forml.Canvas, 128, 200, 2);
   ImageList1.Draw(Forml.Canvas, 192, 200, 3);
   theMask.Destroy;
   theBits.Destroy;
end;
procedure TForm1.theChangeLinkChange(Sender: TObject);
begin
   ListView1.Font.Color := clRed;
end;

       При нажатии кнопки Delphi вызывает обработчик ButtonlClick, который выполняет следующие операции. Создаются две битовые карты, одна для хранения желаемых образов, которые будут считываться с диска, и одна для хранения масок, которые также считываются с диска. После создания объектов битовых карт указываются размеры, которые соответствуют образам, считываемым с диска посредством обращения к LoadFromFile — один раз для маски образа и один раз для каждого отдельного образа из тех, которые будут составлять анимационную последовательность. После считывания Mask загружаются четыре образа и добавляются к компоненту ImageList, который становится репозитарием образов. Наконец, после того как битовые карты добавлены к ImageList, метод Draw компонента ImageList используется для визуализации анимационной последовательности в форме в удобном положении для просмотра. Если бы это была действительно анимация, образы рисовались бы в одном и том же положении с временной задержкой между визуализациями, обеспечивающей анимационный эффект. В конце после визуализации образов объекты битовых карт, которые были созданы динамически, разрушаются.

уже скачали 173 раз.


<<< Пред. Оглавление
Начало раздела
След. >>>




Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:55 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/SoftWare/Delphi/D3/SB35.shtml