1 Часть 3 Создание приложений Windows Введение. Особенности программирования «под Windows» Управление техническими средствами осуществляется через API.

Презентация:



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

Презентация Delphi
Лекция 2 Delphi. Палитра компонентов Окно редактора кода Окно конструктора формы Окно инспектора объектов.
Учебная система программирования вводный курс. УРОК 5. Графика и графические операторы в языке Паскаль Паскаль имеет развитую систему работу с графикой,
Графика в Pascal Графика в Pascal. Модуль GraphABC Модуль GraphABC.
§ 28 Линейные массивы и работа с графикой на языке Pascal Глава 3. Программирование на языках JavaScript и Pascal.
Типы данных. В Delphi в объявлении переменной необходимо указать ее тип Стандартные типы уже определены в языке, а переменную такого типа можно объявить,
Графические возможности языка программирования Delphi.
Практические работы в Pascal ABC
Графические возможности Delphi Delphi позволяет программисту разрабатывать программы, которые могут выводить графику: схемы, чертежи, иллюстрации. Программа.
Тема 5. Введение в среду визуального программирования Borland Delphi 7.0.
Файловая переменная. Файл – совокупность данных, записанная во внешней памяти под определенным именем. Любой файл имеет три характерные особенности: уникальное.
Графические возможности языка программирования Delphi.
Робота з клавіатурою та мишею у Delphi. Таймер.. Функции Delphi при работе с мышью При работе с мышью среда Delphi позволяет: определять координаты курсора.
Тема 5. Основы современной технологии программирования Программирование в средах современных информационных систем. Интегрированные системы разработки.
Преподаватель информатики ГБОУ СПО «Сибайский педагогический колледж» Гаврилова Екатерина Федоровна.
Форма – главный компонент приложения. Формы представляют собой видимые окна Windows и являются основной частью практически любого приложения.
МУНИЦИПАЛЬНОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ СРЕДНЯЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ШКОЛА 25 Выполнила: учитель информатики Турганова Н.В. Томск
Основы программирования в Turbo Pascal Язык программирования Паскаль.
Основы обработки графических изображений. Что такое Paint?
Транксрипт:

1 Часть 3 Создание приложений Windows Введение. Особенности программирования «под Windows» Управление техническими средствами осуществляется через API (Application Program Interface) – набор из нескольких тысяч функций, выполняющих все системно-зависимые действия, такие как выделение памяти, вывод на экран и т.д. Функции API сгруппированы в DLL (Dynamic Link Library).

2 Принцип событийного управления Приложение – набор подпрограмм, вызываемых при наступлении некоторого события, которым считается любое изменение в системе, касающееся данного приложения. Каждому приложению на экране соответствует окно. Окно – самостоятельно существующий объект, параметры которого хранятся в специальной структуре данных, а поведение определяется обработчиками сообщений, составляющими оконную функцию.

3 Структура приложения Минимально любое приложение Windows состоит из двух частей: основной программы и оконной функции. Появившиеся в очереди сообщения выбираются циклом обработки сообщений и передаются через Windows соответствующей оконной функции приложения. Для выполнения действий обработчики сообщений обращаются к функциям API.

4 Обработка сообщения от клавиатуры

5 Завершение приложения

6 Глава 8 Программирование в среде Delphi с использованием библиотеки VCL 8.1 События Delphi и их обработчики Обработчики сообщений Windows предусмотрены у объектов класса TForm и классов управляющих компонентов, таких как кнопки, редакторы и т. п. Обработка выполняется следующим образом: 1. В системе происходит событие, например, пользователь пере- двинул мышь или нажал на клавишу клавиатуры, в результате генерируется сообщение об этом событии – сообщение Windows. 2. Сообщение Windows диспетчируется конкретному приложению. 3. В приложении сообщение передается активному компоненту (окну или управляющему элементу). 4. Метод обработки сообщения Windows компонента инициирует заранее предусмотренные события Delphi. 5. Если в приложении предусмотрен соответствующий обработчик события Delphi, то он вызывается, если нет – то продолжается обработка сообщения Windows.

7 События Delphi Обработчики сообщений Windows, встроенные в классы компонентов VCL, инициируют множество событий Delphi. Например, обработчик события клавиатуры WM_CHAR класса TForm инициирует три события Delphi. Событие Delphi Сообщение Windows

8 Для каждого обработчика событий предусмотрен заголовок и определенный список передаваемых ему параметров. а) procedure TForm1.FormActivate(Sender:TObject); Параметр Sender – отправитель (инициатор события). б) procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); Параметр Key – символ ANSI. в) procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); Параметры: Key – виртуальный код, Shift – управляющие клав. г) procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); Обработчики событий Delphi Имя компонента Имя события Delphi

9 Основное окно приложения строится на базе класса TForm. При входе в Delphi предоставляется заготовка приложения, которая «умеет» (содержит определенные обработчики сообщений Windows) выполнять стандартные действия. Свойства: Caption – заголовок окна (по умолчанию Form1); FormStyle – вид формы(обычное, родительское, дочернее, неперекрываемое); Width, Height, Top, Left – размеры и местоположение; Color – цвет фона; Font – характеристики шрифта; Cursor – форма курсора мыши и т. д. Методы: Show – показать; Hide – спрятать; Close – закрыть; ShowModal – показать в модальном режиме и т. д. 8.2 Класс формы TForm TForm TForm1 Компоненты Обработчики событий

10 а) при изменении состояния формы: OnCreate – в начальной стадии создания формы - используется при необходимости задания параметров (цвет или размер); OnActivate – при получении формой фокуса ввода (окно становится активным и ему адресуется весь ввод с клавиатуры); OnShow – когда форма (окно) становится видимой; OnPaint – при необходимости нарисовать или перерисовать форму; OnResize - при изменении размеров формы на экране; OnDeactivate – при потере формой фокуса ввода (окно становится неактивным); OnHide – при удалении формы с экрана (окно становится невидимым); OnCloseQuery – при попытке закрыть форму - обычно используется для создания запроса-подтверждения необходимости закрытия окна; OnClose – при закрытии формы; OnDestroy – при уничтожении формы; События Delphi обрабатываемые объектами класса TForm

11 б) от клавиатуры и мыши: OnKeyPressed – при нажатии клавиш, которым соответствует код ASCII; OnKeyDoun, OnKeyUp – при нажатии и отпускании любых клавишI; OnClick, OnDblClick – при обычном и двойном нажатии клавиш мыши; OnMouseMove – при перемещении мыши (многократно); OnMouseDown, OnMouseUp – при нажатии и отпускании клавиш мыши; в) при перетаскивании объекта мышью: OnDragDrop – в момент опускания объекта на форму; OnDragOver – в процессе перетаскивания объекта над формой (многократно); г) другие; OnHelp – при вызове подсказки; OnChange – при изменении содержимого компонент. События Delphi для класса TForm (2)

12 1. Метка (класс TLabel) Метка – окно с текстом и может использоваться для формирования на форме некоторых надписей или подписей. Основные свойства: Caption – заголовок – текст, выводимый в окне компонента. Name – имя компонента в программе. Visible – определяет видимость компонента. Alignment – определяет способ выравнивания текста в окне компонента: taCenter - по центру; taLeftJustify - по левой границе; taRightJustify - по правой границе. Font – определяет шрифт текста. Color – определяет цвета текста и фона в окне. WordWrap – определяет, разбивать или нет текст на строки. Transparent – определяет, виден ли рисунок фона через окно. 8.3 Основные визуальные компоненты и средства визуализации сообщений пользователю

13 2. Строчный редактор (класс TEdit) Компонент представляет собой окно, обычно выделенное цветом, которое может использоваться, например, для организации ввода информации. Основные свойства: Text – строка текста. ReadOnly – определяет возможность ввода информации в окно. Name – имя компонента в программе. Visible – определяет видимость компонента. Enable – доступность компонента. Основные методы: Clear – очистка поля Text. SetFocus – установка фокуса ввода. Основные события: OnKeyPressed – нажатие алфавитно-цифровой клавиши. Основные визуальные компоненты (2)

14 3. Кнопка Компонент представляет собой окно, в котором размещается название кнопки. Используется для инициирования каких-либо действий. Основные свойства: Caption - название кнопки. Name – имя компонента в программе. Visible – определяет видимость компонента. Enable – доступность компонента. Default – определяет, генерируется ли событие OnClick для данной кнопки при нажатии клавиши Enter. Cancel – аналогично, но для клавиши Esc. Основные события: OnClick – «щелчок» мышкой в зоне компонента. Основные методы: SetFocus – установка фокуса ввода. Основные визуальные компоненты (3)

15 1 Метод MessageBox (класс TApplication) function MessageBox(Text, Caption: PChar; Flags:Longint=MB_OK):Integer; Пример: Application.MessageBox('Строка пуста', 'Error',mb_Ok); Возвращает код ответа. 2 Функция MessageDlg function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word; Пример: MessageDlg('Поле пусто',mtError, [mbOk],0); Средства визуализации сообщений пользователю

16 Вычисление квадрата заданного числа Form1: Name:=MainForm; Caption:='Возведение числа в квадрат'; Label1: Name:='InputLabel'; Caption:='Введите число'; Label2: Name:=OutPutLabel; Caption:='Квадрат числа равен:'; Edit1: Name:=InputEdit; Edit2: Name:=OutPutEdit; Enable:=false; ReadOnly:=true; Button1: Name:=NextButton; Caption:='Следующее'; Button2: Name:=ExitButton; Caption:='Выход';

17 Формы интерфейса

18 Диаграмма состояний интерфейса Нормальное состояние

19 Объектная декомпозиция

20 Определение обрабатываемых событий по диаграмме состояний интерфейса С1 – активация формы; С2 – ввод Enter; С3 – нажатие кнопки Выход; С4 – нажатие кнопки Следующее; С5 – нажатие кнопки OK

21 Диаграмма классов приложения

22 Program Ex8_01; Uses Forms, MainUnit in 'MainUnit.pas' {MainForm}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TMainForm, MainForm); Application.Run; end. Файл проекта

23 Unit MainUnit; interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; Type TMainForm = class(TForm) Bevel1: TBevel; NextButton, ExitButton: TButton; InputLabel, OutPutLabel: TLabel; InPutEdit, OutPutEdit: TEdit; procedure FormActivate(Sender: TObject); procedure InPutEditKeyPress(Sender: TObject; var Key: Char); procedure NextButtonClick(Sender: TObject); procedure ExitButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; Файл MainUnit

24 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; OutPutEdit.Visible:=false; end; Файл MainUnit (2)

25 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 Code=0 then begin InputEdit.ReadOnly:=true; InputEdit.Enabled:=false; OutPutLabel.Visible:=true; OutPutEdit.Visible:=true; OutPutEdit.Text:=floattostr(sqr(x)); NextButton.Enabled:=true; NextButton.SetFocus; end Файл MainUnit (3)

26 else begin MessageDlg('Недопустимые символы.',mtError, [mbOk], 0); end end; procedure TMainForm.NextButtonClick(Sender: TObject); begin FormActivate(NextButton); end; procedure TMainForm.ExitButtonClick(Sender: TObject); begin Close; end; end. Файл MainUnit (4)

27 Дополнительные скалярные типы данных а) целый Cardinal без знака 4 байта б) логические ByteBool 1 байт WordBool 2 байта LongBool 4 байта в) символьные ANSIChar 1 байт (ANSI) WideChar 2 байта (Unicode) г) вещественные – денежный: Currency байт 8.4 Более сложные элементы Delphi Pascal true – любое число, кроме 0

28 Тип «Дата-время» д) TDateTime - Double – целая часть – число дней с , дробная – часть дня Пример: Для работы используются следующие подпрограммы: 1) function Now:TDateTime – возвращает текущую дату и время; 2) function Date:TDateTime – возвращает текущую дату; 3) function Time:TDateTime – возвращает текущее время; 4) function DateTimeToStr(D:TDateTime):String – преобразует дату и время в строку символов; 5) function DateToStr(D:TDateTime):String – преобразует дату в строку символов; 6) function TimeToStr(D:TDateTime):String – преобразует время в строку символов;

29 Тип «Дата-время» 7) function StrToDate(S:String):TDateTime – преобразует строку в дату, разделитель – символ, указанный при настройке Windows, формат: день.месяц[.год]; 8) function StrToTime(S:String):TDateTime – преобразует строку во время, разделитель – символ, указанный при настройке Windows, формат: часы.минуты[.секунды][ am или pt]; 9) function StrToDateTme(S:String):TDateTime – преобразует строку в дату-время, разделители – символы, указанный при настройке Windows, формат: день.месяц[.год] часы:минуты[.секунды][ am или pt]; 10) procedure DecodeDate(D:TDateTime:Var Year,Month,Day:Word) – декодирует дату; 11) procedure DecodeTime(D:TDateTime: Var Hour,Min,Sec,MSec:Word) – декодирует время;

30 Строковые типы a) ShortString – до 255 символов, 0-й байт – длина строки; б) AnsiString – указатель на строку ANSI символов, WideString – указатель на строку символов Unicode: в) String: {$H+} == ANSIString ; {$H-} == ShortString ; Исключение! String[ ] – всегда ShortString Для перечисленных строк определены операции конкатенации и сравнения, а также специальные функции в System и SysUtils г) PChar – указатель на массив символов, завершающийся нулем. Строки совместимы: :=

31 Дополнительные процедуры и функции 1) function ANSILowerCase(const S:String):String – заменяет прописные буквы на строчные; 2) function ANSIUpperCase(const S:String):String – заменяет строчные буквы на прописные; 3) function StrToInt(S:String):Integer – преобразует строку в целое число; 4) function StrToIntDef(S:String; Default:Integer):Integer – то же + возвращает код ошибки; 5) function StrTo IntRange(S:String; Min..Max:LongInt):LongInt – то же + генерирует исключение ERangeError, если не входит в диапазон; 6) function StrToFloat(S:String):Extended – преобразует строку в вещественное число, в качестве разделителя использует символ, указанный при настройке Windows;

32 Дополнительные процедуры и функции (2) 7) function IntToStr(V:Integer):String – преобразует целое число в строку символов; 8) function IntToHex(V:Integer; Digits:Integer):String – преобразует целое число в строку шестнадцатеричных символов, минимальной длиныDigits; 9) function FloatToStr(V:Extended):String – преобразует вещественное число в строку символов.

33 1. Изменены некоторые служебные слова и названия процедур: Text TextFile Assign AssignFile Close CloseFile Файлы

34 Процедурный тип данных 1) При объявлении указателя на метод добавляют of object Пример: Type metodproc = procedure(Sender:TObject) of object; 2) Переменным процедурного типа можно присвоить nil и проверять их значение при необходимости Пример: if Assigned(p2) then p2(x,y);

35 {$Jx} – управляет способом объявления инициализированных переменных: + – для объявления инициализированной переменной используются типизированные константы, например: Const x:single=5.1; {x – фактически переменная} - – можно объявлять инициализированной переменной, например: Var x:single=5.1; {x – фактически переменная} {$Bx} – управляет способом вычисления логических выражений: + – полное: function NumRead:integer; … if (NumberRead>0) and (NumberRead>0) then … -– укороченное: if (i>=Low(Arr))and(i<=High(Arr))and(Arr[i]<0) then … 8.5 Опции компилятора

36 {$Xx} – разрешение расширенного синтаксиса: - вызова функций как процедур; - поддержка pChar; {$Px} – использование открытых параметров(+); {$Hx} – использование в качестве String ShortString(-) или AnsiStrings(+); {$Rx} – контроль(+) индексов массивов и строк; {$Ix} – контроль(+) операций ввода/вывода; {$Qx} – контроль переполнения(+) при выполнении операций над целыми числами Опции компилятора (2)

События Мыши 1 Событие «Нажатие кнопки мыши над компонентом окна приложения»: procedure MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); где Button:TMouseButton - определяет, какая кнопка нажата: type TMouseButton = (mbLeft, mbRight, mbMiddle); - соответственно, левая, правая или средняя кнопки. Shift:TShiftState - определяет нажатые управляющих клавиш клавиатуры и мыши: type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble); X, Y: Integer - координаты мыши относительно компонента.

38 События Мыши (2) 2 Событие «Движение мыши»: procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); 3 Событие «Отпускание клавиши мыши»: procedure MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

39 Управление экраном в текстовом режиме

40 Управление экраном в графическом режиме Windows работает в графическом режиме.

Создание графических изображений Изображения в Windows создаются с помощью типов: точка, прямоугольник; и компонентов: перо, которое используется для рисования линий; кисть, которая используется для закрашивания замкнутых фигур; шрифт, который используется при выводе надписей; холст, на котором выполняются изображения.

42 Точка и прямоугольник Точка – тип, позволяющий определить точку на экране: type TPoint = record X: Longint; Y: Longint; end; Прямоугольник – тип, используемый для задания прямоугольника: type TRect = record case Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: TPoint); end;

43 Компонент перо (класс TPen ) C помощью класса TPen создается объект Перо, служащий для вычерчивания линий, контуров и т. п. Свойства: Color:TColor – цвет вычерчиваемых линий; Width:Integer – толщина линии в пикселях экрана; Style:TPenStyle – стиль линий – учитывается только для толщины 1 пиксель: psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame; Mode:TPenMode – способ взаимодействия линий с фоном, например, pmBlack – только черные линии, pmWhite – только белые линии, pmNop – линии не видны на фоне, pmNot – инверсия фона и т.д..

44 Компонент Кисть (класс TBrush ) Объекты класса TBrush служат для заполнения внутренего пространства. Свойства: Color:TColor – цвет кисти: clAqua (прозрачный), clBlack, clBlue, clDkGray, clFuchsia, clGray, clGreen, clLime (салатовый), clLtGray, clMaroon (каштановый), clNavy (синий), clOlive, clPurple (фиолетовый), clRed, clSilver (серебряный), clTeal, clWhite, clYellow Style:TBrushStyle – стиль кисти, например: bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal,bsBDiagonal, bsCross, bsDiagCross; BitMap:TBitMap – растровое изображение, которое будет использоваться кистью для заполнения, если свойство определено, то цвет и стиль игнорируются.

45 Компонент Шрифт (класс TFont ) Объект класса TFont – определяет шрифт, которым выводится текст. Свойства: Charset:TFontCharSet – набор символов: RUSSIANCHARSET – русский, OEM_CHARSET – текст MS DOS; Name:TFontName – имя шрифта, по умолчанию – MS Sans Serif; Color:TColor – цвет; Height:Integer – высота в пикселях; Size:Integer – высота в пунктах (1/7 дюйма); Pitch:TFontPitch – способ расположения букв в тексте: fpFixed – моноширный текст, fpVariable – пропорциональный текст, fpDefault – ширина шрифта по умолчанию; Style:TFontStyle – стиль шрифта – комбинация из: fsBold – полужирный, fsItalic – курсив, fsUnderline – подчеркнутый, fsStrikeOut – перечеркнутый.

46 Компонент Канва (класс TCanvas) Класс создает Канву – холст для рисования. Свойства: Brush:TBrush – кисть; Pen:TPen – перо; Font:TFont – шрифт; PenPos:TPoint – определяет текущее положение пера над холстом в пискелях относительно левого верхнего угла; CopyMode:TCopyMode – способ взаимодействия растрового изображения с цветом фона, используется при копировании части канвы на другую методом CopyRect: cmBlackness – заполнение черным цветом, cmDestInvert – заполнение инверсным фоном, cmSrcCopy – копирует изображение источника на канву и т.д.; Pixels[X,Y:Integer]:TColor – массив пикселей канвы.

47 Основные методы класса TCanvas procedure MoveTo(X,Y:Integer) – перемещает перо в указанную точку; procedure LineTo(X,Y:Integer) – чертит линию из текущей точки в заданную; procedure Rectangle(X1, Y1, X2, Y2: Integer) – рисует и закрашивает кистью прямоугольник; procedure Polyline(Points:array of TPoint) – рисует ломаную линию; type TPoint = record X,Y:Longint; end; procedure Polygon(Points: array of TPoint) – рисует и закрашивает кистью многоугольник; procedure Ellipse(X1, Y1, X2, Y2: Integer) – рисует эллипс в заданном прямоугольнике и закрашивает кистью; procedure FrameRect(const Rect:TRect) – очерчивает границы прямоугольника текущей кистью без заполнения; X, Y X1,Y1 X2,Y2

48 Основные методы класса TCanvas (2) procedure Arc(X1,Y1,X2,Y2,X3,Y3, X4,Y4:integer) – чертит дугу эллипса в прямоугольнике (X1,Y1,X2,Y2), направление – против часовой стрелки; procedure Chord(X1,Y1,X2,Y2,X3,Y3, X4,Y4:integer ) – чертит сегмент эллипса в прямоугольнике (X1,Y1,X2,Y2), направление – против часовой стрелки; procedure Pie(X1,Y1,X2,Y2,X3,Y3, X4,Y4:integer ) – чертит сектор эллипса в прямоугольнике (X1,Y1,X2,Y2), направление – против часовой стрелки; procedure RoundRect(X1,Y1,X2,Y2, X3,Y3:integer ) – чертит и заполняет прямоугольник с закругленными краями. X1,Y1 X3,Y3 X2,Y2 X4,Y4 Центр X1,Y1 X3,Y3 X2,Y2 X4,Y4 Центр X1,Y1 X3,Y3 X2,Y2 X4,Y4 Центр X1,Y1 X2,Y2 X3,Y3

49 Основные методы класса TCanvas (3) procedure FillRect(const Rect: TRect) – закрашивает кистью прямоугольник, включая левую и верхнюю границы. type TRect = record case Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: TPoint); end; procedure FloodFill(X,Y:Integer;Color:TColor; FillStyle:TFillStyle) – type TFillStyle = (fsSurface,fsBorder); FillStyle=fsBorder - заливка области с границей цвета Color; FillStyle=fsSurface - заливка области цвета Color цветом, определенным кистью.

50 Основные методы класса TCanvas (4) procedure TextOut(X,Y:Integer; const Text:string) – вывод строки текста шрифтом TFont в прямоугольник с верхним левым. углом в точке (X,Y); function TextExtent(Const Text:String):TSize – возвращает ширину и высоту прямоугольника, охватывающего текстовую строку Text ; function TextWidth(Const Text:string):Integer – возвращает ширину прямоугольника, охватывающего текстовую строку; ТЕКСТ X,Y

51 Компонент Образ (класс TImage) Образ – окно для работы с графикой. Свойства: AutoSize:Boolean – автоматическое изменение размера компонента в зависимости от размера картинки (при загрузке рисунка); Stretch:Boolean – автоматическое масштабирование рисунка при изменении размеров компонента; Picture:TPicture – свойство-объект картинка (двоичный образ, пиктограмма, графический метафайл); класс включает методы: procedure LoadFromFile(const FileName: string); – загрузка картинки из файла; procedure SaveToFile(const FileName: string); – сохранение картинки в файле. Canvas:TCanvas – холст; Brush:TBrush – кисть; Pen:TPen – перо; Font:TFont – шрифт.

52 Рисование прямоугольников (Ex8_2)

53 Модуль MainUnit unit MainUnit; interface Uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TMainForm = class(TForm) Image: TImage; ExitButton: TButton; procedure FormActivate(Sender: TObject); procedure ImageMouseDown(Sender: TObject; Button:TMouseButton; Shift:TShiftState; X,Y:Integer); procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); procedure ImageMouseUp(Sender: TObject; Button:TMouseButton;Shift: TShiftState;X,Y: Integer); procedure ExitButtonClick(Sender: TObject); end;

54 Модуль MainUnit (2) var MainForm: TMainForm; implementation Var Rect:TRect;first:boolean; {$R *.DFM} procedure TMainForm.FormActivate(Sender: TObject); begin Image.Canvas.Brush.Color:=clWhite; end; procedure TMainForm.ImageMouseDown(Sender: TObject; Button:TMouseButton;Shift:TShiftState;X,Y:Integer); begin if Button=mbLeft then begin Rect.Left:=x; Rect.Top:=y; first:=true; end;

55 Модуль MainUnit (3) procedure TMainForm.ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then begin if first then first:=not first else begin Image.Canvas.Pen.Color:=clWhite; Image.Canvas.Rectangle(Rect.Left,Rect.Top, Rect.Right,Rect.Bottom); end; Rect.Right:=X; Rect.Bottom:=Y; Image.Canvas.Pen.Color:=clBlack; Image.Canvas.Rectangle(Rect.Left,Rect.Top, Rect.Right,Rect.Bottom); end;

56 Модуль 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); Rect.Right:=X; Rect.Bottom:=Y; Image.Canvas.Brush.Color:=clRed; Image.Canvas.FillRect(Rect); Image.Canvas.Brush.Color:=clWhite; Image.Canvas.Pen.Color:=clBlack; end; procedure TMainForm.ExitButtonClick(Sender: TObject); begin Close; end; end.

57 Построение графика функции

58 Отображение графика функции на экран xm ym mx= , my = , xk - x1 |ymax - ymin| kxi = (xi-x1) mx +x1+xs, kyi = (ymax-yi)*my +y1+xs.

59 Модуль Graphic unit Graphic; Interface Uses ExtCtrls,Graphics; Type Fn=Function(X:single):single; Procedure Run(xn, xk:single; n:integer; F:Fn; x1,y1,x2,y2:integer; Image:TImage); Implementation Procedure Run; Var arr:array[1..200] of record x,y:integer; end; x, y, dx, dxl, dyl, Fmin, Fmax, i, mx, my:single; {масштабы} xm, ym, {размер области} xs, ys:integer; {нижняя левая точка графика} s:string[10];

60 Модуль 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; y:=F(x); Fmin:=y; Fmax:=y; for i:=2 to n do begin x:=x+dx; y:=F(x); if y>Fmax then Fmax:=y; if y<Fmin then Fmin:=y; end; xs:=40; ys:=ym-xs; {координаты нижней левой точки} mx:=(xm-xs*2)/(xk-xn) ; {масштабы по х и y} my:=(ym-xs*2)/(Fmax-Fmin);

61 Модуль 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; arr[i].y:=round((Fmin-f(x))*my)+y1+ys; x:=x+dx; end; Image.Canvas.MoveTo(arr[1].x,arr[1].y); for i:=2 to n do Image.Canvas.LineTo(arr[i].x,arr[i].y);

62 Модуль Graphic (4) x:=xn; dxl:=(xk-xn)/5; Image.Canvas.Pen.Width:=1; Image.Canvas.Pen.Color:=clBlue; repeat Str(x:5:2,s); Image.Canvas.TextOut(round((x-xn)*mx)+x1+xs-13, ys+y1+5,s); Image.Canvas.MoveTo(round((x-xn)*mx)+x1+xs, ym+y1-xs); Image.Canvas.LineTo(round((x-xn)*mx)+x1+xs, y1+xs); x:=x+dxl; until x>xk ;

63 Модуль 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); Image.Canvas.LineTo(xm+x1-xs, round(-(y-Fmin)*my)+y1+ys); y:=y+dyl; until y>Fmax ; end; End.

64 Секция реализации модуля MainUnit implementation uses Graphic; {$R *.dfm} Function f(x:single):single; far; Begin Result:=abs(0.64*sin(x*2)); End; procedure TMainForm.FormActivate(Sender: TObject); begin Image.Canvas.Brush.Color:=clWhite; end; procedure TMainForm.BeginButtonClick(Sender: TObject); begin Run(-0.9,0.9,100,f,0,0,400,300,Image);end; procedure TMainForm.ExitButtonClick(Sender: TObject); begin Close; end; end.

65 DLL – модуль, компонуемый во время выполнения программы. Находится в памяти, пока счетчик использования > 0. DLL может содержать только процедуры и функции. Структура DLL: Library ; Exports Begin End. Секция реализации содержит описание подпрограмм. Секция экспортирования используется для описания экспортируемых процедур и функций. Секция инициализации – выполняется при загрузке в память. 8.8 Динамически подключаемые библиотеки Если в dll описана процедура или функция, которая в качестве параметров или возвращаемого результат передает строку ANSIString или WideString, то и библиотека и проект должны подключать интерфейс модуля разделения памяти, который должен указываться первым: Uses ShareMem,...;

66 Описание подпрограмм в секции реализации может включать указание о способе передачи параметров: pascal – передача по правилам Pascal; register – передача по правилам Pascal с использованием регистров; cdecl – передача по правилам C; stdcall – передача по правилам Windows. Пример: function A(x:Integer;D:real):double;pascal; Способы передачи параметров

67 Export [index [ ][name ][resident],…; Псевдоним используется, если имя совпадает с именем программы. Индексы используют для ускорения поиска подпрограммы. Resident означает, что информация о местонахождении программы должна сохраняться в таблице системы – ускоряет поиск подпрограммы. Пример: Export Max, Min index 1, Bin name Binery; Объявление экспортируемых подпрограмм

68 Импортируемые подпрограммы должны быть описаны в модуле. Импорт возможен: 1) по имени: procedure ;external ; 2) по индексу: procedure ;external index ; 3) по псевдониму: procedure ;external name ; Желательно создавать модули импорта. Импорт процедур и функций

69 Library Vector; Function VectMax(Vect:array of integer):Integer; Var i:Word; Begin Result:=Vect[0]; for i:=1 to High(Vect) do if Result<Vect[i] then Result:=Vect[i] End; Function VectMin(Vect:array of integer):Integer; Var i:Word; Begin Result:=Vect[0]; for i:=1 to High(Vect) do if Result>Vect[i] then Result:=Vect[i] End; exports VectMax,VectMin; End. Пример DLL

70 Unit Main; Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Grids; Type TMainForm = class(TForm) InputButton, MaxButton, MinButton : TButton; V: TStringGrid; MaxEdit, MinEdit: TEdit; procedure InputButtonClick(Sender: TObject); procedure MaxButtonClick(Sender: TObject); procedure MinButtonClick(Sender: TObject); end; Программа проверки

71 Var MainForm: TMainForm; Implementation Uses Import; {$R *.dfm} Var A:array[1..5] of Integer; procedure TMainForm.InputButtonClick(Sender: TObject); Var i:word; begin for i:=1 to 5 do A[i]:= StrtoInt(V.Cells[i-1,0]); end; procedure TMainForm.MaxButtonClick(Sender: TObject); begin MaxEdit.Text:=IntToStr(VectMax(A)); end; procedure TMainForm.MinButtonClick(Sender: TObject); begin MinEdit.Text:=IntToStr(VectMin(A)); end; end. Программа проверки (2)

72 unit Import; interface function VectMax(Vect:array of Integer):Integer; function VectMin(Vect:array of Integer):Integer; implementation function VectMax; external 'Vector.dll'; function VectMin; external 'Vector.dll'; end. Модуль импорта