Некоммерческое акционерное общество

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

Кафедра компьютерных технологий 

 

 

  

 

ВИЗУАЛЬНОЕ ПРОГРАММИРОВАНИЕ 

Методические указания к выполнению лабораторных работ для студентов

всех форм обучения специальностей 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 Hinttrue:

 

 

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. Создайте новое приложение, в котором при нажатии на левую кнопку мыши происходит смена цвета с зеленого на красный, и, наоборот, с красного — на зеленый.

Решение

При щелчке по левой кнопке мыши происходит событие On­click. В соответствии с условием задачи в обработчике события 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{SenderTObject; Button TMouseButtonShiftTShiftState X,   Y:   Integer);

Событие OnMouseUp происходит, если пользователь осво­бождает кнопку мыши, которая была нажата. Заголовок обра­ботчика этого события имеет вид:

procedure TMainF.FormMouseUp(Sender: TObject;

Button:  TMouseButton;  Shift:  TShiftState;  X,   Y:   Integer);

Событие OnMouseMove происходит, если пользователь пере­мещает указатель мыши. Заголовок обработчика этого события имеет вид:

procedure TMainF.FormMouseMove(SenderTObject; Shift: TShiftStateX,   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 (интерфейс графических устройств) и «рабочие инструменты» (перо, кисть, шрифт, набор функций по рисованию типовых геометрических фигур). В процессе конструирования приложения свойство Can­vas недоступно в окне инспектора объектов, оно доступно только во время выполнения приложения. Чтобы нарисовать на форме пунктирную линию красного цвета от точки с координатами (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. Для получения информации о коде виртуальной клавиши создадим обработчик события On­KeyDown:

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