У вас вопросы?
У нас ответы:) SamZan.net

Задание на курсовое проектирование

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 28.12.2024

Задание на курсовое проектирование.

Создание графического редактора в среде программирования BORLAND DELFI.

Словесное описание алгоритма программы.

При запуске программы выводится главное окно, состоящее из холста (Image), главного меню, панели работы с файлом и различных элементов для работы над рисунком (RadioGroup, SpinEdit, Edit, CheckBox, ButtonGroup). При запуске программы происходит окраска холста в белый цвет.

На панели выбора инструментов доступно 9 стилей рисования на холсте: карандаш, заливка, прямая линия, ломаная линия, эллипс, закрашенный эллипс, прямоугольник, закрашенный прямоугольник и вывод текста.

При включенном режиме карандаша (и по умолчанию) на холст наносится линия, соединяющая место, где была нажата кнопка мыши, с местом, где она была отпущена по траектории ее движения (функция LineTo). В режиме заливки происходит заполнение области до ближайшего контура цвета, которым идет заполнение (функция FloodFill). Режим прямой линии схож с режимом карандаша, с той лишь разницей, что точка начала и конца нажатия кнопки соединяется по прямой. Эта разница достигается за счет разницы процедур, при которых выполняются функции LineTo и MoveTo (FormMouseMove – для карандаша и FormMouseUp – для прямой). Режим ломаной линии наносит прямую на каждое нажатие кнопки мыши. Для него вводится запрет на прорисовку первой линии. Это сделано для того, чтобы не рисовалась линия к первой указанной точке.

Для построения эллипсов и прямоугольников вводятся дополнительные константы X0 и Y0, чтобы зафиксировать первые две координаты фигуры. При нажатии кнопки мыши происходит фиксация первых двух координат, а при отпускании задаются две другие. Между собой эти режимы отличаются способом закраски внутренней области:  без заливки и с заливкой соответственно (свойство Brush).

В режиме ввода текста на панно выводится строка, написанная в области в правом нижнем углу окна (Edit). Строка выводится в указанное место нажатием кнопки мыши.

Панель выбора стиля линии позволяет задать необходимый тип линии (для всех инструментов, кроме заливки и вывода текста). Доступно 5 стилей: сплошная линия, пунктирные линии: с длинными штрихами, с короткими штрихами, с чередованием длинного и короткого штрихов, с чередованием одного длинного и двух коротких штрихов. Толщина пунктирной линии не может быть больше 1, поэтому при выборе 2-5 типов толщина автоматически устанавливается равной 1.

Поле ввода толщины линии позволяет выбрать значения в пределах от 1 до 20 пикселов. Так как пунктирная линия не может быть толще 1, то при установке значения большего, чем один, стиль линии автоматически устанавливается  сплошным.

Панель “Стиль заливки” позволяет выбрать тип заполнения областей для инструментов: заливка, закрашенный эллипс и закрашенный прямоугольник. Доступно 7 стилей: сплошная заливка, горизонтальная штриховка, вертикальная штриховка, диагональная штриховка с наклоном линий вперед и назад, горизонтально-вертикальная штриховка в клетку, и диагональная штриховка в клетку.

Ниже холста находится цветовая палитра. В ней указывается цвет линии, заливки и шрифта. Всего доступно 20 основных цветов. Кнопка “Расширенная палитра” открывает диалоговое окно стандартной палитры, где можно выбрать подходящий цвет из всех доступных на компьютере.

В правом нижнем углу находится панель работы с текстом: поле для ввода текста, поле изменения размера шрифта и кнопка включения курсива. По умолчанию стоит 8 шрифт, всего же доступны размеры от 6 до 72. Кнопка включения курсива работает по принципу CheckBox, если кнопка нажата, устанавливается курсивный стиль шрифта, если нет (и по умолчанию) шрифт обычный.

Раздел “Вид” главного меню позволяет настроить видимость элементов окна: панели инструментов, параметров линии, параметров заливки, параметров текста и палитры. Если метка напротив пункта стоит, то элементы видимы и активны, если нет – невидимы и неактивны (свойства Enabled и Visible).

При выборе пункта меню “Атрибуты рисунка” или при нажатии клавиш ‘Ctrl + A’ открывается новое окно, в котором задаются ширина и длина холста (элементы SpinEdit). При нажатии кнопки ‘OK’, окно закрывается и для размеров холста устанавливаются выбранные значения. При выборе пункта “О программе” (F2) также открывается новое окно. Для его закрытия достаточно нажать кнопкой мыши в любое место формы.

На панели работы с файлом и в первом разделе меню находятся основные пункты работы с файлом. Кнопка “Новый рисунок” очищает холст созданием белого прямоугольника (две координаты – по 0, две координаты – на длину и на ширину холста). Кнопки загрузки и сохранения рисунка открывают соответствующие диалоговые окна (доступны форматы bmp, ico, emf, wmf). Кнопка Выход осуществляет закрытие программы.

Структурная схема алгоритма программы

 

Выбор стиля линии

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

Работа инструментов

 

 

Очистка экрана

Включение и

выключение панелей

Данный алгоритм работает для всех пяти пунктов раздела «Вид» главного меню.

Распечатка программы.

program Project1;

uses

 Forms,

 Unit1 in 'Unit1.pas' {Form1},

 ImageSize in 'ImageSize.pas' {ImageSizeForm},

 About in 'About.pas' {AboutForm};

{$R *.res}

begin

 Application.Initialize;

 Application.CreateForm(TForm1, Image1);

 Application.CreateForm(TImageSizeForm, ImageSizeForm);

 Application.CreateForm(TAboutForm, AboutForm);

 Application.Run;

end.

…………………………………………………………………………..

unit Unit1;

interface

uses

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

 Dialogs, ExtCtrls, StdCtrls, Menus, ButtonGroup, Buttons, ExtDlgs, Spin,

 ImgList;

type

 TForm1 = class(TForm)

   Image1: TImage;

   MainMenu: TMainMenu;

   No: TMenuItem;

   N1: TMenuItem;

   instr: TMenuItem;

   N2: TMenuItem;

   BGColor: TButtonGroup;

   RGInstr: TRadioGroup;

   Panel1: TPanel;

   SBOpen: TSpeedButton;

   SBSave: TSpeedButton;

   SBQuit: TSpeedButton;

   SBNew: TSpeedButton;

   OPDialog: TOpenPictureDialog;

   SPDialog: TSavePictureDialog;

   N4: TMenuItem;

   N5: TMenuItem;

   N6: TMenuItem;

   N7: TMenuItem;

   N8: TMenuItem;

   Atrib: TMenuItem;

   SEPenWidth: TSpinEdit;

   LLineSize: TLabel;

   RGPenStyle: TRadioGroup;

   ImageList1: TImageList;

   RGBrushStyle: TRadioGroup;

   EditText: TEdit;

   SETextSize: TSpinEdit;

   CBTextStyle: TCheckBox;

   LTextSize: TLabel;

   line: TMenuItem;

   brush: TMenuItem;

   text: TMenuItem;

   palette: TMenuItem;

   N3: TMenuItem;

   About: TMenuItem;

   ColorDialog: TColorDialog;

   SBPalette: TSpeedButton;

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

     Y: Integer);

   procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

     Shift: TShiftState; X, Y: Integer);

   procedure FormMouseUp(Sender: TObject; Button: TMouseButton;

     Shift: TShiftState; X, Y: Integer);

   procedure ClearButtonClick(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure BGColorButtonClicked(Sender: TObject; Index: Integer);

   procedure SBQuitClick(Sender: TObject);

   procedure SBSaveClick(Sender: TObject);

   procedure SBOpenClick(Sender: TObject);

   procedure AtribClick(Sender: TObject);

   procedure SEPenWidthChange(Sender: TObject);

   procedure RGPenStyleClick(Sender: TObject);

   procedure RGInstrClick(Sender: TObject);

   procedure RGBrushStyleClick(Sender: TObject);

   procedure SETextSizeChange(Sender: TObject);

   procedure instrClick(Sender: TObject);

   procedure lineClick(Sender: TObject);

   procedure brushClick(Sender: TObject);

   procedure textClick(Sender: TObject);

   procedure paletteClick(Sender: TObject);

   procedure AboutClick(Sender: TObject);

   procedure CBTextStyleClick(Sender: TObject);

   procedure SBPaletteClick(Sender: TObject);

 private

   var mouse_button_down: boolean;

   var first_click: boolean;

   var X0, Y0: integer;

   var current_color: TColor;

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Image1: TImage;

 Image1width: Cardinal;

 Image1height: Cardinal;

implementation

uses ImageSize, About;

{$R *.dfm}

//Выбор цвета

procedure TForm1.BGColorButtonClicked(Sender: TObject; Index: Integer);

begin

 case Index of

   0: current_color := clBlack;

   1: current_color := clMaroon;

   2: current_color := clPurple;

   3: current_color := clGreen;

   4: current_color := clOlive;

   5: current_color := clYellow;

   6: current_color := clTeal;

   7: current_color := clNavy;

   8: current_color := clSkyBlue;

   9: current_color := clGray;

   10: current_color := clWhite;

   11: current_color := clRed;

   12: current_color := clFuchsia;

   13: current_color := clLime;

   14: current_color := clMoneyGreen;

   15: current_color := clCream;

   16: current_color := clAqua;

   17: current_color := clBlue;

   18: current_color := clMedGray;

   19: current_color := clSilver;

 end;

 Image1.Canvas.Pen.Color := current_color;

 Image1.Canvas.Font.Color := current_color;

end;

procedure TForm1.SBPaletteClick(Sender: TObject);

begin

If ColorDialog.Execute then

Image1.Canvas.Pen.Color := ColorDialog.Color;

Image1.Canvas.Brush.Color := ColorDialog.Color;

Image1.Canvas.Font.Color := ColorDialog.Color;

current_color := ColorDialog.Color;

end;

//Выбор толщины линии

procedure TForm1.SEPenWidthChange(Sender: TObject);

begin

Image1.Canvas.Pen.Width:= SEPenWidth.Value;

If SEpenWidth.Value > 1 then

RGPenStyle.ItemIndex := 0

end;

//Выбор стиля линии

procedure TForm1.RGPenStyleClick(Sender: TObject);

begin

 If RGPenStyle.ItemIndex = 0 then

   Image1.Canvas.Pen.Style := psSolid

 else SEPenWidth.Value := 1;

 If RGPenStyle.ItemIndex = 1 then

   Image1.Canvas.Pen.Style := psDash;

 If RGPenStyle.ItemIndex = 2 then

   Image1.Canvas.Pen.Style := psDot;

 If RGPenStyle.ItemIndex = 3 then

   Image1.Canvas.Pen.Style := psDashDot;

 If RGPenStyle.ItemIndex = 3 then

   Image1.Canvas.Pen.Style := psDashDotDot;

end;

//Выбор стиля заливки

procedure TForm1.RGBrushStyleClick(Sender: TObject);

begin

 If RGBrushStyle.ItemIndex = 0 then

   Image1.Canvas.Brush.Style := bsSolid;

 If RGBrushStyle.ItemIndex = 1 then

   Image1.Canvas.Brush.Style := bsHorizontal;

 If RGBrushStyle.ItemIndex = 2 then

   Image1.Canvas.Brush.Style := bsVertical;

 If RGBrushStyle.ItemIndex = 3 then

   Image1.Canvas.Brush.Style := bsFDiagonal;

 If RGBrushStyle.ItemIndex = 4 then

   Image1.Canvas.Brush.Style := bsBDiagonal;

 If RGBrushStyle.ItemIndex = 5 then

   Image1.Canvas.Brush.Style := bsCross;

 If RGBrushStyle.ItemIndex = 6 then

   Image1.Canvas.Brush.Style := bsDiagCross;

end;

// Выбор размера шрифта

procedure TForm1.SETextSizeChange(Sender: TObject);

begin

Image1.Canvas.Font.Size := SETextSize.Value;

end;

//Выбор стиля шрифта

 procedure TForm1.CBTextStyleClick(Sender: TObject);

begin

   If CBTextStyle.Checked then

   Image1.Canvas.Font.Style := [fsItalic]

   else Image1.Canvas.Font.Style := []

end;

 //Очистка рисунка

procedure TForm1.ClearButtonClick(Sender: TObject);

var

 rect: TRect;

begin

 Image1.Canvas.Brush.Color := clWhite;

 Image1.Canvas.Brush.Style := bsSolid;

 rect.Left := 0;

 rect.Top := 0;

 rect.Right := Image1.Width;

 rect.Bottom := Image1.Height;

 Image1.Canvas.FillRect( rect );

end;

 //Подготовка холста (окраска в белый цвет)

procedure TForm1.FormCreate(Sender: TObject);

begin

 ClearButtonClick( Sender );

 Image1width := Image1.Width;

 Image1height := Image1.Height;

 first_click := true;

 mouse_button_down := false;

 X0 := 0;

 Y0 := 0;

 end;

 //Включение первого клика на рисовании

procedure TForm1.RGInstrClick(Sender: TObject);

begin

 first_click := true;

end;

//Рисование

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

 Shift: TShiftState; X, Y: Integer);

begin

 mouse_button_down := true;

 X0 := X;

 Y0 := Y;

 If first_click then

 begin

   Image1.Canvas.MoveTo(X,Y); //чтобы линия не начиналась из угла

   first_click := false;

 end;

end;

 //Установка координат для прямоугольника и Эллипса

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

 Shift: TShiftState; X, Y: Integer);

var

 rect: TRect;

begin

   mouse_button_down := false;

   rect.Left := x0;

   rect.Top  := y0;

   rect.Right := X;

   rect.Bottom := Y;

   If RgInstr.ItemIndex <> 3 then //чтобы фигура рисовалась сразу

     first_click := true;

   //заливка

   If RgInstr.ItemIndex = 1 then

   begin

     Image1.Canvas.Brush.Color := current_color;

     Image1.Canvas.FloodFill(X,Y,current_color,fsBorder);

   end

   // прямая линия

   Else If RGInstr.ItemIndex = 2 then

     begin

     Image1.Canvas.LineTo(X,Y);

     Image1.Canvas.MoveTo (X,Y);

     end

   Else If RgInstr.ItemIndex = 3 then // ломаная линия

     Image1.Canvas.LineTo(X,Y)

   Else If RgInstr.ItemIndex = 4 then // эллипс

   begin

      Image1.Canvas.Brush.Color := clWindow;

      Image1.Canvas.Ellipse( rect );

   end

   Else If RgInstr.ItemIndex = 5 then // закрашенный эллипс

   begin

     Image1.Canvas.Brush.Color := current_color;

     Image1.Canvas.Ellipse( rect )

   end

   Else If RgInstr.ItemIndex = 6 then // прямоугольник

   begin

     Image1.Canvas.Brush.Color := clWindow;

     Image1.Canvas.Rectangle( rect )

   end

   Else If RgInstr.ItemIndex = 7 then // закрашенный прямоугольник

   begin

       Image1.Canvas.Brush.Color := current_color;

       Image1.Canvas.Rectangle ( rect );

   end

   Else If RGInstr.ItemIndex = 8 then //вывод текста

   begin

   first_click := false;

   Image1.Canvas.Brush.Style:=bsClear;

   Image1.Canvas.TextOut(X,Y,EditText.Text);

   end;

End;

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

 Y: Integer);

BEGIN

 If mouse_button_down then

   // карандаш

   if RGInstr.ItemIndex = 0 then

     Image1.Canvas.LineTo( X, Y );

END;

  //Насторойка вида главного окна

procedure TForm1.instrClick(Sender: TObject);

begin

If Instr.Checked = false then

begin

 RGInstr.Visible := false;

 RGInstr.Enabled := false;

end

else begin

 RGInstr.Visible := true;

 RGInstr.Enabled := true;

end;

end;

procedure TForm1.lineClick(Sender: TObject);

begin

If Line.Checked = false then

begin

 RGPenStyle.Visible := false;

 RGPenStyle.Enabled := false;

 LLineSize.Visible := false;

 SEPenWidth.Visible := false;

 SEPenWidth.Enabled := false;

end

else begin

 RGPenStyle.Visible := true;

 RGPenStyle.Enabled := true;

 LLineSize.Visible := true;

 SEPenWidth.Visible := true;

 SEPenWidth.Enabled := true;

end;

end;

procedure TForm1.brushClick(Sender: TObject);

begin

If Brush.Checked = false then

begin

 RGBrushStyle.Visible := false;

 RGBrushStyle.Enabled := false;

end

else begin

 RGBrushStyle.Visible := true;

 RGBrushStyle.Enabled := true;

end;

end;

procedure TForm1.textClick(Sender: TObject);

begin

If Text.Checked = false then

begin

 EditText.Visible := false;

 EditText.Enabled := false;

 SETextSize.Visible := false;

 SETextSize.Enabled := false;

 LTextSize.Visible := false;

 CBTextStyle.Visible := false;

 CBTextStyle.Enabled := false;

end

else begin

 EditText.Visible := true;

 EditText.Enabled := true;

 SETextSize.Visible := true;

 SETextSize.Enabled := true;

 LTextSize.Visible := true;

 CBTextStyle.Visible := true;

 CBTextStyle.Enabled := true;

end;

end;

procedure TForm1.paletteClick(Sender: TObject);

begin

If Palette.Checked = false then

begin

 BGColor.Visible := false;

 BGColor.Enabled := false;

 SBPalette.Visible := false;

 SBPalette.Enabled := false;

end

else begin

 BGColor.Visible := true;

 BGColor.Enabled := true;

 SBPalette.Visible := true;

 SBPalette.Enabled := true;

end;

end;

procedure TForm1.SBOpenClick(Sender: TObject);  //открытие файла

begin

If OPDialog.Execute then

 Image1.Picture.LoadFromFile   (OPDialog.FileName);

end;

procedure TForm1.SBSaveClick(Sender: TObject);  //сохранение файла

begin

If SPDialog.Execute then

 Image1.Picture.SavetoFile  (SPDialog.FileName);

 end;

procedure TForm1.SBQuitClick(Sender: TObject);  //выход из программы

begin

Close

end;

procedure TForm1.AboutClick(Sender: TObject);  //о программе

begin

 If AboutForm.ShowModal = mrOk then

end;

procedure TForm1.AtribClick(Sender: TObject);     //изменение атрибутов рисунка

begin

 ImageSizeForm.SEWidth.Value := Image1width;

 ImageSizeForm.SEHeight.Value := Image1height;

 If ImageSizeForm.ShowModal = mrOk then

 begin

   Image1width := ImageSizeForm.SEWidth.Value;

   Image1height := ImageSizeForm.SEHeight.Value;

   Image1.Width := Image1width;

   Image1.Height := Image1height;

   Image1.Refresh;

 end;

end;

end.

………………………………………………………………………………………..

unit ImageSize;

interface

uses

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

 Dialogs, StdCtrls, Buttons, Spin;

type

 TImageSizeForm = class(TForm)

   BBOK: TBitBtn;

   SEWidth: TSpinEdit;

   SEHeight: TSpinEdit;

   Label1: TLabel;

   Label2: TLabel;

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 ImageSizeForm: TImageSizeForm;

implementation

 uses Unit1;

{$R *.dfm}

end.

……………………………………………………………………………

unit About;

interface

uses

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

 Dialogs, StdCtrls;

type

 TAboutForm = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Label6: TLabel;

   procedure FormClick(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 AboutForm: TAboutForm;

implementation

 uses Unit1;

{$R *.dfm}

procedure TAboutForm.FormClick(Sender: TObject);

begin

Close;

end;

end.

Список литературы:

  1.  Бельтюков М.В. Построение программ медицинского назначения в среде Borland Delphi. Учебное пособие. СПб: Издательство СПБГЭТУ «ЛЭТИ», 2002

  1.  Культин Н.Б. Основы программирования в Delphi 7. Учебное пособие. СПб: «БХВ-Петербург», 2005




1. тема А ще важлива гігієна думок слів та дій- жах і нервозність розсіюють життє
2. Контрольная работа- Перспективы развития генетики
3. Фиш Геннадий
4. Гарриет Бичер Стоу
5. ПРАКТИКУМ для практических занятий по курсу Финансовый рискменеджмент Составитель-
6. Форма международного бизнеса- франчайзинг, особенности организации
7. Нарушение авторских и смежных прав в области интеллектуальной собственности
8. ИОводителя Модель автоб
9.  ЗВЕРТАННЯ ЯК ГРАМАТИЧНА КАТЕГОРІЯ
10. Развитой социализм
11. Вокативы и этикетные средства речи
12. Лабораторная работа ’15.html
13. КОНСПЕКТ ЛЕКЦИЙ Учебное пособие Под редакцией Н
14. Новейший философский словарь.html
15. Курсовая работа- Нарушения речи и их физиологические и психологические причины
16. Основы бизнеса Отчет о выполнении лабораторной работы 9 Настройка параметров орг
17. Введение1 Основная часть3 Соотношение Конституции РФ с другими нормативными актами3 Стабильность Кон
18. Новые условия ~ другие методы Учитель технологии Шустрова Ирина Юрьевн
19. Реферат- Билеты по земельному праву
20.  11 декабря 2013г