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

Рис. 5.11

Редактор
изображений в
работе:

тестовая

картинка (а) и
работа с

изображением,
загруженным
из файла (б)

5. Перенесите на форму кнопку типа TSpeedButton и расположите ее в верхнем
левом углу формы. Эта кнопка будет соответствовать кисти — типичному ин-
струменту графических редакторов. Назовите ее SBBrush. Установите у кноп-
ки свойство Grouplndex равным 1 и свойство AllowAHUp в true. Эти свойства
обеспечат кнопке возможность фиксироваться в нажатом и не нажатом состоя-
нии (см. раздел 3.3.3). Желательно загрузить в свойство Glyph пиктограмму
кисти (файл ..\lmages\Buttons\brush.bmp).

6. Перенесите на форму еще одну кнопку типа TSpeedButton и расположите ее
ниже SBBrush. Эта кнопка будет соответствовать указателю цвета пикселя ри-
сунка. Назовите ее SBColor. Установите у этой кнопки, как и у предыдущей,
свойство Grouplndex равным 1 (это обеспечит, что только одна из двух кнопок
может быть нажата) и свойство AllowAHUp в true. Желательно загрузить в
свойство   Glyph   пиктограмму   (например,   файл   ..\lmages\   But-
tons\one2one.bmp).

7. Перенесите на форму диалог OpenPictureDialog.

8. Перенесите на форму главное меню MainMenu. В меню задайте раздел Файл с
подразделом Открыть. Назовите этот подраздел МОреп. Задайте еще один раз-
дел — Правка с подразделом Отменить. Назовите этот подраздел Undo.

Теперь размещение компонентов закончено и можно писать обработчики со-
бытий. Начнем со второстепенных обработчиков.

9. В заголовочный файл модуля включите оператор:

Graphics : :TBitmap *BitMap = new Graphics : .•TBitmap;

Этот оператор создает объект BitMap типа TBitmap. В этот объекте будет со-
храняться изображение, чтобы его можно было восстановить командой Отме-
нить.

10. Для события OnCreate формы напишите обработчик вида:

// задание свойств кисти основного и вспомогательного цветов

Imagel->Canvas->Brush->Color = clBlack;

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

// заполнение окон основного и вспомогательного цветов

Imagel->Canvas->FillRect(Rect(0,0,Imagel->Width,Imagel->Height));

Image2->Canvas->FillRect(Rect(0,0,Image2->Width,Image2->Height)) ;

// задание ширины элемента палитры цветов

int HW = Image4->Width / 10;

// закраска элементов палитры цветов