Вход


Главная страница >> Учебный процесс >> Конспекты >> Delphi. Библиотека визуальных компонентов VCL >> Общие принципы устройства и работы компонентов >> Графическая подсистема >> Класс TPicture
Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


Класс TPicture


TPicture = class(TPersistent)

Класс-надстройка над TGraphic, точнее ? над его потомками. Он содержит поле Graphic, которое может содержать TBitmap, TIcon и TMetafile. Предназначение TPicture ? управлять вызовами соответствующих методов, сурывая при этом хлопоты с определением типа и детали их реализации.

Кроме того, на уровне TPicture определены возможности по регистрации и использованию других ? определенных пользователем ? классов графических объектов, порожденных от TGraphic. Доступ к графическому объекту осуществляется посредством свойства:

property Graphic: TGraphic;

Если графический объект имеет один из трех предопределенных типов, то к нему можно обратиться и как к одному из свойств:

property Bitmap: TBitmap;

property Icon: TIcon ;

property Metafile: TMetafile;

Если в поле Graphic хранился объект одного класса, а затребован ? другого, то прежний объект уничтожается, а вместо него создается пустой объект нужного класса. Если же вы описали свой класс (допустим, TDIB), то к его методам и свойствам следует обращаться так:

(Graphic as TDIB).MyProperty := MyValue;

Перечислим остальные методы и свойства:

procedure LoadFromFile(const Filename: string) ; Анализирует расширение имени файла FileName и, если оно известно (зарегистрировано), то создается объект нужного класса и вызывается его метод LoadFromFile. В противном случае возникает исключительная ситуация EInvalidGraphic. Стандартными расширениями являются .ICO, .WMF и .BMP.
procedure SaveToFile(const Filename: string; Сохраняет графику в файле, вызывая соответствующий метод объекта Graphic.
Procedure LoadFromClipboardFormat (AFormat: Word; AData: THandle; APalette: HPALETTE); Если формат AFormat найден среди зарегистрированных, то AData и APalette передаются для загрузки одноименному методу соответствующего объекта. Стандартно зарегистрированных форматов два: битовое изображение CF BITMAP и метафайл CF.METAFILEPICT.
Procedure SaveToClipboardFormat (var AFormat: Word; var Adata: THandle; var APalette: HPALETTE); Сохраняет графику в буфере обмена, вызывая метод объекта Graphic.
procedure Assign(Source: TPersistent); Метод Assign переписан таким образом, чтобы присваиваемый объект мог быть класса как TPicture, так и TGraphic или любого его потомка. Кроме того, параметр Source может быть равен nil ? в этом случае поле Graphic очищается с удалением прежнего объекта.
class function SupportsClipboardFormat (Aformat: Word): Boolean; Метод класса возвращает True, если формат AFormat поддерживается классом TPicture (зарегистрирован в системе). Напомним, что методы класса можно вызывать через ссылку на класс, без создания экземпляра объекта.
class procedure RegisterFileFormat (const Aextension, Adescription: string; AgraphicClass: TGraphicClass);
class procedure RegisterClipboardFormat (AFormat: Word; AgraphicClass: TGraphicClass);
Предназначены для создателей новых графических классов. Они позволяют зарегистрировать формат файла и буфера обмена и связать их с созданным классом ? потомком TGraphic, который умеет читать и записывать информацию в этом формате.
(Ro) property Width: Integer; (Ro) property Height: Integer; Ширина и высота картинки. Те же, что и у Graphic.
property OnChange: TNotifyEvent; Это событие вызывается при изменениях графического объекта.

Все три разновидности графических объектов имеют свои системы кэширования. Это означает, что на один реально существующий в системе (и занимающий долю ресурсов!) дескриптор могут одновременно ссылаться несколько объектов. Реализуется такое связывание через метод Assign. Выражение

Icon1.Assign(Icon2);

означает, что два этих объекта разделяют теперь один значок.

Более простым является кэширование для TIcon и TMetafile, которые умеют только отображать себя и не предназначены для редактирования (создатели Delphi считают, что дескриптор графического объекта дается программисту не для того, чтобы ковыряться в нем на уровне двоичных кодов). Гораздо сложнее устроен механизм кэширования для TBitmap, который имеет свою канву для рисования.

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

Кого-то может удивить отсутствие объявленных методов рисования вроде Draw у TIcon, TMetafile и TBitmap. Такие методы есть, но они недоступны. Все рисование должно осуществляться через вызовы методов Draw и StretchDraw канвы, содержащей графику, ибо канва несет тот контекст, в котором должна осуществляться операция. Рассмотрим предопределенные графические классы.



[Назад]    [Содержание ]    [Вперед]

  


Для комментария : kadan@grsu.grodno.by

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017