- •Д.С.Ситкин
- •Информатика.
- •Программированиевdelphi
- •Лабораторныйпрактикум
- •Содержание
- •Введение
- •Основныепонятияпрограммирования
- •Этапыпрограммирования
- •Средаdelphi.Созданиепростейшегопроекта
- •Формаиеёсвойства
- •Компонентыформыиихсвойства
- •КомпонентLabeledEdit
- •Событиеипроцедураобработкисобытия
- •Пример1.1
- •Компиляцияизапускпроектанаисполнение
- •Структураисохранениепроекта
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Линейныйалгоритм
- •Типыданных
- •Константыипеременные
- •Арифметическиеоперации
- •Правилазаписитиповыхдействий
- •Структурапроцедурыобработкисобытия
- •Пример2.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Подпрограммы
- •Классификацияиструктураподпрограмм
- •Механизмработыподпрограммыиобменапараметрами
- •Пример3.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Структурамодуля
- •Созданиеиподключениемодуля
- •Пример4.1
- •Условныйоператор.Неполнаяформа
- •Условныйоператор.Полнаяформа
- •IfусловиеthenоператорS1elseоператорS2
- •Пример5.1
- •Пример5.2
- •Операторвыбора
- •Пример5.3
- •Содержаниеотчёта
- •Контрольныевопросы
- •Контрольсинтаксисавводимыхданных
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Алгоритмыповторений
- •Операторцикласпредварительнымусловием
- •Пример7.1
- •Операторцикласпараметром(сосчётчиком)
- •Пример7.2
- •Пример7.3
- •Операторцикласпоследующимусловием
- •Пример7.4
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Массивы
- •Объявлениемассива
- •Обработкамассивов
- •Пример8.1
- •Динамическиемассивы
- •Подпрограммасоткрытымпараметром-массивом
- •Пример8.2
- •Целесообразностьвыделенияпамятиподмассивы
- •Контрольсинтаксисаэлементовмассива
- •Задание
- •Обработкамногомерныхмассивов
- •Пример9.1
- •КомпонентStringGrid
- •Пример9.2
- •Сортировкамассивов
- •Пример9.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Внешниефайлы
- •Физическиеилогическиефайлы
- •Классификациялогическихфайлов
- •Процедурыифункцииобработкифайлов
- •Пример 10.1
- •КомпонентыOpenDialog иSaveDialog
- •Пример 10.2
- •Пример 10.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Олабораторнойработе
- •Информатика. Программированиев delphi
Событиеипроцедураобработкисобытия
Одной из основ событийного программирования является собы-тийное управление. Это означает, что порядок выполнения команд,обычно разбитых по группам, определяется порядком возникновениясобытий.Событиеэто то, что происходит во время выполненияприложения. Например, загрузка или закрытие приложения, щелчокмышьюпоформеиликомпонентуформы,перемещениеуказателямыши по объекту, изменение содержимого полявсё это примерысобытий.Событиянаступаютврезультатедействийпользователя,операционной системы или по логике разработанного приложения.Некоторыесобытияописанывтабл.1.9.
Таблица1.9
НекоторыесобытиявWindows
-
Событие
Возникает
OnCreate
OnActivate
Призагрузкеформы(приложения)
OnClose
OnDeactivate
Призакрытииформы(приложения)
OnClick
Прищелчкемышью
OnDblClick
Придвойномщелчкемышью
OnMouseDown
Принажатиикнопкимыши
OnMouseUp
Приотпусканиикнопкимыши
OnMouseMove
Приперемещениимыши
OnEnter
Приполучениикомпонентомфокуса
OnExit
Припотерекомпонентомфокуса
OnChange
При изменении содержимого компонента
(например,содержимогоредактируемогополя)
OnKeyPress
Принажатииклавишиклавиатуры
При разработке проекта задача программистаопределить ре-акцию на то или иное событие, т.е. что должно быть выполнено, еслинаступило событие. Для этого необходимо создатьпроцедуру обра-ботки события. Сначала определяют уже созданный объект, для ко-торого создаётся процедура обработки события (например, команднаякнопкаButton1), активируя его щелчком мыши по нему или по егоимени в дереве объектовObject Tree Viewили выбором из раскры-вающегося списка окнаObject Inspector. Затем в окне редактораOb-jectInspectorвыбираютвкладкуEvents(рис.1.6).Слеваперечислены
Рис.1.6
имена событий, которые доступны для выбранного объекта, справаимена назначенных процедур (сначала никаких имён процедур нет).Исходя из логики проекта, определяют событие для выбранного объ-екта и выполняют двойной щелчок мышью в поле имени процедурыобработки выбранного события (правая колонка). В результате откро-ется окно редактора кодаUnit1.pasс помещённым в него шаблономпроцедуры. Процедуре автоматически присваивается имя из двух ча-стей: первая идентифицирует форму, содержащую объект, втораясамобъектисобытие,например,TForm1.Button1Click.Поимениможно
определить, что процедура будет вызвана на выполнение, когда про-изойдёт событиеOnClickпо компонентуButton1, расположенному наформеForm1. Между словамиbeginиendпрописывают операторы,которыедолжныбытьвыполненыподаннойпроцедуре.
Пример1.1
Разработаем простейший проект для ввода с формы фамилиистудентаиномераегогруппыиихвыводанаэту жеформупринаступлениинекоторыхсобытий.
После запускаDelphiв окнеObject Inspectorизменим значениесвойстваформыCaptionна«Ввод-выводданных».
Для ввода фамилии разместим на форме компонентEditи в окнеObject Inspectorобнулим значение свойстваText, чтобы на моментзапускаприложенияполедляввода фамилиибылопустым.
РядомскомпонентомEditразместимнаформекомпонентLabel,вокнеObjectInspectorизменимзначениесвойстваCaptionна«Фами-лия»это поможет будущему пользователю нашего приложения по-нять,чтоследуетввестивкомпонентEdit.
Для ввода номера группы поместим на форму компонентLa-beledEdit,вполеметки(свойство+EditLabel.Caption)запишем«Группа».
Для вывода введённого значения фамилии разместим на формекомпонентLabel, а для номера группыкомпонентMemo. ОбнулимсоответственнозначениясвойствCaptionиLinesэтихкомпонентов.
Вынесем на форму ещё два компонентаButton, изменив значе-ние свойстваCaptionна «Вывести фамилию» иLabel, изменив значениесвойстваCaptionна«Щёлкнипоформедлявывода№группы».
Получившийсяпримерныйвидформыизображённарис.1.7.
Рис.1.7
Вывод фамилии вLabel2свяжем со щелчком (событиемOnClick)по кнопкеButton1. Дляэтого, выделив компонентButton1, выберем вокнеObject InspectorвкладкуEventsи выполним двойной щелчок вполе имени процедуры обработки событияOnClick(рис. 1.6). В от-крывшемся шаблоне процедуры между словамиbeginиendдопол-нимеётекст
procedureTForm1.Button1Click(Sender:TObject);
begin
Label2.Caption'работувыполнил(а)'+Edit1.Text;
end;
Данная процедура изменяет значение свойстваCaptionкомпонентаLa-bel2, заменяя пустую запись метки на «работу выполнил», добавляясодержимое(свойствоText)редактируемогополяEdit1,т.е.фамилию.
Вывод номера группы вMemo1свяжем со щелчком по форме.Аналогично, но теперь дляForm1в окнеObject Inspectorна вкладкеEventsвыполнимдвойнойщелчоквполеименипроцедурыобработкисобытияOnClick. В открывшемся шаблоне процедуры между словамиbeginиendдополнимеётекст
procedureTForm1.FormClick(Sender:TObject);
begin
Memo1.Text'Группа№'+LabeledEdit1.Text;
end;
ВтораяпроцедуравписываетвполеMemo1«Группа№»исодержимое(свойствоText) редактируемого поля с меткойLabeledEdit1, т.е. номергруппы. Обе процедуры поочерёдно разместятся в модуле проекта,тексткоторогоотображаетредакторакодаUnit1.pas(рис.1.8).
Помимо
модуля программный код генерируется и
в головнойпрограмме.
Для его просмотра следует дать команду
из меню командProjectView
Source, текст
отобразитсяв редакторе кода (рис.
1.9).Текстполностьюсгене-
рировансредойинетребуетвмешательствапрограммиста. Головнаяпрограммаобеспечива-ет инициализацию при-ложенияивыводна
экранформы,приэтоммодульUnit1сописаниемформыподключает-сяк головнойпрограммеавтоматически.
