352______________________________________________Глава 51

Теперь рассмотрим инструмент Перо, позволяющий рисовать произвольные,!
линии. Казалось бы естественной реализацией этого инструмента был бы следую-1
щий оператор, включаемый в обработчик события OnMouseMove:

Image3->Canvas->Pixels[X][У] = Imagel->Canvas->Brush->Color;

который окрашивает пиксель под курсором в основной цвет. Однако, попробуйте
так реализовать Перо и ничего хорошего не увидите. Курсор мыши перемещается
быстро и события OnMouseMove происходят вовсе не при перемещении на сосс,"
ний пиксель. Поэтому ваша линия распадется на отдельные точки, тем более рг.
кие, чем быстрее пользователь будет перемещать курсор. Линию, оставляем'
курсором, следует рисовать тоже методом LineTo, поместив в обработчик событ;:':

OnMouseMove оператор

Image3->Canvas->LineTo(X,Y) ;

Мы рассмотрели почти все инструменты, введенные в приложении рис. 5.1
Коротко перечислим оставшееся. Ластик реализуется методом FillRect, очищй
щим изображение под его рамкой. Кисть, отмена команд и загрузка внешнего ф:;

ла рассматривались в разделе 5.1.4. Сохранение файла осуществляется с исполь.
ванием компонента типа SavePictureDialog оператором

if (SavePictureDialogl->Execute())
(

BitMap->Assign(Image3->Picture);

BitMap->SaveToFile(SavePictureDiaiogl->FileName) ;

}

Изображение с холста сохраняется в компоненте Bitmap, из которого метод,
SaveToFile записывается в выбранный пользователем файл.

Команды меню Копировать и Вырезать осуществляются процедурой

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

// Стирание рамки)
Image3->Canvas->DrawFocusRect(R) ;

// Создание временного объекта ВМСору

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

BMCopy->Width = R.Right - R.Left;

BMCopy->Height = R.Bottom - R.Top;

try

(
// Копирование фрагмента в ВМСору

BMCopy->Canvas->CopyRect(Rect(0,0,BMCopy->Width,

BMCopy->Height),Image3->Canvas,R)
// Восстановление рамки

Image3->Canvas->DrawFocusRect(R) ;

// Копирование в Clipboard
Clipboard()->Assign(ВМСору) ;

if (Sender == MCut)

(
// Вырезание

Image3->Canvas->Brush->Color = clWhite;

Image3->Canvas->FillRect(R) ;

1
}

finally
f

/ Освобождение памяти
BMCopy->Free() ;

)