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

Копированию или вырезанию подлежит ранее выделенный пользователем
объект, местоположение и размеры которого определяются переменной R. Поэто-
му сначала создается временный объект типа TBitmap, в который переносится ко-
пируемый фрагмент. Затем этот объект копируется в буфер обмена Clipboard. Бла-
годаря разделу _finally память освобождается от временного объекта при любом
исходе копирования: удачном или аварийном.

Для работы с буфером обмена используется функция Clipboard, создающая
объект типа TClipboard, инкапсулирующий свойства буфера обмена Windows.

Аналогично реализуется команда Вставить, копирующая изображение из бу-
фера обмена Clipboard:

void _fastcall TFormI::MPasteClick(TObject *Sender)
(

Graphics::TBitmap *BMCopy = new Graphics::TBitmap;

trv

{
try

{

BMCopy->LoadFromClipboardFormat(CF_BITMAP,Clipboard()->

GetAsHandle(CF_BITMAP),0) ;

Image3->Canvas->CopyRect(Rect(0,0,BMCopy->Width,BMCopy->Height),

BMCopy->Canvas, Rect(0,0,BMCopy->Width,BMCopy->Height)) ;

1

_finally
T~
BMCopy->Free() ;

}
)

catch (EInvalidGraphicS)
(
ShowMessage("Ошибочный формат графики");

)
1

Чтение из Clipboard осуществляется методом LoadFromClipboardFormat.
Предусмотрен перехват исключения EInvalidGraphic, если в Clipboard содержится
не битовая матрица.

Попробуйте реализовать описанный графический редактор или разберитесь
подробнее в его работе, посмотрев его код на прилагаемом к книге диске. Попро-
буйте также усовершенствовать редактор, добавив, в него, например, выбор шири-
ны линий, рисование эллипсов и т.д.

5.1.7 События OnPaint

До сих пор мы рисовали в основном на канве компонента Image. Но канву
имеет не только Image. Ее имеют и многие другие компоненты, например, формы.
Все, что ранее вы рисовали на канве компонентов типа TImage, вы могли бы рисо-
вать и на форме. Кроме того имеется специальный компонент PaintBox, имеющий
канву и позволяющий рисовать на ней. Рисование на PaintBox вместо формы не
имеет никаких преимуществ, кроме, может быть, некоторого облегчения в распо-
ложении одного или нескольких рисунков в площади окна.

При рисовании на канве формы или PaintBox надо учитывать некоторые осо-
бенности. Давайте сначала выясним на собственном опыте, о чем идет речь.

Откройте новое приложение, перенесите на него диалог OpenPictureDialog,
кнопку и в обработчик щелчка на ней вставьте операторы:

void_fastcall TFormI::ButtonlClick(TObject *Sender)
{
if (OpenPictureDialogl->Execute())

12 Зак. 764