Графика и мультимедиа___________________________________327

Однако, для классов TBitmap, TIcon и TMetafile присваивать можно только
значения однородных объектов: соответственно битовых матриц, пиктограмм, мета-
файлов. При попытке присвоить значения разнородных объектов генерируется иск-
лючение. Класс TPicture — универсальный, ему можно присваивать значения объ-
ектов любых из остальных трех классов. А значение TPicture можно присваивать
только тому объекту, тип которого совпадает с типом объекта, хранящегося в нем.

Приведем пример. Часто в приложениях создается объект типа TBitmap, на-
значение которого — запомнить содержимое графического изображения и затем
восстанавливать его, если оно будет испорчено или изменено пользователем. Код,
решающий эту задачу, может иметь вид:

// Объявление и создание объекта Bitmap
Graphics::TBitmap *Bitmap = new Graphics::TBitmap();

void_fastcall TFormI::FormDestroy(TObject *Sender)

// Уничтожение Bitmap и освобождение памяти

{

Bitmap->Free() ;

//——————————————————————

void _fastcall TFormI::MOpenClick(TObject *Sender)
// Загрузка изображения из файла в Bitmap и Imagel
(

if (OpenPictureDialogl->Execute())

(
Bitmap->LoadFromFile(OpenPictureDialogl-->FileName) ;

Imagel->Picture->Assign(Bitmap) ;

)
}
//——————————————————————

void _fastcall TFormI::MSaveClick(TObject *Sender)

// Сохранение изображения из Imagel в Bitmap

f

Bitmap->Assign(Imagel->Picture);

}

//——————————————————————

void_rastcail TFormI::MRestoreClick(TObject *Sender)

// Восстановление изображения в Imagel из Bitmap

{

Imagel->Picture->Assign(Bitmap) ;

}

В этом коде сначала объявляется переменная Bitmap типа TBitmap и создает-
ся соответствующий объект. Если вы создали объект Bitmap, то надо не забыть его
уничтожить при окончании работы и освободить от него память. Автоматически
это не делается. Поэтому надо освобождать память, например, в обработчике собы-
тия формы OnDestroy (процедура FormDestroy) методом Free:

Bitmap->Free() ;

В процедуре MOpenClick в объект Bitmap в него методом LoadFromFile загру-
жается изображение из выбранного пользователем файла. Затем оператор

Imagel->Picture->Assign(Bitmap) ;

присваивает значение графического объекта Bitmap свойству Picture компонента
Imagel. Изображение тем самым делается видимым пользователю.
Этот оператор можно записать иначе:

Forml->Imagel->Picture->Bitmap->Assign(Bitmap);

что даст тот же самый результат.