Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Разработка процедур обработки событий↑ ⇐ ПредыдущаяСтр 6 из 6 Содержание книги Похожие статьи вашей тематики
Поиск на нашем сайте
Вид созданной формы подсказывает, как работает приложение. Пользователь должен ввести в поля редактирования исходные данные и щелкнуть мышью на кнопке Вычислить. Щелчок на изображении командной кнопки — это пример того, что в Windows называется событием. Событие (Event) — это то, что происходит во время работы программы. В Delphi каждому событию присвоено имя. Например, щелчок кнопкой мыши — это событие OnClick, двойной щелчок мышью — событие OnDblclick. В табл. П2.9 приведены некоторые события Windows. Таблица П2.9 События Windows
Реакцией на событие должно быть какое-либо действие. В Delphi реакция на событие реализуется как процедура обработки события. Таким образом, для того, чтобы программа выполняла некоторую работу в ответ на действия пользователя, программист должен написать процедуру обработки соответствующего события. Следует обратить внимание, на то, что значительную часть обработки событий берет на себя компонент. Поэтому программист должен разрабатывать процедуру обработки события только в том случае, если реакция на событие отличается от стандартной или не определена. Например, если по условию задачи ограничений на символы, вводимые в поле Edit, нет, то процедуру обработки события onKeyPress писать не надо, т.к. во время работы программы будет использована стандартная (скрытая от программиста) процедура обработки этого события. Методику создания процедур обработки событий рассмотрим на примере процедуры обработки события OnClick для командной кнопки Вычислить. Чтобы приступить к созданию процедуры обработки события, надо сначала в окне Инспектора объектов выбрать компонент, для которого создается процедура обработки события. Затем, в этом же окне нужно раскрыть вкладку Events (События). В левой колонке вкладки Events (см. рис. П2.2б) перечислены имена событий, которые может воспринимать выбранный компонент (объект). Если для события определена (написана) процедура обработки события, то в правой колонке, рядом с именем события, выводится имя этой процедуры. Для того чтобы создать функцию обработки события, нужно сделать двойной щелчок мышью в поле имени процедуры обработки соответствующего события. В результате этого откроется окно редактора кода, в которое будет добавлен шаблон функции обработки события, а в окне Инспектора объектов рядом с именем события, появится имя функции его обработки. Delphi присваивает функции обработки события имя, которое состоит из двух частей. Первая часть имени идентифицирует форму, содержащую объект (компонент), для которого создана процедура обработки события. Вторая часть имени идентифицирует сам объект и событие. В рассматриваемом примере имя формы — Form1, имя командной кнопки— Button1, а имя события — Click. В окне редактора кода между словами begin и end можно печатать инструкции, реализующие функцию обработки события. В листинге 1 приведен текст функции обработки события OnClick для командной кнопки Вычислить. Листинг 1. Процедура обработки события OnClick на кнопке Вычислить // нажатие кнопки Вычислить procedure TForm1.Button1Click(Sender: TObject); Var dist: integer; // дистанция, метров t: real; // время, как дробное число min: integer; // время, минуты sek: integer; // время, секунды v: real; // скорость Begin // получить исходные данные из полей ввода dist:=strToInt(Edit1.Text); t:=StrToFloat(Edit2.Text); // предварительные преобразования min:=Trunc(t); // количество минут — это целая часть числа t sek:=Trunc(t*100) mod 100; // количество секунд — это дробная часть // числа t // вычисление v:=(dist/1000)/((min*60+sek)/3600); // вывод результата label4.Caption:='Дистанция: '+Edit1.Text+' м'+#13+ 'Время: '+IntToStr(min)+ ' мин '+IntToStr(sek)+' сек '+#13+ 'Скорость: '+FloatToStrF(v,ffFixed,4,2)+'км/час'; end; Процедура Button1Click выполняет расчет скорости и выводит результат расчета в поле Label4. Исходные данные вводятся из полей редактирования Edit1 и Edit2 путем обращения к свойству Text. Свойство Text содержит строку символов, которую во время работы программы введет пользователь. Для правильной работы программы строка должна содержать только цифры. Для преобразования строки в числа в программе используются функции StrToInt и StrToFloat. Функция StrToInt проверяет символы строки, переданной ей в качестве параметра (Edit1.Text — это содержимое поля Edit1), на допустимость, и, если все символы верные, возвращает соответствующее число. Это число записывается в переменную dist. Аналогичным образом работает функция StrToFloat, которая возвращает дробное число, соответствующее содержимому поля Edit2. Это число записывается в переменную t. После того как исходные данные будут помещены в переменные dist и t, выполняются подготовительные действия и расчет. Первоначально с использованием функции Trunc, которая «отбрасывает» дробную часть числа, выделяется целая часть переменной t — это количество минут. Значением выражения Trunc(t*100) mod 100 является количество секунд. Вычисляется это выражение так. Сначала число t умножается на 100. Полученное значение передается функции Trunc, которая возвращает целую часть результата умножения t на 100. Полученное таким образом число делится по модулю на 100. Результат деления по модулю — это остаток от деления. После того как все данные готовы, выполняется расчет. Так как скорость должна быть выражена в км/час, то значения дистанции и времени, выраженные в метрах и минутах, преобразуются в километры и часы. Вычисленное значение скорости выводится в поле Labei4 путем присваивания значения свойству Caption. Для преобразования чисел в строки используются функции IntToStr и FloatToStr. В результате нажатия кнопки Завершить программа должна завершить работу. Чтобы это произошло, надо закрыть, убрать с экрана, главное окно программы. Делается это при помощи метода Close. Процедура обработки события OnClick для кнопки Завершить приведена в листинге 2.
Листинг 2. Процедура обработки события OnClick на кнопке Завершить // нажатие кнопки Завершить procedure TForm1.Button2Click(Sender: TObject); Begin Form1.Close; // закрыть главное окно программы end; Структура проекта Проект Delphi представляет собой набор программных единиц — модулей. Один из модулей — главный, содержит инструкции, с которых начинается выполнение программы. Главный модуль приложения полностью формируется Delphi. Главный модуль представляет собой файл с расширением dpr. Для того чтобы увидеть текст главного модуля приложения, нужно из меню Project выбрать команду View Source. В листинге 3 приведен текст главного модуля программы вычисления скорости бега. Листинг 3. Главный модуль приложения Скорость бега program vrun1; Uses Forms, vrun in 'vrun.pas' {Form1}; {$R *.res} Begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. Начинается главный модуль словом program, за которым следует имя программы, совпадающее с именем проекта. Имя проекта задается в момент сохранения проекта, и оно определяет имя создаваемого компилятором исполняемого файла программы. Далее за словом uses следуют имена используемых модулей: библиотечного модуля Forms и модуля формы vrun1.pas. Строка {$R*.RES} — это директива компилятору подключить файл ресурсов. Файл ресурсов содержит ресурсы приложения: пиктограммы, курсоры, битовые образы и др. Звездочка показывает, что имя файла ресурсов такое же, как и у файла проекта, но с расширением res. Файл ресурсов не является текстовым файлом, поэтому просмотреть его с помощью редактора текста нельзя. Для работы с файлами ресурсов используют специальные программы, например, Resource Workshop. Можно также применять входящую в состав Delphi утилиту Image Editor, доступ к которой можно получить выбором из меню Tools команды Image Editor. Исполняемая часть главного модуля находится между инструкциями begin и end. Инструкции исполняемой части обеспечивают инициализацию приложения и вывод на экран стартового окна. Помимо главного модуля каждая программа включает в себя еще как минимум один модуль формы, который содержит описание стартовой формы приложения и поддерживающих ее работу процедур. В Delphi каждой форме соответствует свой модуль. В листинге 4 приведен текст модуля программы вычисления скорости бега. Листинг 4. Модуль программы Скорость бега unit vrun; Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; Type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); Private { Private declarations } Public { Public declarations } end; Var Form1: TForm1; Implementation {$R *.dfm} // нажатие кнопки Вычислить procedure TForm1.Button1Click(Sender: TObject); Var dist: integer; // дистанция, метров t: real; // время, как дробное число min: integer; // время, минуты sek: integer; // время, секунды v: real; // скорость Begin // получить исходные данные из полей ввода dist:=strToInt(Edit1.Text); t:=StrToFloat(Edit2.Text); // предварительные преобразования min:=Trunc(t); // количество минут — это целая часть числа t sek:=Trunc(t*100) mod 100; // количество секунд — это дробная часть // числа t // вычисление v:=(dist/1000)/((min*60+sek)/3600); // вывод результата label4.Caption:='Дистанция: '+Edit1.Text+' м'+#13+ 'Время: '+IntToStr(min)+ ' мин '+IntToStr(sek)+' сек '+#13+ 'Скорость: '+FloatToStrF(v,ffFixed,4,2)+'км/час'; end; // нажатие кнопки Завершить procedure TForm1.Button2Click(Sender: TObject); Begin Form1.Close; // закрыть главное окно программы end; End.
Начинается модуль словом unit, за которым следует имя модуля. Именно это имя упоминается в списке используемых модулей в инструкции uses главного модуля приложения, текст которого приведен в листинге 3. Модуль состоит из следующих разделов: q интерфейса; q реализации; q инициализации. Раздел интерфейса (начинается словом interface) сообщает компилятору, какая часть модуля является доступной для других модулей программы. В этом разделе перечислены (после слова uses) библиотечные модули, используемые данным модулем. Также здесь находится сформированное Delphi описание формы, которое следует за словом type. Раздел реализации открывается словом implementation и содержит объявления локальных переменных, процедур и функций, поддерживающих работу формы. Начинается раздел реализации директивой {$R *.DFM}, указывающей компилятору, что в процессе генерации выполняемого файла надо использовать описание формы. Описание формы находится в файле с расширением dfm, имя которого совпадает с именем модуля. Файл описания формы генерируется средой Delphi на основе внешнего вида формы. За директивой {$R *.DFM} следуют процедуры обработки событий для формы и ее компонентов. Сюда же программист может поместить другие процедуры и функции. Раздел инициализации позволяет выполнить инициализацию переменных модуля. Инструкции раздела инициализации располагаются после раздела реализации (описания всех процедур и функций) между begin и end. Если раздел инициализации не содержит инструкций, то слово begin не указывается. Следует отметить, что значительное количество инструкций модуля формирует Delphi. Например, Delphi, анализируя действия программиста по созданию формы, генерирует описание класса формы (после слова type).
|
||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-04-08; просмотров: 446; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.81.46 (0.01 с.) |