Приложение «Графический редактор»
В процессе рисования заранее неизвестно, какого цвета закрашенная область. Это можно определить с помощью свойства Pixels, в котором хранятся цвета всех точек изображения. Pixels — цвет точки канвы с координатами X, Y. Для закрашивания воспользуемся процедурой FloodFill класса Canvas, которая может работать в двух вариантах (различаются значением последнего параметра процедуры: fsBorder или… Читать ещё >
Приложение «Графический редактор» (реферат, курсовая, диплом, контрольная)
Цель работы — создать простейший графический редактор. Левой кнопкой мыши можно рисовать непрерывную кривую, правой — закрашивать выбранным цветом полученные области.
План работы:
- 1. Разместить на Форме компоненты Image, ColorGrid, SpinEdit.
- 2. Написать обработчик события отслеживания траектории движения мыши.
- 3. Написать обработчик события «перескакивания» курсора в новое положение без рисования траектории.
- 4. Написать обработчик события закрашивания.
- 5. Написать обработчик события изменения толщины линии.
- 6. Проверить работоспособность проекта.
Размещаем на форме требуемые компоненты (рис. 98).
Рис. 98. Окно проекта
Для отслеживания движения мыши напишем обработчик события OnMouseMove:
procedure TForml. ImagelMouseMove (Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then
Imagel.Canvas.LineTo (X, Y);
end;
Чтобы в момент нажатия кнопки «перескакивать» в новое положение без рисования траектории, напишем обработчик события OnMouseDown:
procedure TForml. ImagelMouseDown (Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
Imagel.Canvas.MoveTo (X, Y);
end;
Для закрашивания воспользуемся процедурой FloodFill класса Canvas, которая может работать в двух вариантах (различаются значением последнего параметра процедуры: fsBorder или fsSurface):
- 1) закрашивать область текущим цветом до границы заданного цвета;
- 2) перекрашивать точки заданного цвета до границы любого другого цвета (в этом случае граница может состоять из частей разного цвета).
Например, закрашивание области с границей черного цвета красным цветом:
Canvas.Brush.Color := clRed;
Canvas.FloodFill (X, Y, clBlack, fsBorder);
Перекрашивание красной области в синий цвет:
Canvas.Brush.Color := clBlue;
Canvas.FloodFill (X, Yj clRed, fsSurface);
В процессе рисования заранее неизвестно, какого цвета закрашенная область. Это можно определить с помощью свойства Pixels, в котором хранятся цвета всех точек изображения. Pixels [X, Y] — цвет точки канвы с координатами X, Y.
При изменении компонента ColorGrid будет изменяться и цвет закрашивания, и цвет линии:
procedure TForml. ColorGridlChange (Sender: TObject);
begin
Imagel.Canvas.Brush.Color := ColorGridl. BackgroundColor;
Imagel.Canvas.Pen.Color := ColorGridl. ForegroundColor;
end;
Поэтому обработчик OnMouseDown надо переписать:
procedure TForml. ImagelMouseDown (Sender: TObject; Button:
TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
with Imagel. Canvas do case Button of mbLeft:
MoveTo (X, Y); mbRight:
FloodFill (Xj Y, Pixels[X, Y], fsSurface);
end;
end;
Кроме того, можно изменять толщину линии с помощью компонента SpinEdit (вкладка Samples), который представляет собой поле ввода числового значения и стрелки вверх/вниз, с помощью которых можно прокручивать значения в поле ввода в заданных пределах (свойства MinValue и MaxValue). Границы, установленные для изменения значения TSpinEdit, можно изменять при вводе данных с клавиатуры. Поэтому, чтобы не возникла ошибка преобразования пустого значения в число, желательно запретить редактировать с клавиатуры значения поля ввода (свойство EditorEnabled = False).
Далее напишем обработчик события OnChange для объекта SpinEdit:
procedure TForml. SpinEditlChange (Sender: TObject);
begin
Imagel.Canvas.Pen.Width := SpinEditl. Value;
end;
Теперь протестируйте работу разработанного проекта (рис. 99).
Рис. 99. Демонстрация работы приложения