Некоммерческое акционерное общество
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
Кафедра компьютерных технологий
ВИЗУАЛЬНОЕ ПРОГРАММИРОВАНИЕ
Методические указания к выполнению лабораторных работ для студентов
всех форм обучения специальностей 5В070300 – Информационные системы и 5В070400 – Вычислительная техника и программное обеспечение (часть 1)
Алматы 2011
СОСТАВИТЕЛИ: Мусатаева Г.Т., Конуспаева А.Т., Рахимжанова З.М. Визуальное программирование. Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальностей 5В070300 – Информационные системы и 5В070400 – Вычислительная техника и программное обеспечение (часть 1). - Алматы: АУЭС, 2011. - 46 с.
Методические указания составлены в соответствии с требованиями квалификационной характеристики специалиста, Государственных стандартов, типовой программы курса. Они составлены с учетом активизации процесса изучения основ курса, закреплению лекционного курса и являются подготовкой к проведению лабораторных работ.
Методические указания предназначены для студентов всех форм обучения специальностей 5В070300 – Информационные системы и 5В070400 – Вычислительная техника и программное обеспечение.
Библиография – 19 названий.
Рецензент: канд. физ.-мат. наук, доцент Б. М. Шайхин.
Печатается по плану издания некоммерческого акционерного общества «Алматинский университет энергетики и связи» на 2011 г.
© НАО «Алматинский университет энергетики и связи», 2011 г.
1 Лабораторная работа. Знакомство со средой Delphi. Создание визуального приложения со стандартными компонентами
Цель работы: знакомство с основными окнами cреды Delphi и процессом визуальной разработки программ, изменение свойств компонент
Методические указания к выполнению работы
1.Запуск среды программирования Delphi: Пуск-> Все программы->Borland Delphi 7
2. Среда Delphi и ее составляющие. Delphi - это среда разработки программ, ориентированных на работу в Windows. В основе идеологии Delphi лежит технология визуального проектирования и методология объектно-ориентированного программирования.
Окно Delphi состоит из четырех частей:
1) В главном окне Delphi находятся: меню команд Delphi, панель инструментов, палитра компонентов.
2) Окно формы Form1 представляет собой заготовку (макет) окна разрабатываемого приложения - Проектировщик форм.
3) Окно редактора Unitl содержит сформированный Delphi шаблон текста (кода) программы.
4) Окно инспектора объектов включает две панели Параметры и События, позволяет изменить свойства объектов (формы, командных кнопок, полей ввода и т.д.) и обрабатывать события.
Окно дерева объектов содержит названия элементов, расположенных на форме
Компонент – составная часть окна (кнопки, поля, метки и т.п.). Компоненты классифицируются по трем признакам: отображается ли компонент во время выполнения приложения; получает ли фокус ввода; может ли компонент содержать внутри себя другие компоненты (соответственно, их делят на визуальные и не визуальные, активные и неактивные, простые и сложные).
Свойства обозначают внешний вид компонента и его состояние.
События - это возможные ситуации, вызываемые действиями пользователя или логикой машины (Например: щелчок мыши на кнопке, выбор пункта меню и т.д.).
Типы свойств:
- свойства текстового типа;
- целочисленные свойства;
- свойства с константами;
- логические свойства (false, true) ;
- свойства множества (+);
- свойства дающие доступ к диалоговому окну (…);
- свойства, указывающие на иные компоненты.
Основные свойства:
Caption- заголовок;
Height - высота;
Width - ширина;
Left - положение компонента по оси X;
Тор - положение компонента по оси У;
Iсоn - иконка окна (значок, обозначающий форму, когда она свернута) ;
Cursor - вид курсора;
Color - цвет;
Hint - всплывающая подсказка (...);
Show Hint - логическое свойство подсказки (false, true) ;
Enabled - активность компонента;
Visible - видимость компонента.
Border Style - вид границы формы может принимать значения: bs Sizeble - границы обычные, изменяемые, bs Single - обычные неизменяемые, bs Dialog - диалоговое окно, неизменяемое, bs None – окно, без боковины, bs SizeToolWin - цветная полоса более узкая, с одной только уменьшающей кнопкой выхода, изменяемое, bsToolWin - аналогичное, только неизменяемое.
Основные события:
OnClick - на щелчок кнопкой мыши (Главное событие) ;
OnDblClick - на двойной щелчок кнопкой мыши;
OnContewPopup- на вызов контекстного меню;
OnClose - на выход из окна;
ОиКе\ Down. - на зажатие клавиши;
OnKeyPress - на нажатие клавиши;
OnKevUp - на отпускание клавиши;
OnMouseDown - на зажатие кнопкой мыши;
OnMouse.Vlove - на движение мыши;
On.MouseUp - отпускание кнопки мыши;
OnRcsize - на изменение величины окна;
OnShow - на показ окна;
On Hide - на исчезание окна;
Oiillelp - на вызов помощи;
OnAcmaie - на активацию окна;
OnDcaemate - на дизактивацию окна.
Процесс создания программы для Windows
Надо создать заготовку будущего приложения: Файл- Создать приложение.
На экране возникает пустая форма - прообраз будущего главного окна программы, а в редакторе откроется файл Unit1.pas , соответствующий модулю Unit 1, в котором хранится описание работы этой формы (она называется Forml). В разделе реализации выполняется подключение стандартных модулей:
Затем объявляется тип TForm, содержащий описание формы, и декларируется одна переменная этого типа: var Forml: TForm1;
Примечание
Все компоненты Delphi хранятся в библиотеке визуальных компонентов Visual Component Library (VCL). Каждый из компонентов, а также форма (будущее окно) описаны соответствующими классами Паскаля: к названию компонента добавляется буква Т, например, форма описывается классом TForm, кнопка (компонент Button) классом TButton и т.д.
Когда создается новое приложение, на основании этих классов система Delphi формирует новый тип данных, наследующий характеристики своего родителя:
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Далее в модуле следует раздел реализации, в котором имеется всего одна директива компилятора
{$R *.dfm}
Она предназначена для связывания модуля с описанием соответствующей ему формы.
Примечание
Описание формы и всех размещенных на нем компонентов система Delpli хранит в файлах с расширением .DFM. Эти файлы имеют обычный текстовый формат.
Создаваемая в среде Delpli программа состоит из нескольких файлов. Это -файлы с исходными текстами на Паскале и файлы описаний форм. Все они связаны друг с другом. Такой набор файлов, в которых содержатся исходные тексты и различные настройки, называется проектом.
Чтобы сохранить текущий проект, надо выполнить команду Файл - Сохранить все.
Сначала разработчику будет предложено сохранить файл с исходным текстом (Unit I .pas), а затем - файл проекта Project1 с расширением DPR Сохранять их лучше в отдельном каталоге, специально отведенном для данного проекта. В этом же каталоге компилятор в будущем создаст и исполнимое приложение.
Теперь можно приступать к этапу проектирования пользовательского интерфейса - подготовке внешнего вида окна программы и размещению на нем элементов управления. Для этого надо переключиться в Проектировщик форм с помощью клавиши FI2 или командной кнопки Toggle Form / Unit (Выбрать Форму / Модуль).
Внимание
Создаваемая в Проектировщике форма - это только внешнее представление будущего окна, а не работоспособное приложение.
На форме размещаются объекты, соответствующие компонентам с палитры компонентов Чтобы создать на форме текстовое поле, надо:
- выбрать панель Standard (Стандартные):
- щелкнуть на кнопке Edit (Текстовое поле) ;
- щелкнуть на том месте формы, где требуется поместить текстовое поле.
На этом месте появится новый элемент управления.
У компонента TEdit (Текстовое поле) свойства Caption (Заголовок) нет. Вместо него используется свойство Text (Текст), относящееся в Инспекторе объектов к категории Localizable (Настраиваемые). Это свойство содержит введенные пользователем данные в текстовом виде (тип string).
Первоначально это свойство содержит строку, совпадающую с именем элемента управления (Editl, Edit2).
Созданную программу можно запустить непосредственно из среды Delphi, выполнив команду Run - Run (Запуск - Запуск), нажав клавишу F9 или щелкнув на командной кнопке Run (Запуск).
Примечание
Созданную программу - она расположена в каталоге, где был сохранен проект, и называется Project.exe - можно запустить и обычным способом, например, с помощью Проводника.
Пример 1. Создание приложения.
Цель примера: создать приложение, не написав ни одной строчки программного кода. Применение основных свойств компонентов TForm. TButton (кнопка) при создании приложения.
Задание
Создайте новый каталог, в нем создайте новое приложение: Файл – Создать –Приложение.
Измените свойства компонента Forml:
1) заголовок Caption - на «MyForm»:
2) высота окна Height - задайте любое значение (или значение по умолчанию: 375):
3) ширина окна Width - задайте значение (544- по умолчанию):
4) Left - положение окна по оси X задайте значение (192 - по умолчанию):
5) аналогично Тор - положение окна по оси У задайте значение (121 - по умолчанию):
6) вид курсора на окне Cursor - выберите из возможных вариантов:
7) в свойстве Color - укажите цвет окна:
8) выберите вид границы формы в свойстве BorderStyle:
Разместите на форме три компонента TButton :
1) Для первой кнопки сделайте всплывающую подсказку: в свойстве Hint- введите текст, например «Доброе утро, Алматы!»:
включите Show Hint – true:
2) у второй кнопки отключите активность Enabled – false:
3) у третьей кнопки отключите видимость Visible – false:
Запустите созданное приложение, нажав F9.
События и реакции на них
Внутренняя структура программ для Windows кардинальным образом отличается от структуры консольных программ, где операторы выполнялись последовательно, от начала программы ключевого слова begin, до завершающего слова end. Операционная система Windows функционирует по другому принципу. Она обрабатывает возникающие в ней события: щелчок мыши на кнопке, выбор пункта меню, нажатие клавиши и другие и передает их выполняющимся в своей среде программам. Они в свою очередь, обычно находятся в состоянии ожидания и активизируются только при получении от Windows сообщений о событиях - реагируют на них.
Сообщения Windows обрабатываются программой не одновременно, а последовательно. Например, сообщение, требующее завершения работы приложения, не выполняется мгновенно, а ставится в очередь сообщений, и. пока не будут обработаны первые сообщения, работа программы продолжится.
Структура программы для Windows представляет собой набор подпрограмм, каждая их которых ответственна за обработку конкретного события и вызывается только при его получении. Программист сам решает, какие события в программе требуется обрабатывать. Системные события: выбор пункта меню, закрытие приложения - обрабатываются в программе, созданной с помощью системы Delphi, автоматически.
Примечание
Подобный подход к созданию программ называется событийно-ориентированным.
Методы обработки событий
Обработчик щелчка на кнопке создается на форме так: выполняется двойной щелчок на этой кнопке, и Delphi генерирует заготовку кода подпрограммы, которая будет выполнять обработку щелчка.
procedure TForml.Button lClick(Sender: TObject):
begin
end;
Автоматически созданное имя процедуры - Button1Click. Ему предшествует имя класса TForml. к которому относится данная процедура. Параметр Sender определяет, какой объект программы вызывает данную подпрограмму
Второй способ формирования обработчика события. Для большинства компонентов Delphi имеются события, обработчики которых невозможно создать выше описанным способом (например «Нажатие клавиши» или «Изменение размера»). Подготовить обработчик требуемого события можно так:
- Выберите на форме нужный объект, к которому будет относиться рассматриваемое событие (Например кнопку Button1).
- В инспекторе объектов перейдите на вкладку Events (События).
- Найдите в списке событий строку с именем нужного события. В данном случае это событие OnClick (При щелчке). Так как для объекта Button1 обработчик уже создан, то в строке OnClick должно располагаться имя обработчика Button1Click.
- Дважды щелкните на правой
части соответствующей
строки.
Система Delphi автоматически сгенерирует нужный программный код и переключится в редактор.
Методика составления кода
Из вышесказанного, известно, что Unit состоит из двух частей: Interface, Implementation. В области Interface объявляется все. что мы используем;
1) модули после ключевого слова Uses;
2) после ключевого слова type объявляются используемые компоненты и вызываемые события.
А в области Implementation находятся тела событий, где пишем код между ключевыми словами begin_end.
Пример составления кода. При нажатии на кнопку, расположенной на форме, должен измениться заголовок этой кнопки на «Cancel». При выделенном Button1, на событие OnClick наберите:
begin
Button .Сарtion:’'Сапсеl’;
end;
1) Button 1 - имя изменяемого компонента.
2) Caption - изменяемое свойство.
3) Имя компонента от свойства отделяется точкой.
4) :- ставится знак присваивания.
5) 'Cancel' -новое значение свойства, здесь заключено в апострофы, потому что кнопка имеет свойства текстового типа.
6) Каждая мысль заканчивается точкой с запятой.
Сохраните и запустите приложение. Нажмите на кнопку.
Пример 2. Написание программного кода.
Цель примера: создание приложения. Обработка события OnClick. Написание программного кода на изменение свойств кнопки TButton.
Задание. Создать в своем каталоге новое приложение. Разместить на форме Forml шесть кнопок TButton .
Применяя методику составления кода, напишите программный код на каждую кнопку так, чтобы после запуска приложения при нажатии:
1) на кнопку 1 - она стала невидимой;
2) на кнопку 2 – неактивной;
3) на кнопку 3 - кнопка изменила свою высоту;
4) на кнопку 4 - кнопка изменила свою ширину;
5) на кнопку 5 - изменила ширину окна;
6) на кнопку 6 - изменила высоту формы.
Ход выполнения задания:
В обработчиках событий кнопок наберите следующие коды:
1) button1.visible:=false;
2) button1.enabled:=false;
3) button3.height:=button3.height+5;
4) button4.width:=button4.width+4;
5) form1.width:=form1.width-10;
6) form1.height:=form1.height-9;
Сохраните и запустите приложение. Пощелкайте на кнопках. Во время выполнения приложение имеет примерно следующий вид:
Проверьте правильность работы приложения. Закройте приложение и среду разработки Delphi.
2 Лабораторная работа. Разработка приложений с выводом сообщений, реализация простейших вычислений с использованием преобразований типов данных
Цель работы: знакомство с видами сообщений и использование их в визуальных приложениях, реализация простейших вычислений и преобразований типов данных.
Методические указания к выполнению лабораторной работы
В приложениях для диалога пользователя с программой, а также в случаях некорректного ввода данных пользователем и т.п. случаях используются разные виды сообщений.
Виды сообщений:
1) Show Message(‘Текст сообщения’); - Выводит сообщение, заключенное в апострофы.
2) MessageDlg(‘Текст сообщения’, <Тип диалога>, <Виды кнопок>, <Контекст подсказки>);
Типы диалогов:
- mtWarning - предупреждающее сообщение;
- mtError - сообщение об ошибке;
- mtInformation - повествовательное сообщение;
- mtConfirmation - вопросительное сообщение;
- mtCustom - произвольное сообщение.
Виды кнопок в окне сообщения:
- mbYes;
- mbNo ;
- mbOK;
- mbCancel;
- mbAbort;
- mbRetry;
- mbIgnore;
- mbAll;
- mbNoToAll;
- mbYesToAll;
- mbHelp.
А также существуют следующие комбинации вышеуказанных кнопок:
- mbYesNoCancel;
- mbYesNoAllCancel;
- mbOKCancel;
- mbAbortRetryIgnore;
- mbAbortIgnore.
Во всех видах кнопок после “mb” приведены тексты в заголовках кнопок сообщений.
Задание 1. Используя функции Show Message и MessageDlg, создать приложение с командными кнопками, при нажатии на которых высвечивались разного рода сообщения: повествовательное, вопросительное, предупреждающее, произвольное, сообщение об ошибке.
Ход выполнения работы:
Запустите Delphi, разместите на форме 6 кнопок Button . На кнопках пропишите следующие коды:
1) Show Message(‘Я студент АУЭС.’);
2) MessageDlg(‘Сегодня стоит солнечная погода.’, mtInformation, [mbOk],0);
3) MessageDlg(‘На ноль делить нельзя!’, mtWarning, [mbOk, mbCancel], 0);
4) MessageDlg(‘Сколько будет дважды два?’, mtConfirmation, [mbOk, mbCancel, mbIgnore], 0);
5) MessageDlg(‘Я изучаю программирование.’, mtCustom, [mbOk, mbIgnore], 0);
6) MessageDlg(‘Ошибка!’, mtError, [mbOk, mbCancel, mbIgnore], 0).
Окно приложения при выполнении будет выглядеть примерно следующим образом:
При нажатии на 1-кнопку:
При нажатии на 2-кнопку:
При нажатии на 3-кнопку:
При нажатии на 4-кнопку:
При нажатии на 5-кнопку:
При нажатии на 6-кнопку:
Задание 2. Решение простейшей экономической задачи.
Цель задания: показать способы применения компонентов TButton, TEdit. TLabel при решении простейших экономических задач, практиковать написание программного кода.
Ход работы. Создайте новое приложение. Разместите на форме из закладки «Стандартные»
12 меток TLabel , три поля ввода TEdit , одну кнопку TButton , как показано на рисунке:
Измените свойства Caption компонентов TLabel соответственно на «Себестоимость», «Количество», «Расход», «Наценка», «Цена», «Приход», «Доход»; измените свойства Caption кнопки TButton на «Итого».
Напишите код на нажатие кнопки «Итого», чтобы после запуска приложения при введении данных: себесгоимость, количество, наценка в поля ввода в четырех метках TLabel выводились значения: «Расход», «Цена», «Приход», «Доход».
Чтобы производить вычисления над данными, введенными в полях ввода TEdit, эти данные следует преобразовать из текстового типа в числовой. Для преобразования типов данных используются следующие функции:
- StrToInt (String to Integer) – из текстового типа в целочисленный;
- IntToStr (Integer to String) – из целочисленного в текстовый;
-StrToFloat (String to Float) – из текстового типа в вещественный;
- FloatToStr (Float to String) – из вещественного типа в текстовый.
В обработчике события кнопки «Итого» напишите следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,g,h,j:real;
begin
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
c:=a*b;
d:=StrToFloat(Edit3.Text);
g:=a+a*d/100;
h:=g*b;
j:=h-c;
Label8.Caption:=FloatToStr(c);
Label9.Caption:=FloatToStr(g);
Label10.Caption:=FloatToStr(h);
Label11.Caption:=FloatToStr(j);
end;
Сохраните приложение и запустите на выполнение.
Приложение при выполнении имеет следующий вид:
Проверьте правильность вычислений. Закройте приложение и среду разработки.
3 Лабораторная работа. Обработка событий мыши
Цель работы: приобретение навыков программной обработки событий мыши, практика написания программного кода.
Методические указания к выполнению лабораторной работы
Архитектуру программы, выполняющейся в операционной системе Windows, достаточно сложно нарисовать в виде визуальной схемы. Например, пусть программа только что начала работать. На экране показывается главное меню программы, и пользователь нажимает на кнопку мыши. Нажатие на кнопку мыши является событием, начинает работать определенный объект. Пользователь мог бы не нажимать кнопку мыши, и тогда работа программы пошла бы по другому сценарию. То есть ситуация типа: может быть, а может и не быть.
В вероятностной структуре (это структура, в которой не все маршруты, трассы кодов жестко закреплены; в этой архитектуре элементы программ могут включаться при возникновении некоторого события, которое может произойти, а может и не произойти) сильно увеличивается количество возможных состояний и сценариев работы программы. Здесь пользователь определяет порядок работы программы.
Приложения Delphi используют управляемые событиями методы для организации взаимодействия между программой и пользователем. Большая часть кода, которую Вы будете писать в Delphi, будет инициироваться событиями. В принципе событием может быть изменение любой величины. Происхождение события заставляет работать определенный объект, при этом объект получает заранее определенные параметры для своей настройки на работу. В Delphi процедура, инициируемая событием, называется обработчиком события.
События делятся на три основные категории: события мыши, события клавиатуры и системные события.
События мыши
Для формы событие OnClick возникает в том случае, если пользователь нажимает левую кнопку мыши в то время, когда курсор мыши находится на поле формы.
Задание 1. Создайте новое приложение, которое при нажатии левой кнопки мыши перекрашивает форму в красный цвет.
Решение
Создайте обработчик события OnClick: выберите страницу Events инспектора объектов и выполните двойной щелчок мышью в правой колонке, напротив события OnClick.
На переднем плане появится окно редактирования модуля с помещенной сразу в нужное место модуля заготовкой обработчика события OnClick:
В обработчике события указан параметр Sender, в котором хранится имя объекта, породившего данное событие (в примере Sender будет содержать ссылку на объект Form1 — форму).
Для изменения цвета формы в обработчике события OnClick напишем следующий оператор:
Form1.Color:=clRed; (*)
Color — это свойство формы. Обращение к свойствам объекта происходит также, как и в структуре данных записи, через точку.
Запустите приложение. Щелкните левой кнопкой мыши на форме. Убедитесь, что цвет формы стал красным:
Что произойдет при повторном щелчке левой кнопкой мыши на форме? Возникнет событие OnClick, в результате которого выполнится оператор (*), т.е. цвет формы остается красным.
Задание 2. Создайте новое приложение, в котором при каждом щелчке левой кнопкой мыши произвольным образом изменяется цвет формы.
Решение
Модифицируем код модуля Unit1.pas.
Для получения различных цветов для формы воспользуемся функцией RGB. Функция RGB (Red, Green, Blue) принимает три параметра - уровни интенсивности красного, зеленого и синего цветов соответственно и возвращает цвет Win32 как целое значение. Для каждого уровня интенсивности существует 256 возможных значений. Например, RGB(255, 0, 0) возвращает цветовое значение для красного цвета, a RGB(255, 0, 255) — сиреневого цвета.
Итак, щелчок левой кнопкой мыши по форме порождает событие OnClick формы, т. е. приводит к обращению к процедуре TForm1.FormClick, в результате чего выполняется оператор (*) — изменение цвета формы на красный. Изменим оператор (*) в соответствии с формулировкой задачи:
Color := RGB {Random (256), Random(256), Random (256) ) ; (**)
Сравните правые части операторов (*) и (**). Оператор (*) изменяет цвет конкретного объекта типа TForm (под именем Form1). Оператор (**) позволяет изменить цвет любого объекта типа TForm, следовательно, этот оператор более общий, и далее будем использовать его при обращении к форме.
Запустите приложение. Убедитесь, что после каждого щелчка по форме левой кнопкой цвет изменяется произвольным образом.
Задание 3. Создайте новое приложение, в котором при нажатии на левую кнопку мыши происходит смена цвета с зеленого на красный, и, наоборот, с красного — на зеленый.
Решение
При щелчке по левой кнопке мыши происходит событие Onclick. В соответствии с условием задачи в обработчике события OnClick формы необходимо проанализировать свойство Color формы: если его значение соответствует красному, то изменить его на зеленый (clGreen), иначе присвоить значение красный. На языке Object Pascal это записывается так:
if Color=clRed then Color:=clGreen else Color:=clRed;
Сохраните приложение, запустите его. Проверьте выполнение условия задачи.
Событие OnDblClick происходит, если пользователь выполняет двойной щелчок левой кнопки мыши.
Задание 4. Создайте новое приложение, в котором при двойном щелчке левой кнопкой мыши изменяется вид курсора.
Решение
Каждое значение свойства Cursor имеет свой числовой эквивалент в пределах от -21 (crHandPoint) до 0 (crDefault). При каждом двойном щелчке левой кнопкой мыши значение свойства Cursor будем увеличивать на единицу, при достижении значения 0 — восстановим значение -21. Введите в обработчик события формы OnDblClick
следующий оператор:
if Cursor=0 then Cursor:=21 else Cursor:=Cursor+1;
Сохраните проект и запустите его. Объясните, почему при каждом двойном щелчке левой кнопкой мыши сначала изменяется цвет формы, а затем — вид курсора.
Событие OnMouseDown возникает, если пользователь нажимает на правую, левую или среднюю кнопку мыши. Заголовок обработчика этого события имеет вид:
procedure TMainF.FormMouseDown{Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Событие OnMouseUp происходит, если пользователь освобождает кнопку мыши, которая была нажата. Заголовок обработчика этого события имеет вид:
procedure TMainF.FormMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Событие OnMouseMove происходит, если пользователь перемещает указатель мыши. Заголовок обработчика этого события имеет вид:
procedure TMainF.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
В параметре Button обработчики этих событий получают одно из значений mbLeft, mbRight или mbMiddle, в зависимости от того, какая кнопка мыши была нажата — левая, правая или средняя.
Параметр Shift указывает состояние клавиш Alt, Ctrl, Shift и кнопок мыши. Тип TShiftState описан так:
TShiftState = set of (ssShift, ssALt, ssCtrL, ssLeft, ssRight, ssMiddle, ssDouble);
Значения ssShift, ssAlt, ssCtrl принадлежат множеству Shift, если клавиши Shift, Alt, Ctrl, соответственно, были нажаты; ssLeft, ssMiddle, ssRight — если нажаты левая, средняя или правая кнопки мыши; ssDouble — если произошел двойной щелчок.
В параметрах X и Y процедура получает координаты указателя мыши, выраженные в пикселях относительно формы.
Задание 5. Разработайте приложение, позволяющее рисовать отрезки на форме.
Решение
Закройте предыдущий проект, выполнив команду Закрыть все (Close All) меню Файл (File). Создайте новое приложение, выполнив последовательность команд: Файл /Создать (File/ New Application). Измените свойства формы следующим образом:
Все графические операции в Delphi выполняются с использованием свойства Canvas. Это свойство объектного типа. Класс TCanvas — сердцевина графической подсистемы Delphi. Он объединяет в себе контекст конкретного устройства GDI (интерфейс графических устройств) и «рабочие инструменты» (перо, кисть, шрифт, набор функций по рисованию типовых геометрических фигур). В процессе конструирования приложения свойство Canvas недоступно в окне инспектора объектов, оно доступно только во время выполнения приложения. Чтобы нарисовать на форме пунктирную линию красного цвета от точки с координатами (10,10) до точки (300,300), создайте обработчик события формы Click
и введите следующие операторы:
with Canvas do begin
Pen.Color:=ClRed; Pen.Style:=PsDash; MoveTo(10,10);
LineTo(300,300); end;
Поясним код обработчика события. С помощью свойства Реn можно установить параметры изображения линии, такие, как цвет (Color), тип (Style), толщина (Width).
Метод MoveTo(x,y) перемещает графический курсор в точку с координатами (х,у).
Метод LineTo(x.y) рисует отрезок от текущего положения графического курсора до точки с координатами (х,у).
Сохраните проект. Убедитесь, что после щелчка мышью по форме, на канве отображается один отрезок, соединяющий пиксели с координатами (10, 10) и (300, 300).
Модифицируем программу таким образом, чтобы можно было рисовать произвольные отрезки. Отрезок — это часть прямой, заключенная между двумя точками. Пусть нажатие кнопки мыши послужит началом рисования отрезка (переместим графический курсор в точку, на которую указывает курсор мыши), освобождение кнопки мыши — завершением рисования отрезка (нарисуем линию до точки, на которую указывает курсор). Создайте обработчик события OnMouseDown:
Canvas.MoveTo(X, Y);
Создайте обработчик события OnMouseUp:
Canvas.LineTo(X, Y) ;
Сохраните приложение. Попробуйте с помощью приложения написать свое имя.
Задание 6. Создайте приложение, позволяющее изображать кривые линии.
Решение
Создайте новое приложение.
Кривая линия — это изображение следа курсора мыши. Перемещение курсора мыши возбуждает событие OnMouseMove. Создайте обработчик этого события
и введите следующий оператор:
Canvas.LineTo(x,y);
Сохраните приложение и запустите его. Убедитесь, что при перемещении курсора мыши на форме изображается линия, началом которой служит левый верхний угол формы. Кроме этого не удается завершить рисование кривой.
Устраним этот недостаток. Обработчик события OnMouseMove в параметре Shift получает состояние клавиш Ctrl, Alt, Shift и кнопок мыши. Для определенности положим, что линию будем рисовать в том случае, когда нажата левая кнопка мыши. Измените обработчик события следующим образом:
if ssLeft in Shift then Canvas.LineTo(x, y)
{если нажата левая кнопка мыши, то рисуем линию}
else Canvas.MoveTo(x, у);
{иначе перемещаем графический курсор без следа}
Сохраните проект и запустите его. Проверьте, что линия рисуется только тогда, когда перемещение мыши происходит с нажатой левой кнопкой.
Задание 7. Напишите приложение, которое изображает прямоугольники (эллипсы).
Решение
Создайте новое приложение.
В классе TCanvas определен метод Rectangle(xl,yl,x2,y2), в котором параметры задают координаты противоположных вершин прямоугольника (т.е. принадлежащих одной из его диагоналей). Нажатие кнопки мыши (событие OnMouseDown) фиксирует начало рисования прямоугольника и соответственно определяет координаты первой точки, а освобождение кнопки (событие ОnMouseUp) — окончание рисования прямоугольника и соответственно определяет координаты второй точки. Создайте обработчики этих событий и введите следующие операторы:
1) на OnMouseDown:
xl:=x;
yl:=y;
2) на ОnMouseUp:
Canvas.Rectangle(xl,yl,xry); {Canvas.Ellipse(xl,yl,x,y)} end;
Переменные xl и yl являются глобальными, но их использование ограничивается пределами данного модуля, поэтому опишите их в процедурах.
Удостоверьтесь в правильности работы программы.
Задание 8. Напишите приложение, которое позволяет рисовать ломаные линии.
Решение
Создайте новое приложение.
Объединение отрезков А1А2, A2A3, ..., Аn-1Аn образуют ломаную А1А2А3...Ап. Начало ломаной — это точка A1 конец — точка Аn. Для рисования ломаной нужно задать ее начало, затем нарисовать звенья (отрезки, причем конец одного является началом другого) и, наконец, завершить ломаную (отметить ее конец).
Начало (конец) рисования ломаной линии свяжем с событием OnDblClick. Введем логическую переменную Draw: ее значение, равное True, будет обозначать рисование ломаной, False — завершение ломаной. В разделе interface модуля введите раздел констант (после раздела описания переменных — Var):
const Draw: Boolean = False;
Создайте обработчик события OnDblClick:
Draw:=not Draw;
В обработчике события OnMouseDown будем рисовать звенья ломаной, если значение переменной Draw равно True и перемещать графический курсор, в противном случае:
if Draw then Canvas.LineTo(x,y) else Canvas.MoveTo(x,y);
Сохраните проект, используя написанное приложение, попробуйте изобразить треугольник, четырехугольник и пятиугольник.
Задание для самостоятельного выполнения
1) Используя код задания 5, напишите приложения для рисования разноцветных отрезков.
2) Напишите приложения для рисования эллипсов с закрашенной внутренней областью.
3) Модифицируйте код приложения из задания 5 так, чтобы при рисовании отрезок прорисовывался.
4) Измените код модуля, написанного в задании 8 для рисования замкнутых ломаных.
4 Лабораторная работа. Обработка событий клавиатуры
Цель работы: приобретение навыков программной обработки событий клавиатуры, практика написания программного кода.
Методические указания к выполнению лабораторной работы
События клавиатуры
Обработку событий клавиатуры можно выполнить, используя комбинацию трех событий.
Событие OnKeyDown происходит при нажатии любой клавиши, включая функциональные и специальные:
procedure TForml.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Событие OnKeyPress возникает при нажатии клавиши, генерирующей символы ASCII, включая управляющие клавиши:
procedure TForml. FormKeyPress (Sender: TObject; var Key: Char);
Событие OnKeyUp происходит при освобождении любой клавиши:
procedure TForml.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
Каждый из обработчиков событий получает, по крайней мере, один параметр, называемый Key, который представляет нажатую клавишу. В обработчиках событий OnKeyDown и OnKeyUp параметр Key является беззнаковым значением типа Word, которое представляет код виртуальной клавиши Windows. В обработчике события OnKeyPress параметр Key — это значение типа Char, представляющее символ ASCII. Несмотря на то, что обе переменные называются Key, они представляют различную информацию. Все ASCII-символы имеют соответствующие коды виртуальных клавиш, но многие виртуальные клавиши не имеют ASCII-эквивалента, например клавиша F1.
Параметр Shift имеет тип TShiftState.
Задание 1. Напишите приложение, закрывающееся при одновременном нажатии клавиш Alt и X.
Решение
Создайте новое приложение и сохраните его в новой папке
Приложение должно закрываться, если одновременно нажаты обе клавиши, для обработки воспользуемся событием ОпКеуDown. Создайте обработчик этого события.
Воспользуемся значением параметра Shift для определения нажатия клавиши Alt:
if ssAlt in Shift then Close;
{Close — это метод формы, закрывающий ее}.
Убедитесь, что нажатие клавиши Alt приведет к закрытию формы.
Определим код клавиши X. Добавьте в обработчик события OnKeyDown оператор:
Caption:=IntToStr(Key);
Здесь IntToStr(x) — это функция, которая преобразует целое число х в значение строкового типа, Key — код нажатой клавиши.
Запустите приложение. Определите виртуальный код клавиши с латинской буквой «х».
Итак, виртуальный код клавиши с латинской буквой «х» равен 88. Для решения задачи напишем следующий код обработчика события OnKeyDown формы:
if (ssAlt in Shift) and (Key=88) then Close;
Сохраните приложение. Убедитесь, что при одновременном нажатии клавиш Alt и латинской буквы «х» независимо от выбранного языка, приложение закрывается.
Задание 2. Напишите программу, которая определяет нажатую на клавиатуре клавишу и выводит в компонент StaticText информацию об этой клавише.
Например, при нажатии строчной латинской буквы 'а' в заголовке должна быть надпись:
«Код виртуальной клавиши=65 а — строчная латинская буква ASCII-K0d=97»
(аналогично для русских букв, цифр, специальных символов — запятая, точка, скобки и т. д.); при нажатии клавиши стрелка вправо:
«Код виртуальной клавиши = 39» (аналогично для всех специальных клавиш — Fl, Insert и т. д.).
Решение
Создайте новое приложение и сохраните его в новой папке. На форме расположите компонент StaticText из закладки «Дополнительно».
При нажатии любой клавиши клавиатуры возникают события OnKeyDown и OnKeyUp. Для получения информации о коде виртуальной клавиши создадим обработчик события OnKeyDown:
StaticText1.Caption:='Код виртуальной клавиши='+IntToStr(Key);
Сохраните приложение. Убедитесь, что при нажатии любой клавиши в компонентt StaticText отображается виртуальный код этой клавиши.
Для отображения информации о символах воспользуемся обработчиком события OnKeyPress, параметр Key которого содержит символьное значение, представляющее символ ASCII, Создайте обработчик события OnKeyPress и введите оператор:
StaticText1.Caption:=Key;
Сохраните приложение и запустите его. При нажатии на клавишу «F» в компоненте StaticText, отображается символ F. Попробуйте объяснить это.
Это объясняется тем, что при нажатии на клавишу вначале происходит событие OnKeyDown, после обработки которого возникает событие OnKeyPress, и в результате этого код виртуальной клавиши затирается изображением символа. Измените код следующим образом:
case Key of begin
‘a'..'z': StaticText1.Caption:= StaticText1.Caption+’ ‘+Key+' - строчная латинская буква';
'A'..'Z': StaticText1.Caption:= StaticText1.Caption+' '+Key+' - заглавная латинская буква’ ;
'0'..'9': StaticText1.Caption:= StaticText1.Caption+' ‘+Key+' -цифра';
'а'..'я': StaticText1.Caption:= StaticText1.Caption+' '+Кеу+’ —строчная русская буква' ;
'А'..'Я': StaticText1.caption:= StaticText1.Caption+' ‘+Key+' - заглавная русская буква';
else StaticText1.Caption:= StaticText1.Caption+ ‘ специальный символ’;
end;
StaticText1.Caption:= StaticText1.Caption+' ASCII-код='+IntToStr (Ord (Key));
Сохраните приложение. Проверьте, является ли написанная программа решением поставленной задачи.
Задания для самостоятельного выполнения:
1) Напишите программу отображения графиков функций:
у=х2. y=sin(x); y=tg(x).
2)Напишите программу отображения графика функции y=a*sin(bx). При нажатии на клавиши влево/вправо происходит изменение параметра b, при нажатии на клавиши вверх/вниз — параметра а. В заголовок формы выведите название графика функции, например, у=3sin(-2x).
3) Напишите программу, которая подсчитывает количество нажатий клавиш управления курсором. Например, 'Влево — 1, Вверх — 0, Вправо — 5, Вниз — 37'.
4) Напишите программу, которая при нажатии на клавиши управления курсором перемещает форму в соответствующем направлении; при нажатии комбинации клавиши <Shift> и клавиши управления курсором — изменяет размеры формы.
Список литературы
1. Иванова Г.С. Технология программирования. - М.: Изд-во МГТУ им. Н.Э.Баумана, 2002.
2. Аляев Ю.А., Козлов О.А. Алгоритмизация и языки программирования Pascal, C++, Visual Basic: Учебно-справочное пособие. – М.: Финансы и статистика, 2007.
3. Иванова Г.С. Основы программирования. - М.: Изд-во МГТУ им. Н.Э.Баумана, 2009.
4. Терехов А.Н. Технология программирования. – М.: БИНОМ. Лаборатория знаний, Интернет-университет информационных технологий - Intuit.ru, 2006.
5. Вендров А.М. CASE-технологии. Современные методы и средства проектирования информационных систем. - М.: Финансы и статистика, 1998.
6. Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989.
7. Тассел Д. Ван. Стиль, разработка, эффективность, отладка и испытание программ. – М.: Мир, 2005.
8. Соммервиль И. Инженерия программного обеспечения. - М.: Изд-во Вильямс, 2002.
9. Кантор М. Управление программными проектами. Практическое руководство по разработке успешного программного обеспечения. - М.: Вильямс, 2002.
10. Бахман П., Френцель М., Ханцшманн К и др. Программные системы. – М.: Мир, 1998.
11. Фаулер М., Скотт К. UML в кратком изложении. Применение стандартного языка объектного моделирования. – М.: Мир, 1999.
12. Буч Г., Рамбо Д., Джекобсон А. Язык UML. Руководство пользователя. – М.: ДМК Пресс, 2001.
13. Кватрани Т. Rational Rose 2000 и UML. Визуальное моделирование. - М.: ДМК Пресс, 2001.
14. Мандел Т. Разработка пользовательского интерфейса. – М.: ДМК Пресс, 2001.
15. Канер С., Фолк Д., Нгуен Е.К. Тестирование программного обеспечения. - Киев: «ДиаСофт», 2008.
16. Гримм С.Дж. Как писать руководства для пользователей. – М.: Радио и связь, 1985.
17. Ашарина И.В. Основы программирования на языках С и С++.- М.: Горячая линия - Телеком, 2009.
18. Попов В.Б. Основы информационных и телекоммуникационных технологий. Программные средства информационных технологий. – М.: Финансы и статистика, 2008.
19. Архангельский А.Я. Язык Pascal и основы программирования в Delphi. – М.: ЗАО Бином, 2004.
Содержание
1 Лабораторная работа. Знакомство со средой Delphi. Создание визуального приложения со стандартными компонентами 3
2 Лабораторная работа. Разработка приложений с выводом сообщений, реализация простейших вычислений с использованием преобразований типов данных 19
3 Лабораторная работа. Обработка событий мыши 25
4 Лабораторная работа. Обработка событий клавиатуры 37
Список литературы 44
Сводный план 2011 г. поз. 266