Отчёт по ООП. Воронеж 2019 Практическая работа 1 Тема практической работы Файл проекта. Структура и Назначение
Скачать 0.96 Mb.
|
Тема: Использование многострочного редактора TEdit, TMaskEdit. Цель: Научится использовать многострочные редакторы Ход работы: Задание 1.Создадим маленький пример, который проиллюстрирует работу с компонентом TMaskEdit. Рис.52 Задание 2. Улучшите программу, чтобы можно было вводить номер телефона и имя владельца. Рис.53 Рис.54 Листинг: var Form1: TForm1; TickCounter: LongInt; procedure TForm1.FormCreate(Sender: TObject); begin TickCounter:=0; Edit1.Text:='0.0'; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin if Timer1.Enabled then begin Timer1.Enabled:=False; BitBtn1.Caption:='&Старт'; Timer1.Enabled:=False; BitBtn1.Caption:='&Старт'; end else begin timer1.Enabled:=true; BitBtn1.Caption:='&Стоп'; end; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin TickCounter:=0; Edit1.Text:='0.0'; end; procedure TForm1.Timer1Timer(Sender: TObject); var seconds:Real; s:string; begin TickCounter:=TickCounter+1; Seconds:=TickCounter/10; Str(Seconds: 10:1, S); Edit1.Text:=S; end; end. Вывод: Научились использовать многострочные редакторы Практическая работа №19 Тема: Использование многострочного редактора TMemo. Цель:научится использовать многострочный редактор TMemo. Ход работы: Задание 1. Напишем программу, которая будет выполнять простые функции текстового редактора. Рис. 55 Рис. 56 Листинг: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) MainMemo: TMemo; ClearButton: TButton; procedure ClearButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ClearButtonClick(Sender: TObject); begin MainMemo.Lines.Clear; end; end. Задание 2. Усложните пример, добавив возможность сохранения введённого текста и загрузки его обратно. Рис. 57 Рис. 58 Рис. 59 Листинг: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) MainMemo: TMemo; ClearButton: TButton; procedure ClearButtonClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ClearButtonClick(Sender: TObject); begin MainMemo.Clear; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin MainMemo.Lines.SaveToFile('memo.txt'); end; procedure TForm1.FormShow(Sender: TObject); begin if FileExists('memo.txt') then MainMemo.Lines.LoadFromFile('memo.txt'); end; end. Задание 3. Напишите пример, который будет получать доступ к строкам. Рис. 60 Рис. 61 Рис. 62 Рис. 63 . Рис.64 Листинг: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ClearButton: TButton; AddButton: TButton; DelButton: TButton; ChangeButton: TButton; MainMemo: TMemo; procedure ClearButtonClick(Sender: TObject); procedure AddButtonClick(Sender: TObject); procedure DelButtonClick(Sender: TObject); procedure ChangeButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ClearButtonClick(Sender: TObject); begin MainMemo.Lines.Clear; end; procedure TForm1.AddButtonClick(Sender: TObject); begin MainMemo.Lines.Add(' Новая строка'); end; procedure TForm1.DelButtonClick(Sender: TObject); begin if MainMemo.Lines.Count<>0 then MainMemo.Lines.Delete(MainMemo.CaretPos.Y); end; procedure TForm1.ChangeButtonClick(Sender: TObject); begin MainMemo.Lines.Strings[MainMemo.CaretPos.Y]:='Horrific'; MainMemo.Lines.Strings[0]:='Текст изменён'; end; end. Задание 4. создать программу, в которой содержимое текстового файла SYM переписывается в текстовый файл DYM без пробелов. Рис. 65 Рис. 66 Листинг: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Memo1: TMemo; procedure Memo1KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char); var f, g: TextFile; x: Char; s: String; begin if Key=#13 then begin s:=''; AssignFile(f,'D:\sym.txt'); // Правильно укажите // директорию, в которой хотите создать файл Rewrite(f); write(f,Memo1.Text); // Запись данных из Memo1 в текстовый файл SYM.txt CloseFile(f); Label1.caption:= 'Содержимое файла DYM:'; Memo1.Clear; AssignFile(g,'D:\dym.txt'); rewrite(g); reset(f); while not eof(f) do // Cодержимое файла SYM переписывается в файл DYM без пробелов begin read(f,x); if x<>#32 then write(g,x); end; CloseFile(g); CloseFile(f); reset(g); while not eof(g) do // Переменной S присваивается содержимое файла DYM begin read(g,x); s:=s+x; end; Memo1.Lines.Add(s); // Вывод содержимого файла DYM в окно Memo1 CloseFile(g); end; end; end. Вывод: Янаучился использовать многострочный редактор TMemo. Практическая работа №20 Тема: Использование многострочного редактора TRichEdit. Цель:написать программу с использованием многострочного редактора TRichEdit. Ход работы: Задание.Напишите программу с использованием компонента TRichEdit. Где буквы и слова введённого текста будут раскрашиваться разными цветами. Рис. 67 Рис. 68 Листинг: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; SaveDialog1: TSaveDialog; Memo1: TMemo; RichEdit1: TRichEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.SaveToFile('1.TXT'); //сохранение в 1.txt If SaveDialog1.Execute then begin RichEdit1.Lines.SaveToFile(SaveDialog1.FileName); End; end; procedure TForm1.Button2Click(Sender: TObject); begin RichEdit1.Clear; end; procedure TForm1.Button3Click(Sender: TObject); begin RichEdit1.SelStart:=0; RichEdit1.SelLength:=5; RichEdit1.SelAttributes.Color:=clRed; RichEdit1.SelStart:=6; RichEdit1.SelLength:=3; RichEdit1.SelAttributes.Color:=clGreen; RichEdit1.SelStart:=10; RichEdit1.SelLength:=7; RichEdit1.SelAttributes.Color:=clBlue; end; end. Вывод: Я написал программу с использованием многострочного редактора TRichEdit. Практическая работа№21 Тема: Кнопки: основные свойства, методы, пример использования. Цель:Изучить виды и свойства кнопок в Delphi. Ход работы: Задание 1. Напишем маленькую программу с использованием кнопки. Для этого создай новое приложение. Рис. 69 Задание 2. Усложним наш пример и поймаем событие, когда нажимается кнопка. Рис. 70 Задание 3. Напишем программу, у которой будет только одна кнопка. При наведении на неё мышкой, кнопка будет убегать. Рис. 71 Рис. 72 Задание 4. Разместите на форме несколько компонентов RadioButton. Запустите программу и попробуйте пощёлкать. Рис. 73 Листинг: procedure TForm1.MyFirstButtonMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var index:integer; begin index:=random(4); case index of 0: MyFirstButton.Left:=MyFirstButton.Left+MyFirstButton.Width; 1: MyFirstButton.Left:=MyFirstButton.Left-MyFirstButton.Width; 2: MyFirstButton.Top:=MyFirstButton.Top+MyFirstButton.Height; 3: MyFirstButton.Top:=MyFirstButton.Top-MyFirstButton.Height; end; if MyFirstButton.Left<0 then MyFirstButton.Left:=0; if (MyFirstButton.Left+MyFirstButton.Width)>Form1.Width then MyFirstButton.Left:=Form1.Width-MyFirstButton.Width; if MyFirstButton.Top<0 then MyFirstButton.Top:=0; if (MyFirstButton.Top+MyFirstButton.Height)>Form1.Height then end; begin Form2.ShowModal; if Form2.ModalResult=mrOk then Application.MessageBox('Вы нажали кнопку OK', 'Вы нажали'); if Form2.ModalResult=mrCancel then Application.MessageBox('Вы нажали кнопку Cancel', 'Вы нажали'); if Form2.ModalResult=mrAbort then Application.MessageBox('Вы нажали кнопку Abort', 'Вы нажали'); end; Вывод: Я изучил виды и свойства кнопок в Delphi. Практическая работа №22 Тема: Работа с проектом в Delphi. Цель: узнать, что такое фрейм, научится с ним работать. Ход работы: Задание 1: Калькулятор со свободным вводом Разработаем аналог калькулятора, который будет выполнять 4 основные операции с числами. Рис. 74 Рис. 75 Рис. 76 Рис. 77. Рис. 78 Рис. 79 Листинг: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) EditOperand1: TEdit; EditOperand2: TEdit; EditResult: TEdit; CloseBitBtn: TBitBtn; AddBtn: TSpeedButton; SubBtn: TSpeedButton; MulBtn: TSpeedButton; DivideBtn: TSpeedButton; ModBtn: TSpeedButton; DivBtn: TSpeedButton; ClearBtn: TSpeedButton; LabelOperator: TLabel; LabelResult: TLabel; procedure AddBtnClick(Sender: TObject); procedure SubBtnClick(Sender: TObject); procedure MulBtnClick(Sender: TObject); procedure DivideBtnClick(Sender: TObject); procedure ClearBtnClick(Sender: TObject); procedure ModBtnClick(Sender: TObject); procedure DivBtnClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Result: Integer; Form1: TForm1; implementation {$R *.dfm} procedure TForm1.AddBtnClick(Sender: TObject); begin Result:= StrToInt(EditOperand1.Text)+ StrToInt(EditOperand2.Text); EditResult.Text:=IntToStr(Result); LabelOperator.Caption:=AddBtn.Caption; LabelResult.Caption:='='; end; procedure TForm1.SubBtnClick(Sender: TObject); begin Result:= StrToInt(EditOperand1.Text)- StrToInt(EditOperand2.Text); EditResult.Text:=IntToStr(Result); LabelOperator.Caption:=SubBtn.Caption; LabelResult.Caption:='='; end; procedure TForm1.MulBtnClick(Sender: TObject); begin Result:= StrToInt(EditOperand1.Text)* StrToInt(EditOperand2.Text); EditResult.Text:=IntToStr(Result); LabelOperator.Caption:=MulBtn.Caption; LabelResult.Caption:='='; end; procedure TForm1.DivideBtnClick(Sender: TObject); var Result: Real; begin Result:= StrToInt(EditOperand1.Text)/ StrToInt(EditOperand2.Text); EditResult.Text:=FloatToStr(Result); LabelOperator.Caption:=DivideBtn.Caption; LabelResult.Caption:='='; end; procedure TForm1.ClearBtnClick(Sender: TObject); begin EditOperand1.Text:=''; EditOperand2.Text:=''; EditResult.Text:=''; LabelOperator.Caption:='?'; LabelResult.Caption:='?'; end; procedure TForm1.ModBtnClick(Sender: TObject); var Result:Integer; begin Result:= StrToInt(EditOperand1.Text) mod StrToInt(EditOperand2.Text); EditResult.Text:=FloatToStr(Result); LabelOperator.Caption:=ModBtn.Caption; LabelResult.Caption:='='; end; procedure TForm1.DivBtnClick(Sender: TObject); var Result: Real; begin Result:= StrToInt(EditOperand1.Text) div StrToInt(EditOperand2.Text); EditResult.Text:=FloatToStr(Result); LabelOperator.Caption:=DivBtn.Caption; LabelResult.Caption:='='; end; end. Задание 2: Расчет платежной ведомости. Напишите программу для расчета платежной ведомости. Рис. 80 Листинг: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; procedure Edit1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Edit1Change(Sender: TObject); var Hours, rate, overtime, result:Real; begin if Edit1.Text<>''then Hours:=StrToInt(Edit1.Text) //получаем содержимое строки из окна //редактирования Edit1 и преобразуем его в //удобную для вычислений величину типа Real else Hours:=0; //вычисляем сверхурочные часы, если они есть if Hours>37.5 then Overtime:=Hours-37.5 else Overtime:=0; //преобразовываем содержимое окна Edit2 в //Real if Edit2.Text<>''then Rate:=StrToFloat(Edit2.Text) else Rate:=0; //вычисляем результат, преобразуем его //обратно в текстовую строку и отображаем //его в окне редактирования Edit3. Используем //стандартную подпрограмму FloatToStrF для //форматирования строки результата в виде //денежной суммы Result:=Hours*Rate+0.5*Overtime*Rate; Edit3.Text:=FloatToStrF(Result,ffCurrency,10,2); end; end. Вывод: Я узнал, что такое фрейм, научится с ним работать. Практическая работа № 23 Тема: Создание таблиц. Таблицы: заполнение и редактирование. Цель:изучить свойства компонента TStringGrid. Написать программу с использованием массивов. Ход работы: Задание: создать программу для определения вектора , где А-квадратная матрица размерностью NxN, а Y,B–одномерные массивы размерностью N. Элементы вектора Y определяются по формуле . Рис. 81 Рис. 82 Листинг: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, Buttons; type TForm1 = class(TForm) StringGrid1: TStringGrid; StringGrid2: TStringGrid; StringGrid3: TStringGrid; Edit1: TEdit; Label1: TLabel; Button1: TButton; BitBtn1: TBitBtn; BitBtn2: TBitBtn; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const Nmax=10; // Максимальная размерность массива Type Mas1 = array[1..Nmax] of extended; {Объявление типа одномерного массива вещественных чисел размерностью Nmax} Mas2 = array[1..Nmax,1..Nmax] of extended; {Объявление типа двумерного массива вещественных чисел размерностью Nmax*Nmax} Var Form1: TForm1; A : Mas2; // Объявление двумерного массива B,Y : Mas1; // Объявление одномерных массивов N,i,j : integer; implementation {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); {Процедура подготовки к началу работы} begin N:=3; // Задание размерности массива Edit1.Text:=IntToStr(N); // Вывод значения N в Edit1 {Задание числа строк и столбцов в таблицах} StringGrid1.ColCount:=N+1; StringGrid1.RowCount:=N+1; StringGrid2.RowCount:=N+1; StringGrid3.RowCount:=N+1; {Ввод в левую верхнюю ячейку таблицы названия массива} StringGrid1.Cells[0,0]:='Массив A:'; StringGrid2.Cells[0,0]:='Массив B:'; StringGrid3.Cells[0,0]:='Массив Y:'; {Заполнение верхнего и левого столбцов поясняющими подписями} for i:=1 to N do begin StringGrid1.Cells[0,i]:=' i= '+IntToStr(i); StringGrid1.Cells[i,0]:=' j= '+IntToStr(i); end; end; procedure TForm1.Button1Click(Sender: TObject); {Процедура изменения размерности массива} begin try N:=StrToInt(Edit1.Text); except ShowMessage('Ошибочная запись числа '+Edit1.Text); Edit1.SetFocus; Exit; end; {Задание числа строк и столбцов в таблицах} StringGrid1.ColCount:=N+1; StringGrid1.RowCount:=N+1; StringGrid2.RowCount:=N+1; StringGrid3.RowCount:=N+1; {Заполнение верхнего и левого столбцов поясняющими подписями} for i:=1 to N do begin StringGrid1.Cells[0,i]:=' i= '+IntToStr(i); StringGrid1.Cells[i,0]:=' j= '+IntToStr(i); end; end; procedure TForm1.BitBtn1Click(Sender: TObject); {Процедура расчета вектора Y} var s: extended; begin {Заполнение массива А элементами из таблицы StringGrid1} for i:=1 to N do for j:=1 to N do begin if StringGrid1.Cells[j,i]=' ' then begin ShowMessage('Ошибка заполнения массива А'); Exit; end; try A[i,j]:=StrToFloat(StringGrid1.Cells[j,i]); except ShowMessage('Ошибочная запись числа '+StringGrid1.Cells[j,i]); Exit; end; end; {Заполнение массива B элементами из таблицы StringGrid2} for i:=1 to N do begin if StringGrid2.Cells[0,i]=' ' then begin ShowMessage('Ошибка заполнения массива В!'); Exit; end; try B[i]:=StrToFloat(StringGrid2.Cells[0,i]); except ShowMessage('Ошибочная запись числа '+StringGrid2.Cells[0,i]); Exit; end; end; {Умножение массива А на массив В} for i:=1 to N do begin s:=0; for j:=1 to N do s:=s+A[i,j]*B[i]; Y[i]:=s; {Вывод результата в таблицу StringGrid3} StringGrid3.Cells[0,i]:=FloatToStrf(y[i],fffixed,6,2); end; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin {Очищение всех ячеек таблиц перед очередным прогоном программы} for i:=1 to N do begin StringGrid2.Cells[0,i]:=' '; StringGrid3.Cells[0,i]:=' '; for j:=1 to N do StringGrid1.Cells[j,i]:=' '; end; end; end. Вывод: Я изучил свойства компонента TStringGrid. Написать программу с использованием массивов. Практическая работа №24 Тема: Класс TPen. Класс TBrush. Цель: научится использовать классы TPen, TBrush. Ход работы: Задание 1. Рассмотрим пример рисования на поверхности формы с использованием свойства Canvas. Рис. 83 Листинг: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormResize(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormResize(Sender: TObject); var w,h,wm,hm:integer; begin form1.Refresh; wm:=form1.ClientWidth; w:=wm div 8; hm:=form1.ClientHeight; h:=hm div 10; //небо with form1.Canvas do begin brush.Color:=clBlue; brush.Style:=bsDiagCross; pen.color:=clblue; rectangle(0,0,wm,h); //трава brush.Color:=clGreen; brush.Style:=bsHorizontal; pen.color:=clGreen; rectangle(0,hm-h,wm,hm); //солнце brush.Color:=clYellow; brush.Style:=bsSolid; pen.color:=clYellow; ellipse(w,2*h,2*w,2*h+w); //домик brush.Color:=clGray; brush.Style:=bsSolid; pen.color:=clMaroon; rectangle(2*w,hm-5*h,6*w,hm-h); polygon([point(2*w,hm-5*h),point(4*w,hm-7*h), point(6*w,hm-5*h),point(2*w,hm-5*h)]); brush.Color:=clwhite; brush.Style:=bsSolid; pen.color:=clMaroon; rectangle(3*w,hm-4*h,5*w,hm-2*h); end; end; end. Задание 2. Нарисуем мигающий светофор. Поставьте на форму кнопку BitBtn и компонент PaintBox (п.к System). Опишем процедуру на событие OnPaint компоненты PaintBox: Рис. 84 Листинг: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TForm1 = class(TForm) PaintBox1: TPaintBox; BitBtn1: TBitBtn; procedure FormPaint(Sender: TObject); procedure PaintBox1Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormPaint(Sender: TObject); begin begin with canvas do begin pen.Color:=clBlack; brush.color:=clblack; rectangle(50,30,150,250); pen.color:=clgray; brush.color:=clgray; rectangle(90,250,110,330); pen.color:=clmaroon; brush.color:=clmaroon; ellipse(70,40,130,100); pen.Color:=clolive; brush.color:=clolive; ellipse(70,110,130,170); pen.Color:=clbackground; brush.color:=clbackground; ellipse(70,180,130,240); end; end; end; procedure TForm1.PaintBox1Click(Sender: TObject); begin begin with canvas do begin pen.Color:=clBlack; brush.color:=clblack; rectangle(50,30,150,250); pen.color:=clgray; brush.color:=clgray; rectangle(90,250,110,330); pen.color:=clmaroon; brush.color:=clmaroon; ellipse(70,40,130,100); pen.Color:=clolive; brush.color:=clolive; ellipse(70,110,130,170); pen.Color:=clbackground; brush.color:=clbackground; ellipse(70,180,130,240); end; end; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin begin with canvas do begin pen.Color:=clred; brush.Color:=clred; ellipse(70,40,130,100); sleep(500); pen.Color:=clmaroon; brush.Color:=clmaroon; ellipse(70,40,130,100); pen.Color:=clYellow; brush.Color:=clYellow; ellipse(70,110,130,170); sleep(500); pen.Color:=clolive; brush.Color:=clolive; ellipse(70,110,130,170); pen.Color:=cllime; brush.Color:=cllime; ellipse(70,180,130,240); sleep(500); pen.Color:=clbackground; brush.Color:=clbackground; ellipse(70,180,130,240); pen.Color:=clYellow; brush.Color:=clYellow; ellipse(70,110,130,170); sleep(500); pen.Color:=clolive; brush.Color:=clolive; ellipse(70,110,130,170); pen.Color:=clred; brush.Color:=clred; ellipse(70,40,130,100); sleep(500); pen.Color:=clmaroon; brush.Color:=clmaroon; ellipse(70,40,130,100); end; end; end; end. Вывод: Я научился использовать классы TPen, TBrush. Практическая работа №25 Тема: Создание редакторов свойств. Цель: Создать редактор свойств. Ход работы. Задание: Редактор Компонент.Рис. 85 Рис86 Вывод: Я создал редактор свойств.0>0> |