Графический редактор

Методика реализации графического редактора. Порядок построения графического интерфейса, реализация загрузки и сохранения файлов, рисования кистью, геометрических объектов, замкнутых областей, вывода файла на печать. Листинг полученной программы.

Рубрика Программирование, компьютеры и кибернетика
Вид практическая работа
Язык русский
Дата добавления 19.07.2012
Размер файла 189,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Задание

Реализовать программу - графический редактор

Требования к программе

Программа должна представлять пользователю MIDI - интерфейс для редактирования графических файлов формата .BMP и обеспечивать следующие возможности редактирования:

· Загрузку и сохранение файлов;

· Выбор цвета и толщины кисти;

· Рисование кистью;

· Рисование геометрических объектов (прямоугольников, эллипсов, окружностей);

· Заливку замкнутых областей;

· Выделение частей рисунка и функции работы с буфером обмена;

· Вывод редактируемого документа на печать.

Методические указания

В качестве компонента для редактирования использовать TImage.

Формализация

программа графический редактор рисование

1) Построить графический интерфейс графического редактора

2) Используя стандартные функции, методы и классы реализовать

· Загрузку и сохранение файлов;

· Выбор цвета и толщины кисти;

· Рисование кистью;

· Рисование геометрических объектов (прямоугольников, эллипсов, окружностей);

· Заливку замкнутых областей;

· Выделение частей рисунка и функции работы с буфером обмена;

· Вывод редактируемого документа на печать.

3) Проверить работоспособность программы

4) Сделать выводы.

Описание решения

Для написания графического редактора с заданным функционалом в среде Delphi 7, необходимо

1) Построить графический интерфейс;

2) Используя стандартные функции, методы и классы реализовать функциональные особенности поставленной задачи

1) Построить графический интерфейс

Для построения графического интерфейса нам понадобятся стандартные компоненты Delphi7:

Для функций

· Открыть

· Сохранить

· Копировать

· Вставить

· Вырезать

· Вывести на печать

· Очистить

· Выход

целесообразно создать меню программы при помощи стандартного компонента

MainMenu (находится во вкладе Standart)

Для того чтобы пользователь мог выбирать графические примитивы и использовать их в работе необходимо разместить панель инструментов в левой части графического редактора при помощи стандартного компонента

TPanel (находится во вкладке Standart)

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

SpeedButton (находится во вкладке Additional)

Нарисуем значки для этих кнопок и привяжем значки к кнопкам, чтобы было интуитивно понятно какая кнопка за что отвечает. Для этого в свойствах кнопки найдем параметр

Glyph и укажем путь к нашим значкам.

Для того чтобы можно было установить ширину линии кисти добавим на панель текстовое поле:

Label (находится во вкладке Standart)

Edit (находится во вкладке Standart)

UpDown (находится во вкладке Win32)

В свойствах Label в поле Caption напишем «Толщина»

Установим UpDown рядом с Edit для того чтобы было интуитивно понятно, что значение в Edit зависит от изменения UpDown.

Для того чтобы пользователь мог менять цвет установим еще одну панель, на этот раз внизу нашего графического редактора

TPanel (находится во вкладке Standart)

На панели разместим палитру цветов

TColorGrid (находится во вкладке Samples)

Рядом установим окно где будут отображаться изменения цветов

TBavel (находится во вкладе Stanart)

В окне TBavel расположим еще две панели, цвета которых будут соответствовать основному и вспомогательному цвету. Изменение цветов будет производится соответственно правым или левым кликом мышки по палитре цветов.

Для того чтобы после загрузки изображения, картинка не обрезалась из-за того, что размер нашего будущего холста меньше размера загружаемого изображения установим

TScrollBox (находится во вкладке Additional)

В его свойствах в параметре Align установим значение AllClient для того чтобы он занимал всю оставшуюся область.

На ScrollBox разместим хост на котором будет производится рисование

TImage (находится во вкладке Additional)

Разместим в произвольном месте на форме еще два вспомогательных TImage. Они будут служить для команд Undo и Redo (соответственно «отменить» и «вернуть обратно»).

Разместим на форме несколько вспомогательных элементов

TPrintDialog (находится во вкладке Dialogs)

TOpenPicture (находится во вкладке Dialogs)

TSavePicture (находится во вкладке Dialogs)

2) Используя стандартные функции, методы и классы реализовать функциональные особенности поставленной задачи.

Открыть / Сохранить

Для того, чтобы мы могли открывать изображения и сохранять нарисованное нами необходимо в обработчике событий по нажатию соответствующих кнопок (Открыть / Сохранить), используя TOpenPicture и TSavePicture перенести на холст или вывести из холста изображение в BMP файл.

Вывод на печать

Для того чтобы мы могли вывести на печать изображение необходимо подключить модуль отвечающий за печать. В Делфи этот модуль называется

Printers

Далее в обработчике событий по нажатию кнопки «Печать» необходимо используя

TPrintDialog.

Основные функции для печати

BeginDoc вызывается перед тем, как начать рисовать на канве

EndDoc - вызывается, когда все необходимое уже нарисовано на канве, принтер начинает печатать именно после этого метода.

NewPage - переход на новую страницу.

Canvas. Draw (0,0, Img1. Picture. BitMap) - рисуем все что нужно нашем TImage.

StretchDraw (Rect (0,0,300,300), Img1. Picture. BitMap) - рисует графику в прямоугольнике, растягивая ее до размеров результирующего прямоугольника (Rect(…)).

Очистить

Здесь все просто: необходимо удалить все, что находится на основном TImage и вспомогательных. Для этого нам поможет константа nil (ничего). Действие происходит по нажатию «Очистить».

Image. Picture:= nil;

Undo/Redo

Для того, чтобы реализовать функции отмены действия и повтора действия нам потребуются вспомогательные TImage. При нажатии на клавишу мыши дублируем все, что у нас есть в основном TImage на вспомогательный. А при нажатии на «Отменить» (Undo) дублируем все с вспомогательного на основной и на третий TImage. Когда нажимаем на «Повторить» (Redo) дублируем все с третьего TImage на основной.

Копировать / Вырезать

Для того чтобы осуществить копирование нам потребуется работа с буфером обмена. Для занесения данных в буфер обмена используется функция Clipboard. В нашем случае при нажатии на клавишу мыши по холсту запоминаются координаты. То же самое происходит когда мы отпускаем клавишу мышки. При нажатии на «копировать» (Ctrl+C) создается переменная класса BitMap

BitMap - это графический объект, который содержит заголовок, необходимую информацию о картинке (такую как высота, ширина, цвета и т.д.) и, собственно, само изображение (большой массив, содержащий цвет каждой точки).

Затем при в этот битмап копируется часть которую мы выделили (по координатам) при помощи функции CopyRect (X, Y, Z) она имеет три параметра.

1. Куда мы копируем изображение. В нашем случает это прямоугольная область с координатам начала (0,0) и шириной и высотой выделенной области

2. Откуда мы копируем изображение. В нашем случае это основной Timage.

3. Какую часть изображения мы копируем. В нашем случае это прямоугольная область с координатами начала выделения и конца выделения.

Дальше нам необходимо очистить буфер обмена от старых данных. Это производится функцией Clear.

После мы засовываем в буфер обмена командой Clipboard все что у нас есть в нашем битмапе (так как в битмап мы поместили лишь то что необходимо скопировать)

Вырезать

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

Вставить

Процедура вставить осуществляется с помощью функции CopyRect (описана выше). Мы копируем изображение из битмапа с начальным координатами, которые мы получили при нажатии на кнопку мышки.

Карандаш

Ширина линии карандаша всегда остается не изменой и ровна 1px. В зависимости от того какая кнопка мыши нажата (Правая или Левая) устанавливается цвет карандаша соответственно основной или вспомогательный. Цвета предварительно выбираются так же нажатиями правой или левой кнопкой мыши и сохраняются. В обработчике события

MouseMove - событие, которое происходит, когда мы двигаем мышку с зажатой клавишей, выполняется функция

LineTo (x, y) - рисует линию с координатами x, y

Так как команда LineTo выполняется в обработчике событий MouseMove, то координаты x, y постоянно меняются, что приводит к вырисовыванию цельной линии.

Кисть

Рисование кистью производится аналогично рисованию карандашом. Единственное отличие в том, что у кисти параметр ширины линии может изменяться и зависит от заданного целочисленного значения, которое пользователь меняет в TEdit при помощи кнопок UpDown.

Ластик

Функция ластика осуществляется идентично функции кисти. Отличается тем, что цвет проводимой линии всегда строго вспомогательный (это обусловлено тем, что вспомогательный цвет по дефолту «белый», как и основной цвет холста. Пользователь редко меняет вспомогательный цвет для линии (изменить вспомогательный цвет можно щелкнув правой кнопкой мыши по нужному цвету из палитры). Поэтому предполагается, что вспомогательный цвет зачастую белый. Но так же не исключена возможность изменить цвет, если пользователь решил поменять цвет фона, предварительно залив холст нужным цветом.

Заливка

Заливка использует два цвета: основной и вспомогательный. Основной - левая кнопка мыши, вспомогательный - правая кнопка мыши. Цвета предварительно устанавливаются пользователем. Заливка производится функцией

FloodFill - Заполняет данную область цветом текущей кисти, до тех пор пока не будет достигнут край

FloodFill (x, y, color, fsBorder); - имеет 3 параметра.

1. Координаты точки в которую указали заливку.

2. Цвет заливки.

3. fsSurface - заливает ту часть, цвет которой совпадает с опорным цветом, т.е. заливка в этом случае останавливается при нахождении любого другого цвета.

Круг - Эллипс

Для того, чтобы нарисовать круг - эллипс нам потребуется функция

Ellipse (x, y, x1, y1) - где x, y - координаты верхнего левого угла прямоугольника, x1, y1 - координаты нижнего правого угла прямоугольника.

В результате функция рисует круг - эллипс вписанный в прямоугольник с заданным координатами.

Пользователь может выбрать режим рисования:

1. С заливкой;

2. Без заливки;

Если пользователь выбирает режим без заливки, то стиль функции

Brush - кисть используется для заполнения области определённым цветом.

Brush. Style - доступ к стилю.

Задается

bsClear - область внутри круга - эллипса пустая

Если пользователь выбирает режим с заливкой, то стиль функции Brush задается

bsSolid - область внутри круга - эллипса заливается стандартным цветом (белым).

Для рисования круга - эллипса так же используются цвета (основной и вспомогательный) и ширина рамки, которая задается пользователем и является аналогом ширины кисти или карандаша.

Прямоугольник

Для того, чтобы нарисовать прямоугольник нам потребуется функция

Rectangle (x, y, x1, y1) - где x, y - координаты верхнего левого угла прямоугольника, x1, y1 - координаты нижнего правого угла прямоугольника.

В результате функция рисует прямоугольник с заданным координатами.

Пользователь может выбрать режим рисования:

1. С заливкой;

2. Без заливки;

Если пользователь выбирает режим без заливки, то стиль функции

Brush - кисть используется для заполнения области определённым цветом.

Brush. Style - доступ к стилю.

Задается

bsClear - область внутри прямоугольника пустая

Если пользователь выбирает режим с заливкой, то стиль функции Brush задается

bsSolid - область внутри прямоугольника заливается стандартным цветом (белым).

Для рисования прямоугольника так же используются цвета (основной и вспомогательный) и ширина рамки, которая задается пользователем и является аналогом ширины кисти или карандаша.

Выделение части рисунка

Выделение части рисунка необходима для того, чтобы идентифицировать часть, которую необходимо скопировать или вырезать.

Выделение части рисунка осуществляется функцией

DrawFocusRect - выделяет часть рисунка пунктирной линией.

Эта функция похожа на функцию Rectangle. Она так же имеет несколько параметров.

DrawFocusRect (Rect(x1, y1, x2, y2)) - прямоугольник фокуса, где x1, y1 - координаты верхнего левого угла прямоугольника, x2, y2 - координаты нижнего правого угла прямоугольника.

DrawFocusRect является функцией XOR, поэтому повторный его вызов после рисования прямоугольника фокуса приводит к стиранию прямоугольника фокуса.

Анализ результатов

Написанный графический редактор выполняет все основные функции современных редакторов. В его функционал входят рисование графических примитивов (линий, прямоугольников, эллипсов, кругов), изменение толщины линии рисуемого объекта, возможность устанавливать основной и вспомогательный цвет линий. Геометрические фигуры прямоугольник, эллипс и круг можно рисовать с заливкой или без. При использовании рисования с заливкой мы получаем замкнутую область, внутренняя часть которой закрашена в белый цвет. Рисование без заливки напоминает рисование рамки, то есть внутренняя часть замкнутой области остается не тронутой, прорисовывается лишь контур геометрический фигуры (прямоугольник, круг, эллипс). Графический редактор может сохранять изображение в BMP формате, а так же открывать уже готовые изображения так же в формате BMP. Осуществлена функция вывода на печать графического изображения, а так же возможности работы с буфером обмена. При необходимости можно выделить часть рисунка, не испортив его, и осуществить не большой функционал с выделенной частью (копировать, вырезать). В редакторе предусмотрена возможность стирания некоторой части рисунка, для этого реализованы возможности ластика. При необходимости можно закрасить замкнутую область в нужный цвет воспользовавшись заливкой. Реализована возможность отменить последнее действие или вернутся на один шаг вперед (Undo/Redo). При необходимости в графическом редакторе реализована возможность очистить поле (изображение).

2. Иерархия классов

Листинг Программы(Код)

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ColorGrd, ComCtrls, StdCtrls, Buttons, ExtCtrls, Menus, Printers, ClipBrd, ExtDlgs;

type

TForm1 = class(TForm)

Mmenu: TMainMenu;

a1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

pnl1: TPanel;

rubber: TSpeedButton;

pouring: TSpeedButton;

brush: TSpeedButton;

circle: TSpeedButton;

rectangle: TSpeedButton;

edt1: TEdit;

ud1: TUpDown;

pnl2: TPanel;

clrgrd1: TColorGrid;

bvl1: TBevel;

secondColor: TPanel;

genColor: TPanel;

scrlbx1: TScrollBox;

img1: TImage;

OpenPic: TOpenPictureDialog;

SavePic: TSavePictureDialog;

lbl1: TLabel;

img2: TImage;

img3: TImage;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

NoFilling: TRadioButton;

Fillin: TRadioButton;

N1: TMenuItem;

PrintD: TPrintDialog;

select: TSpeedButton;

MCopy: TMenuItem;

MPaste: TMenuItem;

MCut: TMenuItem;

N13: TMenuItem;

pen: TSpeedButton;

procedure FormCreate (Sender: TObject);

procedure N2Click (Sender: TObject);

procedure ud1Click (Sender: TObject; Button: TUDBtnType);

procedure clrgrd1Change (Sender: TObject);

procedure img1MouseMove (Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure edt1Change (Sender: TObject);

procedure img1MouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure penClick (Sender: TObject);

procedure N7Click (Sender: TObject);

procedure N8Click (Sender: TObject);

procedure N10Click (Sender: TObject);

procedure brushClick (Sender: TObject);

procedure rectangleClick (Sender: TObject);

procedure circleClick (Sender: TObject);

procedure rubberClick (Sender: TObject);

procedure pouringClick (Sender: TObject);

procedure N3Click (Sender: TObject);

procedure N5Click (Sender: TObject);

procedure img1MouseUp (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure N1Click (Sender: TObject);

procedure edt1KeyPress (Sender: TObject; var Key: Char);

procedure selectClick (Sender: TObject);

procedure MCopyClick (Sender: TObject);

procedure MCutClick (Sender: TObject);

procedure MPasteClick (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

Form1:TForm1; // обьявление формы

BitMap:TBitmap; // изображение для печати

CopyBitMap:TBitmap; // изображение для копирования

x1, y1, x2, y2, x0, y0, x3, x4, y3, y4, xcop, ycop, // обьявление координат

fat: integer; // обьявление толщины линии

mb: char; // обьявление формы

flag, front: integer; // обьявление формы

backp, nextp: boolean; // обьявление переменных для возврщения и перехода вперед

Capturing: bool; // выделение части рисунка

Captured: bool; // выделение части рисунка

StartPlace: TPoint; // точки начала прямоугольной области

EndPlace: TPoint; // точки конца прямоугольной области

open: Boolean; // загружено ли изображение

Can: Boolean; // нажата ли какая-нибудь кнопка после выделения фрагмента

implementation

{$R *.dfm}

procedure TForm1. FormCreate (Sender: TObject);

begin

open:=False;

Can:=false;

rechoose:=false;

ud1. Visible:=false;

MCut. Enabled:=False;

MCopy. Enabled:=False;

img1. Canvas. FillRect (img1. Canvas. ClipRect);

img2. Canvas. FillRect (img2. Canvas. ClipRect);

img3. Canvas. FillRect (img3. Canvas. ClipRect);

SavePic. DefaultExt:= 'bmp';

end;

procedure TForm1.N2Click (Sender: TObject);

begin

open:=True;

pen. Down:=false;

img1. AutoSize:= true;

OpenPic. Execute;

img1. Picture. LoadFromFile (OpenPic. FileName);

end;

procedure TForm1.ud1Click (Sender: TObject; Button: TUDBtnType); // упрвление ползунком

begin

front:= StrToInt (edt1. Text); // преобразование в числовое значение (начальная позиция)

if front <> 0 then

begin

if Button = btprev then // уменьшение на 1

begin

dec(front);

if front = 0 then

front:= 1;

edt1. Text:= IntToStr(front); // преобразование в строку

end;

if Button = btnext then // увеличение на 1

begin

Inc(front);

edt1. Text:= IntToStr(front); // преобразование в строку

end;

end;

end;

procedure TForm1.clrgrd1Change (Sender: TObject);

begin

genColor. Color:= clrgrd1. ForegroundColor; // установка основного цвета

secondColor.color:= clrgrd1. BackgroundColor; // установка второстеменного цвета

end;

procedure TForm1.img1MouseMove (Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

if ((ssRight in Shift) or (ssLeft in Shift)) then // определяет нажата ли правая или левая клавиша мыши

begin

backp:= true; // флаг отменить сделанное действие

nextp:= false; // флаг повторить

if rubber. Down then // выбран ластик

begin

img1. Canvas. Pen.color:=secondColor. Color; // присвоить цвет

img1. Canvas.pen. Width:=strtoint((edt1.text)); // ширина ластика

Img1. Canvas.lineto (x, y); // прорисовка линии

end;

if (pen.down) and (open=false) then // выбран карандаш

begin

if mb = 'l' then // отменить сделанное действие

img1. Canvas. Pen. Color:= genColor. Color // использовать основной цвет

else

img1. Canvas. Pen. Color:= secondColor. Color; // использовать вспомогательный цвет

img1. Canvas. LineTo (x, y); // рисовать линию

end;

if brush. Down then // выбрана кисть

begin

img1.canvas. Pen. Width:= strtoint (edt1. Text); // присвоить заданную ширину кисти

if mb = 'l' then

img1. Canvas. Pen. Color:= genColor. Color // использовать основной цвет

else

img1. Canvas. Pen. Color:= secondColor. Color; // использовать вспомогательный цвет

img1.canvas.lineto (x, y); // рисовать линию

end;

if circle. Down then // выбран элипс-круг

begin

img1.picture. Assign (img2.picture);

img1. Canvas.pen. Width:= strtoint (edt1.text); // установить ширину линии

if mb = 'r' then

img1. Canvas. Pen.color:= secondColor. Color // установить вспомогательный цвет

else

Img1. Canvas. Pen.color:= genColor.color; // установить основной цвет цвет

if noFilling.checked = true then // выбран вариант без заливки

img1. Canvas. Brush. Style:= bsClear

else

img1. Canvas. Brush. Style:= bsSolid;

Img1. Canvas.ellipse (x, y, x1, y1); // рисовать элипс-круг

end;

if rectangle. Down then

begin

img1.picture. Assign (img2.picture);

img1. Canvas.pen. Width:= strtoint (edt1.text); // установка ширины линии

if mb = 'r' then

img1. Canvas. Pen.color:= secondColor. Color // установка вспомогательного цвета

else

Img1. Canvas. Pen.color:= genColor.color; // установка оснвного цвета

if noFilling. Checked = true then // выбран вариант без заливки

img1. Canvas. Brush. Style:= bsClear

else

img1. Canvas. Brush. Style:= bsSolid;

img1. Canvas. Rectangle (x, y, x1, y1); // рисовать прямоугольник

end;

if (select.down) and (Capturing) then

begin

Img1. Canvas. Brush. Style:= bsSolid;

(Sender as TImage).Canvas. DrawFocusRect (Rect(StartPlace, EndPlace));

EndPlace.x:= X;

EndPlace.y:= Y;

x4:=x;

y4:=y;

(Sender as TImage).Canvas. DrawFocusRect (Rect(StartPlace, EndPlace));

end;

end;

end;

procedure TForm1.img1MouseUp (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if pouring. Down then // нажата кнопка заливка

begin

if button = mbRight then // правой кнопкой мыши

Img1. Canvas.brush.color:= secondColor. Color // использовать вспомогательный цвет

else

Img1. Canvas.brush.color:= genColor. Color; // использовать основной цвет

Img1. Canvas. FloodFill (x, y, Img1. Canvas. Pixels [x, y], fssurface); // заливка замкнутой области

end;

Capturing:= false;

end;

procedure TForm1.img1MouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

if (rectangle. Down) or (pen. Down) or (brush. Down)

or (circle. Down) or (rubber. Down) or (pouring. Down) then

(Sender as TImage).Canvas. DrawFocusRect (Rect(StartPlace, EndPlace));

if Can then (Sender as TImage).Canvas. DrawFocusRect (Rect(StartPlace, EndPlace));

xcop:=x;

ycop:=y;

img2.picture. Assign (img1. Picture); // сохраняет в img2 то что получилось в img1

x1:= x;

y1:= y;

if button = mbRight then // нажатие правой кнопкой мышки

mb:= 'r'

else // нажатие левой кнопкой мышки

mb:= 'l';

img1. Canvas. MoveTo (x, y); // устанавливает начальное значение для прорисовки, по дефолту от 0.0

Img1MouseMove (Sender, Shift, X, Y);

x3:=X;

y3:=Y;

if (Captured) and (select. Down) then

(Sender as TImage).Canvas. DrawFocusRect (Rect(StartPlace, EndPlace)); // стирает прежнюю рамку (перерисовывает с каоординатами начала)

if select. Down then

begin

MCut. Enabled:=True;

MCopy. Enabled:=True;

rechoose:=false;

end;

StartPlace.x:= X;

StartPlace.y:= Y;

EndPlace.x:= X;

EndPlace.y:= Y;

(Sender as TImage).Canvas. DrawFocusRect (Rect(StartPlace, EndPlace)); // перерисоввает рамку (.)

Capturing:= true;

Captured:= true;

can:=False;

end;

procedure TForm1.edt1Change (Sender: TObject); // изменение толщины

begin

fat:= strtoint (edt1.text); // преобразование из строки в числовое значение

if not pen. Down then

img1. Canvas. Pen. Width:= fat; // ширина проводимой линии

end;

procedure TForm1.penClick (Sender: TObject);

begin

open:=False;

Can:=true;

img1. Canvas. Pen. Width:= 1;

lbl1. Visible:= False;

edt1. Visible:= False;

noFilling. Visible:= false;

Fillin. Visible:= false;

ud1. Visible:=False;

end;

procedure TForm1.N7Click (Sender: TObject); // вернуть на 1 шаг назад

begin

if backp = true then

begin

img3.picture. Assign (img1. Picture); // сохраняет в img3 то что мы нарисовали

img1.picture. Assign (img2. Picture); // выводит в img1 то что мы сохранили 1 шаг назад

nextp:= true;

end;

backp:= false;

end;

procedure TForm1.N8Click (Sender: TObject); // на 1 шаг вперед

begin

if nextp = true then

begin

img2. Picture. Assign (img1. Picture); // сохраняет в img2 то что мы нарисовали

img1. Picture. Assign (img3. Picture); // выводит в img1 то что мы сохранили в img3

backp:= true;

end;

nextp:= false;

end;

procedure TForm1.N10Click (Sender: TObject); // очистить

begin

can:=True;

img1. Picture:= nil;

img1. Canvas. FillRect (img1. Canvas. ClipRect);

img2. Picture:= nil;

img2. Canvas. FillRect (img2. Canvas. ClipRect);

img3. Picture:= nil;

img3. Canvas. FillRect (img3. Canvas. ClipRect);

backp:= true;

nextp:= true;

end;

procedure TForm1.brushClick (Sender: TObject); // нажатие на кисть

begin

lbl1. Visible:= true;

edt1. Visible:= true;

ud1. Visible:= true;

noFilling. Visible:= false;

Fillin. Visible:= false;

rechoose:=True;

end;

procedure TForm1.rectangleClick (Sender: TObject); // нажатие на прямоугольник

begin

lbl1. Visible:= true;

edt1. Visible:= true;

ud1. Visible:= true;

noFilling. Visible:= true;

Fillin. Visible:= true;

end;

procedure TForm1.circleClick (Sender: TObject); // нажатие на круг-элипс

begin

lbl1. Visible:= true;

edt1. Visible:= true;

ud1. Visible:= true;

noFilling. Visible:= true;

Fillin. Visible:= true;

end;

procedure TForm1.rubberClick (Sender: TObject); // нажатие на ластик

begin

lbl1. Visible:= true;

edt1. Visible:= true;

ud1. Visible:= true;

noFilling. Visible:= false;

Fillin. Visible:= false;

end;

procedure TForm1.pouringClick (Sender: TObject);

begin

lbl1. Visible:= False;

edt1. Visible:= False;

ud1. Visible:=False;

noFilling. Visible:= false;

Fillin. Visible:= false;

end;

procedure TForm1.N3Click (Sender: TObject);

begin

if SavePic. Execute then

img1. Picture.savetofile (SavePic.fileName);

end;

procedure TForm1.N5Click (Sender: TObject);

begin

form1. Close;

end;

procedure TForm1.N1Click (Sender: TObject);

begin

PrintD. Execute;

with Printer do

begin

BeginDoc;

Canvas. Draw (0,0, Img1. Picture. BitMap);

NewPage;

Canvas. StretchDraw (Rect(0,0,300,300), Img1. Picture. BitMap);

EndDoc;

end;

end;

procedure TForm1.edt1KeyPress (Sender: TObject; var Key: Char); // проверка на ввод чисел для ширины

const Digit: Set of Char=['0'. '9'];

begin

if not (Key in Digit) then

Key:=#0;

end;

procedure TForm1.selectClick (Sender: TObject);

begin

lbl1. Visible:= False;

edt1. Visible:= False;

noFilling. Visible:= false;

Fillin. Visible:= false;

ud1. Visible:=False;

end;

procedure TForm1.MCopyClick (Sender: TObject);

begin

can:=true;

CopyBitMap:= TBitMap. Create;

CopyBitMap. Width:= x4 - x3;

CopyBitMap. Height:= y4 - y3;

Clipboard. Clear;

CopyBitMap. Canvas. CopyRect (Rect(0,0, CopyBitMap. Width, CopyBitMap. Height), img1. Canvas, Rect (x3+1, y3+1, x4-1, y4-1));

Clipboard. Assign(CopyBitMap);

end;

procedure TForm1.MCutClick (Sender: TObject);

begin

can:=true;

CopyBitMap:= TBitMap. Create;

img1. Canvas. Pen. Width:= 1;

CopyBitMap. Width:= x4 - x3;

CopyBitMap. Height:= y4 - y3;

Clipboard. Clear;

CopyBitMap. Canvas. CopyRect (Rect(0,0, CopyBitMap. Width, CopyBitMap. Height), img1. Canvas, Rect (x3+1, y3+1, x4-1, y4-1));

Clipboard. Assign(CopyBitMap);

img1. Canvas. Pen.color:= clWhite;

img1. Canvas. Brush. Style:= bsSolid;

img1. Canvas. Brush.color:= clWhite;

img1. Canvas. Rectangle (x3, y3, x4, y4);

img1. Canvas. DrawFocusRect (Rect(0,0,0,0));

end;

procedure TForm1.MPasteClick (Sender: TObject);

begin

img1. Canvas. CopyRect (Rect(xcop, ycop, xcop+CopyBitMap. Width, ycop+CopyBitMap. Height), CopyBitMap. Canvas, Rect (0,0, CopyBitMap. Width, CopyBitMap. Height));

end;

end.

Вывод

Поставлена задача разработать графический редактор с определенным функционалом в среде Delphi.

В ходе работы получены знания о возможностях работы с графикой в среде Delphi7, а так же о работе с буфером обмена и модулем отвечающим за вывод информации на принтер.

Используя стандартные методы и функции, удалось построить графический редактор удовлетворяющий поставленной задаче.

Размещено на Allbest.ru


Подобные документы

  • Функционально-структурная организация персонального компьютера. Операционная система Windows. Функции стандартизации программы графического редактора Paint. Рисование геометрических объектов и оформление рисунков с помощью графического редактора Paint.

    курсовая работа [680,1 K], добавлен 03.12.2008

  • Изучение компьютерной программы – графического редактора Paint, ее возможности и основные приемы работы. Панель инструментов, редактирование рисунка. Составление и реализация школьных уроков в начальной школе по изучению графического редактора Paint.

    курсовая работа [865,0 K], добавлен 28.04.2014

  • Изучение особенностей растровых и векторных графических редакторов. Создание графического редактора: выбор языка программирования, разработка структуры программы и алгоритма работы. Описание интерфейса программы. Руководство программиста и пользователя.

    курсовая работа [1,3 M], добавлен 28.07.2013

  • Разработка и реализация графического редактора сетей Петри. Описание программы, которая позволяет создавать новые сети путем добавления позиций и переходов, соединяя их определенным образом. Основы построения систем автоматизационного проектирования.

    курсовая работа [2,6 M], добавлен 21.06.2011

  • Функциональные возможности графического редактора Paint. Устройства персонального компьютера и их назначения. Стандартные программы операционной системы Windows. Приложения системы графического редактора к решению задач графики, теоретической механики.

    курсовая работа [156,5 K], добавлен 05.12.2008

  • Изучение основных алгоритмов генерации различных видов фракталов. Выбор языка и среды программирования. Характеристика структурных элементов растрового графического редактора фракталов. Описание интерфейса приложения, порядок редактирования изображений.

    курсовая работа [1,2 M], добавлен 04.04.2014

  • Сущность, задачи и особенности объектно-ориентированного программирования. Создание и редактирование графических файлов при помощи различных инструментов рисования. Основные требования к аппаратному и программному обеспечению. Руководство пользователя.

    курсовая работа [270,9 K], добавлен 09.03.2009

  • Глобальные системы координат GDI. Отображение основных графических объектов. Основные и дополнительные средства для рисования линий. Растровые изображения и метафайлы. Обзор и создание зависимых и независимых от графического устройства битмапов.

    лекция [498,8 K], добавлен 24.06.2009

  • Функции графического редактора Paint. Сохранение документов, вставка, перемещение, копирование, удаление. Многократное увеличение или уменьшение инструмента. Полная палитра, выбор третьего цвета для рисования, пипетка, заливка, пользовательская кисть.

    контрольная работа [22,3 K], добавлен 27.07.2009

  • Создание с помощью графического редактора логотипа и баннера для образовательного сайта "Областные математические олимпиады". Типы логотипов, баннер как графический элемент страницы сайта. Обзор инструментов графического редактора Adobe Illustrator.

    курсовая работа [2,9 M], добавлен 08.02.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.