Содержание
- 2. Введение. Особенности программирования «под Windows» Управление техническими средствами осуществляется через API (Application Program Interface) – набор
- 3. Принцип событийного управления Приложение (в отличие от программы) – набор подпрограмм, вызываемых при наступлении некоторого события,
- 4. Структура приложения Минимально любое приложение Windows состоит из двух частей: основной программы и оконной функции. Появившиеся
- 5. Обработка сообщения от клавиатуры
- 6. Завершение приложения
- 7. Глава 8 Программирование в среде Delphi (Lazarus) с использованием библиотеки VCL (LCL) МГТУ им. Н.Э. Баумана
- 8. 8.1 События среды и их обработчики Обработчики сообщений операционной системы (ОС) предусмотрены у объектов класса TForm
- 9. События среды Обработчики сообщений ОС, встроенные в классы компонентов VCL, инициируют множество событий среды Delphi или
- 10. Для каждого обработчика событий предусмотрен заголовок и определенный список передаваемых ему параметров. а) procedure TForm1.FormActivate(Sender:TObject); Параметр
- 11. Основное окно приложения строится на базе класса TForm. При входе в среду программирования предоставляется заготовка приложения,
- 12. а) при изменении состояния формы: OnCreate – в начальной стадии создания формы - используется при необходимости
- 13. б) от клавиатуры и мыши: OnKeyPressed – при нажатии клавиш, которым соответствует код ANSI; OnKeyDown, OnKeyUp
- 14. 1. Метка (класс TLabel) Метка – окно с текстом и может использоваться для формирования на форме
- 15. 2. Строчный редактор (класс TEdit) Компонент представляет собой окно, обычно выделенное цветом, которое может использоваться, например,
- 16. 3. Кнопка Компонент представляет собой окно, в котором размещается название кнопки. Используется для инициирования каких-либо действий.
- 17. 1 Метод MessageBox (класс TApplication) function MessageBox(Text, Caption: PChar; Flags:Longint=MB_OK):Integer; Пример: Application.MessageBox('Строка пуста', 'Error',mb_Ok); Возвращает код
- 18. Вычисление квадрата заданного числа Form1: Name:=MainForm; Caption:='Возведение в квадрат'; Label1: Name:='InputLabel'; Caption:='Введите число'; Label2: Name:=OutPutLabel; Caption:='Квадрат
- 19. Формы интерфейса
- 20. Диаграмма состояний интерфейса Нормальное состояние
- 21. Объектная декомпозиция в виде диаграммы объектов
- 22. Определение обрабатываемых событий по диаграмме состояний интерфейса С1 – активация формы; С2 – ввод Enter; С3
- 23. Диаграмма классов приложения
- 24. Program Ex8_01; Uses Forms, MainUnit in 'MainUnit.pas' {MainForm}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TMainForm, MainForm); Application.Run; end.
- 25. Unit MainUnit; interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; Type TMainForm
- 26. var MainForm: TMainForm; implementation {$R *.DFM} procedure TMainForm.FormActivate(Sender: TObject); begin NextButton.Enabled:=false; InPutEdit.ReadOnly:=false; InPutEdit.Clear; InPutEdit.Enabled:=true; InPutEdit.SetFocus; OutPutLabel.Visible:=false;
- 27. procedure TMainForm.InPutEditKeyPress(Sender: TObject; var Key: Char); var x:real;Code:integer; begin If Key=#13 then begin Key:=#0; Val(InPutEdit.Text,x,Code); if
- 28. else begin MessageDlg('Недопустимые символы.',mtError, [mbOk], 0); end end end; procedure TMainForm.NextButtonClick(Sender: TObject); begin FormActivate(NextButton); end; procedure
- 29. Дополнительные скалярные типы данных а) целый Cardinal 0..2147483647 без знака 4 байта б) логические ByteBool 1
- 30. Тип «Дата-время» д) TDateTime - Double – целая часть – число дней с 30.12.1899, дробная –
- 31. Тип «Дата-время» 7) function StrToDate(S:String):TDateTime – преобразует строку в дату, разделитель – символ, указанный при настройке
- 32. Строковые типы a) ShortString – до 255 символов, 0-й байт – длина строки; б) AnsiString –
- 33. Дополнительные процедуры и функции 1) function ANSILowerCase(const S:String):String – заменяет прописные буквы на строчные; 2) function
- 34. Дополнительные процедуры и функции (2) 7) function IntToStr(V:Integer):String – преобразует целое число в строку символов; 8)
- 35. 1. Изменены некоторые служебные слова и названия процедур: Text ⇒ TextFile Assign ⇒ AssignFile Close ⇒
- 36. Процедурный тип данных 1) При объявлении указателя на метод добавляют of object Пример: Type metodproc =
- 37. Основная особенность: все объекты размещаются в динамической памяти. Переменные класса являются ссылками. В отличие от указателей
- 38. Конструктор Create и деструктор Destroy класса должны содержать вызов конструктора и деструктора TObject, которые обеспечивают выделение
- 39. 1) виртуальные методы: procedure Print;virtual; {в базовом класса} procedure Print;override; {в производном классе} 2) абстрактные методы:
- 40. Type pTNum = ^TNum; TNum = Object n: integer; procedure Init (an:integer); end; Procedure TNum.Init; begin
- 41. Var A, B:TNum; A:=TNum.Create; B:=A; B.Destroy; A.n:=3; {!!!} Особенности работы с объектами
- 42. 8.6 События Мыши 1 Событие «Нажатие кнопки мыши над компонентом окна приложения»: procedure MouseDown(Sender: TObject; Button:
- 43. События Мыши (2) 2 Событие «Движение мыши»: procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); 3
- 44. 8.7 Создание графических изображений Изображения в Windows создаются с помощью типов: точка, прямоугольник; и компонентов: перо,
- 45. Точка и прямоугольник Точка – тип, позволяющий определить точку на экране: type TPoint = record X:
- 46. Компонент перо (класс TPen) C помощью класса TPen создается объект Перо, служащий для вычерчивания линий, контуров
- 47. Компонент Кисть (класс TBrush) Объекты класса TBrush служат для заполнения внутренего пространства. Свойства: Color:TColor – цвет
- 48. Компонент Шрифт (класс TFont) Объект класса TFont – определяет шрифт, которым выводится текст. Свойства: Charset:TFontCharSet –
- 49. Компонент Канва (класс TCanvas) Класс создает Канву – холст для рисования. Свойства: Brush:TBrush – кисть; Pen:TPen
- 50. Основные методы класса TCanvas procedure MoveTo(X,Y:Integer) – перемещает перо в указанную точку; procedure LineTo(X,Y:Integer)– чертит линию
- 51. Основные методы класса TCanvas (2) procedure Arc(X1,Y1,X2,Y2,X3,Y3, X4,Y4:integer) – чертит дугу эллипса в прямоугольнике (X1,Y1,X2,Y2), направление
- 52. Основные методы класса TCanvas (3) procedure FillRect(const Rect: TRect)– закрашивает кистью прямоугольник, включая левую и верхнюю
- 53. Основные методы класса TCanvas (4) procedure TextOut(X,Y:Integer; const Text:string)– вывод строки текста шрифтом TFont в прямоугольник
- 54. Компонент Образ (класс TImage) Образ – окно для работы с графикой. Свойства: AutoSize:Boolean – автоматическое изменение
- 55. Рисование прямоугольников (Ex8_2)
- 56. Модуль MainUnit unit MainUnit; interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
- 57. Модуль MainUnit (2) var MainForm: TMainForm; implementation Var Rect:TRect;first:boolean; {$R *.DFM} procedure TMainForm.FormActivate(Sender: TObject); begin Image.Canvas.Brush.Color:=clWhite;
- 58. Модуль MainUnit (3) procedure TMainForm.ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift
- 59. Модуль MainUnit (4) procedure TMainForm.ImageMouseUp(Sender: TObject; Button: TMouseButton;Shift:TShiftState;X,Y:Integer); begin if Button=mbLeft then begin Image.Canvas.Pen.Color:=clWhite; Image.Canvas.Rectangle(Rect.Left,Rect.Top, Rect.Right,Rect.Bottom);
- 60. 8.8 Создание приложений с движущимися изображениями 1 Перемещение x1 = x + dx, y1 = y
- 61. Вращение фигур (Ex8_03)
- 62. Объектная декомпозиция h*sin α h h*cos α α (x,y) dx = h*cos α dy = h*sin
- 63. Диаграмма классов предметной области TObject TFigure -x,y,halflen, -dx,dy, -Image -Draw() -Rel() +Create() +Move() TLine -Draw() TSquare
- 64. Модуль Figure Unit Figure; Interface Uses graphics,ExtCtrls; Type TFigure=Class x,y, halflen,dx,dy:integer; Image:TImage; constructor Create(ax,ay,ah:integer;aImage:TImage); procedure Move(t:single);
- 65. Модуль Figure (2) Implementation Constructor TFigure.Create; Begin inherited Create; x:=ax; y:=ay; halflen:=ah; Image:=aImage; End; Procedure TFigure.Rel;
- 66. Модуль Figure (3) Procedure TLine.Draw; Begin Image.Canvas.MoveTo(x+dx,y+dy); Image.Canvas.LineTo(x-dx,y-dy); End; Procedure TSquare.Draw; Begin Image.Canvas.MoveTo(x+dx,y+dy); Image.Canvas.LineTo(x-dy,y+dx); Image.Canvas.LineTo(x-dx,y-dy); Image.Canvas.LineTo(x+dy,y-dx);
- 67. Описание класса окна Unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
- 68. Объявление объектов implementation uses Figure; {$R *.dfm} Var t:single=0.0; L:TLine; S:TSquare; C:TCircle; procedure TMainForm.FormActivate(Sender: TObject); begin
- 69. Создание объектов и реализация движения procedure TMainForm.BeginButtonClick(Sender: TObject); begin L:=TLine.Create(60,100,50,Image); S:=TSquare.Create(180,100,50,Image); C:=TCircle.Create(300,100,50,10,Image); Timer1.Enabled:=true; // запуск таймера
- 70. Процедура завершения приложения procedure TMainForm.EndButtonClick(Sender: TObject); begin Close; end; initialization finalization L.Free; S.Free; C.Free; end.
- 71. 8.9 Использование визуальных компонентов для управления типом и параметрами фигур. Примитивный графический редактор (Ex 8.5)
- 72. Объектная декомпозиция Активизировать
- 73. Диаграмма состояний интерфейса для рисования и настройки фигур Ожидание рисования фигуры Выбор типа фигуры Выбор размера
- 74. Диаграмма классов предметной области
- 75. Unit Figure; Interface Uses extctrls,Graphics; Type TMyFigure=class public x,y,Radius:Word; Color:TColor; Image:TImage; Constructor Create(aImage:TImage; ax,ay,ar:Word;aColor:TColor); Рrocedure Clear;
- 76. TMyCircle=class(TMyFigure) public Procedure Draw; override; end; TMySquare=class(TMyFigure) public Procedure Draw; override; end; Implementation Constructor TMyFigure.Create; Begin
- 77. Procedure TMyFigure.Clear; Var TempColor:TColor; Begin TempColor:=Color; Color:=Image.Canvas.Brush.Color; Draw; Color:=TempColor; End; Модуль Figure (3)
- 78. Procedure TMyCircle.Draw; Begin Image.Canvas.Pen.Color:=Color; Image.Canvas.Ellipse(x-Radius,y-Radius, x+Radius,y+Radius); End; Procedure TMySquare.Draw; Begin Image.Canvas.Pen.Color:=Color; Image.Canvas.Rectangle(x-Radius,y-Radius, x+Radius,y+Radius); End; End. Модуль
- 79. unit Main; interface uses Windows,Messages,SysUtils,Variants,Classes,Graphics, Controls,Forms,Dialogs,ComCtrls, StdCtrls, ExtCtrls; type TMainForm = class(TForm) Image: TImage; ColorButton,ExitButton: TButton;
- 80. procedure ImageMouseDown(Sender: TObject;… ); procedure UpDownClick(Sender: TObject; …); procedure ColorButtonClick(Sender: TObject); procedure RadioGroupClick(Sender: TObject); procedure ExitButtonClick(Sender:
- 81. procedure TMainForm.ImageMouseDown(Sender: TObject; Button:TMouseButton;Shift:TShiftState;X,Y:Integer); begin if Button=mbLeft then case RadioGroup.ItemIndex of 0: begin C.Free; C:=TMyCircle.Create(Image,X,Y, strtoint(rEdit.Text),Image.Canvas.Pen.Color);
- 82. procedure TMainForm.UpDownClick(Sender:TObject; Button:TUDBtnType); begin if C nil then begin C.Clear; C.Radius:=strtoint(rEdit.Text); C.Draw; end; end; procedure TMainForm.ColorButtonClick(Sender:
- 83. Модуль Main (5) procedure TMainForm.RadioGroupClick(Sender: TObject); Var C1:TMyFigure; begin if C nil then begin C.Clear; case
- 84. Модуль Main (5) procedure TMainForm.ExitButtonClick(Sender:TObject); begin Close; end; initialization finalization C.Free; end.
- 85. 8.10 Построение графиков функции (Ex 8.4)
- 86. Отображение графика функции на экран Масштабы по осям ОХ и ОУ: xm ym mx= ------------ ,
- 87. Модуль Graphic unit Graphic; Interface Uses ExtCtrls,Graphics; Type Fn=Function(X:single):single; {процедура рисования графиков} Procedure Run( xn, {начальное
- 88. Модуль Graphic Implementation Procedure Run; Var arr:array[1..200] of {координаты точек на холсте} record x,y:integer; end; x,
- 89. Модуль Graphic (2) Begin Image.Canvas.Pen.Color:=clGreen; Image.Canvas.Rectangle(x1,y1,x2,y2); {рамка} xm:=x2-x1+1; ym:=y2-y1+1; {область графика} dx:=(xk-xn)/n; {шаг просчета точек} x:=xn;
- 90. Модуль Graphic (3) Image.Canvas.Pen.Color:=clRed; Image.Canvas.Pen.Width:=3; x:=xn; for i:=1 to n do {считаем координаты точек} begin arr[i].x:=round((x-xn)*mx)+x1+xs;
- 91. Модуль Graphic (4) x:=xn; dxl:=(xk-xn)/5; {расстояние между линиями сетки} Image.Canvas.Pen.Width:=1; Image.Canvas.Pen.Color:=clBlue; repeat {вертикальные линии сетки и
- 92. Модуль Graphic (5) y:=Fmin; dyl:=(fmax-fmin)/5; repeat {горизонтальные линии сетки и подпись} Str(y:5:2,s); Image.Canvas.TextOut(x1+5, round(-(y-Fmin)*my)+ys+y1-6,s); Image.Canvas.MoveTo(x1+xs, round(-(y-Fmin)*my)+y1+ys);
- 94. Скачать презентацию