37768

Розробка складних додатків з використанням графіки

Лабораторная работа

Информатика, кибернетика и программирование

ps unit Unit1; {mode objfpc}{H} interfce uses Clsses SysUtils FileUtil LResources Forms Controls Grphics Dilogs Menus StdCtrls ExtCtrls Spin; type { TForm1 } TForm1 = clssTForm Button1: TButton; Button2: TButton; Button3: TButton; ColorDilog1: TColorDilog; MinMenu1: TMinMenu; MenuItem1: TMenuItem; MenuItem2: TMenuItem; MenuItem3: TMenuItem; MenuItem4: TMenuItem; MenuItem5: TMenuItem; MenuItem6: TMenuItem; MenuItem7: TMenuItem; MenuItem8: TMenuItem; MenuItem9:...

Украинкский

2013-09-25

1.16 MB

1 чел.

7

Міністерство освіти і науки України

Хмельницький національний університет

Кафедра системного програмування

Лабораторна робота №6

з програмування

на тему:

«Розробка складних додатків з використанням графіки»

Виконав:

Студент групи КІ-10-1

Ноль М.Г.

Перевірив:

Мостовий С.В.

Хмельницький

2011

Лабораторна робота №6

Тема: Розробка складних додатків з використанням графіки.

Мета:ознайомитись з графічними можливостями середовища Delphi та навчитись їх застосовувати за призначенням.

Завдання

Розробити графічний редактор з можливостями кисті та заливки, який може працювати з графічними файлами (відкрити, зберегти) та  містить головне меню з пунктами “Файл”, “Формат ”, “Про програму”. Пункт меню “Файл” містить підпункти “Відкрити”, “Зберегти”, “Вихід”. Пункт меню “Формат” містить підпункти редагування розміру кисті та кольору.

Project1.lpr

program project1;

{$mode objfpc}{$H+}

uses

 {$IFDEF UNIX}{$IFDEF UseCThreads}

 cthreads,

 {$ENDIF}{$ENDIF}

 Interfaces, // this includes the LCL widgetset

 Forms, Unit1, LResources, Printer4Lazarus

 { you can add units after this };

{$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}

begin

 {$I project1.lrs}

 Application.Title:='Текстовий редактор';

 Application.Initialize;

 Application.CreateForm(TForm1, Form1);

 Application.Run;

end.  


Unit1.pas

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

 Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, Menus, StdCtrls, ExtCtrls, Spin;

type

 { TForm1 }

 TForm1 = class(TForm)

   Button1: TButton;  Button2: TButton;  Button3: TButton;

   ColorDialog1: TColorDialog;

   MainMenu1: TMainMenu;

   MenuItem1: TMenuItem;   MenuItem2: TMenuItem;   MenuItem3: TMenuItem;

   MenuItem4: TMenuItem;   MenuItem5: TMenuItem;   MenuItem6: TMenuItem;

   MenuItem7: TMenuItem;   MenuItem8: TMenuItem;   MenuItem9: TMenuItem;

   MenuItem10: TMenuItem;  MenuItem11: TMenuItem;  MenuItem12: TMenuItem;

   MenuItem13: TMenuItem;  MenuItem14: TMenuItem;  MenuItem15: TMenuItem;

   MenuItem16: TMenuItem;  MenuItem17: TMenuItem;  MenuItem18: TMenuItem;

   OpenDialog1: TOpenDialog;   SaveDialog1: TSaveDialog;

   PaintBox1: TPaintBox;

   SpinEdit1: TSpinEdit;

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

   procedure Button3Click(Sender: TObject);

   procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);

   procedure FormCreate(Sender: TObject);

   procedure MenuItem10Click(Sender: TObject);

   procedure MenuItem11Click(Sender: TObject);

   procedure MenuItem12Click(Sender: TObject);

   procedure MenuItem13Click(Sender: TObject);

   procedure MenuItem14Click(Sender: TObject);

   procedure MenuItem15Click(Sender: TObject);

   procedure MenuItem16Click(Sender: TObject);

   procedure MenuItem17Click(Sender: TObject);

   procedure MenuItem18Click(Sender: TObject);

   procedure MenuItem4Click(Sender: TObject);

   procedure MenuItem5Click(Sender: TObject);

   procedure MenuItem6Click(Sender: TObject);

   procedure MenuItem9Click(Sender: TObject);

   procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

   procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

   procedure PaintBox1Paint(Sender: TObject);

   procedure SpinEdit1Change(Sender: TObject);

 private

   { private declarations }

 public

   { public declarations }

 end;

var  Form1: TForm1; StartX, StartY,a:integer;

 pn,sv:boolean;  clr:TColor; BM,BMt:TBitmap;

 FName,FLoad:string;  SRect, DRect: TRect;

implementation

{ TForm1 }

procedure TForm1.MenuItem4Click(Sender: TObject); //відкрити

begin

if not sv then MenuItem5Click(Sender);

OpenDialog1.Filter:='Bitmap|*.bmp|All|*.*';

 if OpenDialog1.Execute then

begin sv:=false;

FLoad:=OpenDialog1.FileName;

BMt:=TBitmap.Create;

BMt.LoadFromFile(FLoad);

PaintBox1.Canvas.Clear; BM.LoadFromFile(FLoad);

PaintBox1.Width:=BMt.Width;

PaintBox1.Height:=BMt.Height;

PaintBox1.Canvas.Draw(0,0,BM);

BMt.Free;

end;

end;

procedure TForm1.MenuItem5Click(Sender: TObject);  //зберегти

begin

BMt:=TBitmap.Create;

BMt.Width:=PaintBox1.Width;

BMt.Height:=PaintBox1.Height;

DRect:=Rect(0,0,PaintBox1.Width,PaintBox1.Height);

SRect:=Rect(0,0,BMt.Width,BMt.Height);

BMt.Canvas.CopyRect(SRect,PaintBox1.Canvas,DRect);

SaveDialog1.Filter:='Bitmap|*.bmp|All|*.*';

if SaveDialog1.Execute then

begin

FName:=(SaveDialog1.FileName);

BMt.SaveToFile(FName+'.bmp');

sv:=True; BMt.Free;

end;

end;

procedure TForm1.MenuItem6Click(Sender: TObject);  //закрити

begin

 Form1.Close;

end;

procedure TForm1.MenuItem9Click(Sender: TObject);  //зменшити кисть

begin

PaintBox1.Canvas.Pen.Width:=PaintBox1.Canvas.Pen.Width-1;

if PaintBox1.Canvas.Pen.Width=1 then exit;

end;

procedure TForm1.MenuItem10Click(Sender: TObject);  //збільшити кисть

begin

PaintBox1.Canvas.Pen.Width:=PaintBox1.Canvas.Pen.Width+1;

if PaintBox1.Canvas.Pen.Width>=100 then exit;

end;

procedure TForm1.MenuItem11Click(Sender: TObject);  //вказати розмір

begin

a:=StrToInt(InputBox('Зміна розміру кисті','Введіть значення:',''));

a:=a div 1;

if a<1 then PaintBox1.Canvas.Pen.Width:=1 else

if a>100 then PaintBox1.Canvas.Pen.Width:=100 else

PaintBox1.Canvas.Pen.Width:=a;

end;

procedure TForm1.MenuItem12Click(Sender: TObject); //чорний

begin

 clr:=clBlack;

end;

procedure TForm1.MenuItem13Click(Sender: TObject); //червоний

begin

 clr:=clRed;

end;

procedure TForm1.MenuItem14Click(Sender: TObject); //синій

begin

 clr:=clBlue;

end;

procedure TForm1.MenuItem15Click(Sender: TObject); //зелений

begin

 clr:=clGreen;

end;

procedure TForm1.MenuItem16Click(Sender: TObject); //білий

begin

 clr:=clWhite;

end;

procedure TForm1.MenuItem17Click(Sender: TObject); //вказати колір

begin

 if ColorDialog1.Execute then clr:=ColorDialog1.Color;

end;

procedure TForm1.MenuItem18Click(Sender: TObject);  //Про програму

begin

 ShowMessage('Графічний редактор призначений для створення і збереження малюнків в форматі .bmp.'+#13+'При малюванні можна змінювати розмір та колір кисті для малювання.'+#13+'Розробник: Ноль М.Г., КІ-10-1.');

end;

procedure TForm1.SpinEdit1Change(Sender: TObject);

begin

 PaintBox1.Canvas.Pen.Width:=SpinEdit1.Value;

end;

procedure TForm1.PaintBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

StartX:=X; StartY:=Y;

if pn=True then

begin

PaintBox1.Canvas.Brush.Color:=clr;

PaintBox1.Canvas.FloodFill(X,Y,PaintBox1.Canvas.Pixels[X,Y],fsSurface);

sv:=False;

BM.Width:=PaintBox1.Width;

BM.Height:=PaintBox1.Height;

DRect:=Rect(0,0,PaintBox1.Width,PaintBox1.Height);

SRect:=Rect(0,0,BM.Width,BM.Height);

BM.Canvas.CopyRect(SRect,PaintBox1.Canvas,DRect);

end else

PaintBox1.Canvas.Pen.Color:=clr;

end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin

 if not (ssLeft in Shift) then

Exit;

with PaintBox1.Canvas do begin

MoveTo(StartX,StartY);

LineTo(X,Y);

end;

StartX:=X;

StartY:=Y;

sv:=False;

BM.Width:=PaintBox1.Width;

BM.Height:=PaintBox1.Height;

DRect:=Rect(0,0,PaintBox1.Width,PaintBox1.Height);

SRect:=Rect(0,0,BM.Width,BM.Height);

BM.Canvas.CopyRect(SRect,PaintBox1.Canvas,DRect);

end;

procedure TForm1.PaintBox1Paint(Sender: TObject);

begin

if not sv then begin PaintBox1.Canvas.Clear; PaintBox1.Canvas.Draw(0,0,BM); end;

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);

begin

BMt:=TBitmap.Create;

BMt.Width:=PaintBox1.Width;

BMt.Height:=PaintBox1.Height;

DRect:=Rect(0,0,PaintBox1.Width,PaintBox1.Height);

SRect:=Rect(0,0,BMt.Width,BMt.Height);

BMt.Canvas.CopyRect(SRect,PaintBox1.Canvas,DRect);

 CanClose:=MessageDlg('Графічний редактор','Дійсно закрити?',mtConfirmation,[mbYes,mbNo],0)=mrYes;

 if CanClose and not sv then if (MessageDlg('Графічний редактор','Зберегти перед виходом ?',mtConfirmation,[mbYes,mbNo],0)=mrYes) then

 begin

 SaveDialog1.Filter:='Bitmap|*.bmp|All|*.*';

 if SaveDialog1.Execute then

    begin     FName:=(SaveDialog1.FileName);

    BMt.SaveToFile(FName+'.bmp');     sv:=True;

    end;

 end;

BMt.Free;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 pn:=False;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

 pn:=True;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

PaintBox1.Canvas.Brush.Color:=clWhite;

PaintBox1.Canvas.Clear;

PaintBox1.Color:=clWhite;

BM.Width:=PaintBox1.Width;

BM.Height:=PaintBox1.Height;

DRect:=Rect(0,0,PaintBox1.Width,PaintBox1.Height);

SRect:=Rect(0,0,BM.Width,BM.Height);

BM.Canvas.CopyRect(SRect,PaintBox1.Canvas,DRect);

pn:=False;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

PaintBox1.Canvas.Pen.Width:=1;

PaintBox1.Canvas.Pen.Color:=clBlack;

sv:=True;

BM:=TBitmap.Create;

BM.Width:=PaintBox1.Width;

BM.Height:=PaintBox1.Height;

end;

initialization

 {$I unit1.lrs}

end.

Висновок.  Виконавши лабораторну роботу, я освоїв роботу програм з такими графічними компонентами як TPaintBox та його властивістю Canvas, яка дає можливість малювати на компоненті. Розглянув принципи роботи з властивостями канви Pen та Brush, її методами Rect, CopyRect, Clear та інші. Також закріпив навички роботи з компонентами середовища Delphi TMainMenu та діалогами TOpenDialog TSaveDialog, зрозумів основні принципи створення графічного редактора.


 

А также другие работы, которые могут Вас заинтересовать

25840. Аудит расчетов по авансам выданным 27.5 KB
  Так например выдавая авансы поставщику предприятие изымает из оборота денежные средства до момента поступления ТМЦ выполнения работ оказания услуг также возрастает вероятность непоступления данных ценностей на предприятие вопреки договору поставки. На счете 61 €œРасчеты по авансам выданным€ обобщается информация о расчетах по выданным авансам под поставку продукции либо под выполнение работ а также по оплате продукции и работ принятых от заказчиков по частичной готовности. Суммы выданных авансов а также произведенной оплаты и работ...
25841. Аудит расчетов по претензиям 30 KB
  Можно выделить несколько видов претензий: при выявлении ошибок в счетах поставщиков неправильно указаны тарифы и цены арифметические ошибки и др. Аудитору необходимо проверить: обоснованность своевременность и правильность оформления документов несоблюдение сроков предъявления претензий может быть использовано для сокрытия фактов хищения материальных ценностей так как при отказе в удовлетворении претензий числящиеся суммы списываются на издержки производства; обоснованность претензий предъявляемых к проверяемому предприятию в случае...
25842. Аудит расчетов по совместной деятельности 32.5 KB
  Внесенное товарищами имущество а также произведенная в результате совместной деятельности продукция и полученные от такой деятельности плоды признаются как правило их общей долевой собственностью. Прибыль полученная товарищами в результате их совместной деятельности распределяется пропорционально стоимости вкладов в общее дело если иное не предусмотрено договором или другим соглашением товарищей. Исходя из описанного подхода к организации деятельности простого товарищества в новом Плане счетов поиному решена схема учета операций...
25843. Структура и свойства сталей и чугунов 74 KB
  В углеродистых сталях углерод является основным элементом, определяющим структуру и свойства стали. С увеличением содержания углерода в стали возрастают твердость и предел прочности (НВ, ств), уменьшаются относительное удлинение, относительное сужение и ударная вязкость.
25844. Аудит расчетов с зависимыми (дочерними) обществами 29 KB
  ; организован ли бухгалтерский учет совместной деятельности у одного из участников по доверенности сторон раздельно от его собственного учета раздельный учет раздельный баланс; правильность отражения в учете операций по совместной деятельности; правильность отражения в учете разницы между договорной и балансовой стоимостью имущества переданного в совместную деятельность; правильность распределения прибыли и начислений а также уплаты налогов по результатам совместной деятельности. Проверяя учет внутрихозяйственных расчетов счет 79...
25845. Аудит расчетов с органами социального страхования и обеспечения, внебюджетными фондами 28 KB
  Основными задачами проверки расчетов по социальному страхованию и обеспечению является установление правильности начисления сумм платежей своевременности взносов перечислений причитающихся сумм правильность отражения в бухгалтерском учете этих операция и составления отчетности. Исходя из вышеизложенного необходимо проверить: правильность определения фонда оплаты труда для начисления страховых взносов; правильность применения тарифов страховых взносов; своевременность и обоснованность начисления пособий пенсий и т. выплачиваемых из средств...
25846. Аудит расчетов с персоналом по оплате труда 59 KB
  Складываются новые отношения между государством предприятием и работником по поводу организации труда. Предприятия вправе выбирать системы и формы оплаты труда самостоятельно исходя из специфики и задач стоящих перед предприятием. На первом месте по важности среди факторов влияющих на эффективность использования рабочей силы стоит система оплаты труда.
25847. Выбор программ автоматизации бухгалтерского дела 25.5 KB
  При этом если бы покупатель мог сам оценить качество программного продукта сравнить экономическую эффективность предлагаемых программных средств провести оценку достоверности информации содержащейся в рекламных сведениях то наверняка было бы меньше разочарования после покупки программных продуктов данного направления. Наиболее важные из них следующие: функциональная полнота; завершенность разработки; быстродействие; уровень требований к комплексу технических средств; возможность перенастройки на новые условия...
25848. Документ как специальный носитель информации 27.5 KB
  Документы используются в различных областях деятельности отраслях знаний сферах жизни и являются объектом исследования многих научных дисциплин поэтому содержание понятия документ многозначно и зависит от того в какой отрасли и для каких целей он используется. По мнению специалистов – документоведов документ представляет собой результат отображения фактов событий предметов явлений объективной действительности и мыслительной деятельности человека. Документ изготавливается на специальном материале бумаге фотопленке и т.