□ property Width : Integer;
property Height : Integer;
Ширина и высота картинки. Значения этого свойства всегда те же, что и У Объекта ИЗ ŒOHCTBa Graphie.
Все три разновидности графических объектов имеют свои системы кэширования. Это означает, что на один реально существующий в системе (и занимающий долю ресурсов!) дескриптор могут одновременно ссылаться несколько объектов. Реализуется такое связывание через метод Assign. Выражение:
Iconl.Assign(Icon2);
означает, что два этих объекта разделяют теперь один, фактически находящийся в памяти, значок.
Более простым является кэширование для классов ТТсоп и TMetafile, которые умеют только отображать себя и не предназначены для редактирования (создатели Delphi считают, что дескриптор графического объекта дается программисту не для того, чтобы "ковыряться" в нем на уровне двоичных кодов). Гораздо сложнее устроен механизм кэширования для канала TBitmap, который имеет свою канву для рисования.
Внутреннее представление информации в фафических объектах двоякое - она может храниться как поток типа TMemoryStream (в него загружается содержимое соответствующего файла), как область памяти с дескриптором (структура которой зависит от типа графического объекта) и одновременно в двух этих видах, содержимое которых автоматически синхронизируется. Поэтому будьте готовы, что загрузка изображения потребует вдвое большего объема памяти - особенно это актуально для больших картинок.
Кого-то может удивить отсутствие объявленных методов рисования, вроде метода Draw для классов Ticon, TMetafile и TBitmap. Объяснение простое - в процессе рисования они играют пассивную роль; рисуют не они - рисуют их. Все рисование должно осуществляться через вызовы методов Draw и stretchDraw канвы, содержащей графику, ибо канва соответствует тому контексту, в котором должна осуществляться операция.
Рассмотрим предопределенные графические классы.
Класс TMetafile
Инкапсулирует свойства метафайла Windows. С появлением Windows 95 к стандартному метафайлу (формат WMF) добавился расширенный (формат EMF), обладающий расширенными возможностями. Соответственно в объекте TMetafiie имеется свойство
property Enhanced: Boolean;
Внутреннее представление метафайла всегда новое (EMF), и устанавливать свойство Enhanced в значение False следует только для обеспечения совместимости со старыми программами.
В классе TMetafiie перекрываются методы Assign, LoadFromStream, SaveToStream, LoadFromClipboardFormat, SaveToClipboardFormat. В буфер обмена объект помещает свое содержимое в формате cf_enhmetafile. ПОМИМО общих, класс имеет следующие свойства:
О дескригтгор метафайла
property Handle: HMETAFILE;
• свойство property inch: Word Число точек на дюйм в координатной системе метафайла. Связано с установленным режимом отображения;
□ свойства
property MMHeight: Integer;
property MMWidth: Integer;
это настоящие высота и ширина метафайла в единицах, равных 0,01 мм. Свойства Height и width задаются в пикселах;
□ в метафайл можно добавить свою палитру: