Инструкционные карты занятий
  • Регистрация
1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 (0 Голоса)

ИНСТРУКЦИОННАЯ КАРТА № 15

На выполнение практического занятия по учебной практике

«Программирование»

Тема: Анимационные рисунки в среде Delphi

Цель работы

- изучить методы создания анимационных приложений;

- закрепить навыки работы с меню для управление работой приложения.

Норма времени: 2 часа.

Оснащение рабочего места:

Инструкционные карты, конспект, ПК, среда Delphi.

ХОД РАБОТЫ

I.  Теоретические сведения

Используя элементы управления Image и Timer, можно создавать анимационные приложения с помощью тех же методов, которые используются при стоп-анимации, применяемой создателями фильмов. Темп анимации задает компонент Timer (таймер).

1.1 Таймер (TTimer)

Невизуальный компонент (элемент управления) TTimer предназначен для отсчета заданных интервалов времени и инициирования каких-то действий по истечении очередного интервала: запуск или завершение каких-либо процессов, перемещение объекта, изменение вида объекта и т. п.

Во время проектирования таймер отображается в форме, но при выполнении приложения он становится невидимым. Поэтому не имеет значения, в каком месте формы его разместить. Его можно расположить даже поверх каких-то элементов управления. Размеры этого компонента также не имеют значения, поэтому их невозможно изменить. Фактически таймер выполняет только одну функцию – проверяет показания системных часов и действует в соответствии с результатом: через заданный в его свойстве Interval интервал времени генерирует событие onTimer. Соответственно, через этот интервал активизируется процедура обработки этого события, если она определена. В этой процедуре можно менять положение изображения Image или даже видоизменять само изображение. В результате чего изображение «оживает» – перемещается по экрану, изменяется (меняет свой вид). Подбирая временной интервал и величину перемещения, можно регулировать скорость и плавность перемещения.

Основные свойства компонента TTimer

Основное свойство – Interval. Предназначено для установки интервала времени, значение которого задается в миллисекундах, т. е. для отсчета секунд их надо умножить на 1000. Но следует помнить, что максимальное значение, которое можно установить, равняется 65 535 миллисекундам (т. е. 65,5 с). С другой стороны, минимальный интервал, который может быть реально установлен, равен 55 миллисекундам. Более того, любой интервал времени округляется, и он всегда кратен 55. Это связано с особенностями компьютера. Для отключения таймера необходимо свойству Interval присвоить нулевое значение или свойству Enabled – значение false.

Основные события компонента TTimer Единственное событие – onTimer, которое возникает после окончания установленного интервала времени.

Если обработка события onTimer длится больше времени, заданного в свойстве Interval, то новое событие не возникает, пока не завершится обработка этого события.

1.2 Меню

Для подбора параметров анимации (временного интервала и величины перемещения) необходимо организовать ввод новых значений этих параметров. Поэтому на форме необходимо выделить место для размещения полей ввода, а также других управляющих элементов (командных кнопок). В таких случаях часто используется меню.

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

Обычно в приложениях имеется два вида меню: главное (операционное) меню и несколько контекстных (всплывающих) меню. Главное меню используется для управления работой всего приложения (или отдельной его формой), каждое из контекстных меню служит для управления отдельным интерфейсным элементом, или группой таких элементов. Построение этих меню идентично. В данной работе используется главное меню.

1.3 Пункт меню (TMenuItem)

Каждый пункт меню представляет собой объект типа TMenuItem. Отдельный пункт меню обычно изображается как размещенный в прямоугольнике текстовый заголовок, описывающий назначение пункта меню. Пункт может быть выделен (маркирован) для указания на включенное состояние. Класс TMenuItem имеет свой набор свойств, событий и методов.

Основные свойства компонента TMenuItem

Name (Имя) – содержит внутреннее имя пункта (опции или команды) меню.

Caption –содержит текст, который будет показываться на экране при просмотре меню – наименование пункта меню на экране. Delphi обеспечивает поддержку «горячих клавиш», которые осуществляют быстрый доступ к пунктам меню. «Горячая клавиша» – это клавиша на клавиатуре, которую пользователь может нажать в сочетании с клавишей Alt для быстрого выбора пункта меню. Если пользователь при работе программы открывает меню, «горячая клавиша» помечается подчеркнутой буквой в наименовании пункта меню. Для определения «горячей клавиши» достаточно перед соответствующей клавише буквой в наименовании пункта меню поставить символ амперсанд « ». Для вставки разделительной черты, определяющей группу подпунктов, необходимо вместо наименования очередного пункта ввести символ «-» (минус).

Enabled – позволяет запретить использование соответствующего пункта, если этому свойству присвоить значение false (по умолчанию true, что делает соответствующий пункт доступным). Если пункт меню недоступен, то он показывается на экране тусклым цветом. Это отвечает принятым соглашениям: в типичных приложениях Windows при определенных условиях не все пункты меню могут быть доступными.

Visible – позволяет отображать или прятать отдельные пункты меню. Если ему присвоить значение false, то пункт меню исчезнет с экрана. Следует помнить, что это, в отличие от блокирования (Enabled), может вызвать недоразумение.

Флажок Checked позволяет отметить отдельные пункты галочкой, которая появляется рядом с пунктом меню. Это дает возможность переключать состояние команды: включать или выключать ее. При этом свойство AutoCheck определяет, будет или нет автоматически изменяться свойство Checked при выборе пункта меню.

Основные события компонента TMenuItem. Для пунктов меню практически обрабатывается единственное событие onClick – выбор пункта меню. Для создания процедуры обработки этого события (то есть выполнения команды меню) необходимо во время проектирования приложения выбрать соответствующий пункт или подпункт в окне Конструктора меню и сделать на нем двойной щелчок. Именно с помощью обработчика этого события и реализуются команды меню.

1.4 Главное меню формы (TMainMenu)

Главное меню размещается в верхней части окна (формы) в виде строки (строки меню), которая состоит из нескольких пунктов – названий команд или опций, расположенных горизонтально. Если пункты меню не вмещаются на форме в одну строку, они переносятся на следующую.

При изменении размеров (ширины) формы автоматически соответствующим образом меняются размеры главного меню и размещение в нем пунктов меню. Ширина формы ограничена снизу размером самого длинного заголовка пункта меню. Щелчок на каком-либо пункте может сразу привести к выполнению команды, но значительно чаще может вызвать подменю – меню второго уровня, которое отличается от меню первого уровня только направлением – его пункты размещаются вертикально. Пункты второго уровня, в свою очередь, могут иметь подменю третьего уровня, и т. д. Таким образом, меню носит иерархический характер и состоит из нескольких уровней. Часто пункты меню первого (верхнего) уровня называют заголовками меню, а пункты меню второго уровня – пунктами первого уровня и т. д., то есть выделяют первый уровень меню отдельно. Это связано с тем, что именно этот уровень выделяется от других направлением: только этот уровень расположен горизонтально. Кроме того, только первый уровень всегда показывается на экране. Другие уровни появляются по мере необходимости (при активации соответствующего пункта меню предыдущего уровня).

Главное меню создается с помощью компонента TmainMenu. При проектировании приложения на форме видны компонент MainMenu и соответствующая ему строка меню, которая выглядит и ведет себя так же,

Как и при выполнении приложения. Для перехода в процедуру обработки события onClick пункта меню следует выбрать этот пункт с помощью клавиатуры или мыши. MainMenu – невизуальный компонент, как и компонент Ttimer. Во время проектирования он отображается в форме, но при выполнении приложения он становится невидимым, отображается только соответствующая ему строка меню. Поэтому размеры и местоположение его в форме не имеют значения.

1.5 Конструктор меню (Menu Designer)

Для создания меню сначала необходимо создать соответствующий компонент TmainMenu или TPopupMenu. Вновь созданный компонент не имеет еще ни одного пункта. Дальнейший процесс создания (проектирования) меню осуществляется с помощью специального инструмента – Конструктора меню (рис. 1).

Рисунок 1 – Окно Конструктора меню

Конструктор меню (Menu Designer) – это графический инструмент, который руководит созданием меню на форме, как главного, так и контекстного. Он позволяет создавать новое меню или корректировать существующее: добавлять или удалить в нем пункты меню (опции или команды),

Перемещать их как в границах одного уровня, так и между уровнями. Конструктор меню позволяет также добавлять в меню специальные эффекты (ключи доступа, контрольные значки, акселераторы, и т. п.). Вызвать Конструктор меню можно через контекстное меню компонента TmainMenu или TPopupMenu. Для этого необходимо сделать щелчок правой кнопкой мыши на требуемом компоненте и выбрать в появившемся меню пункт Menu Designer. Также Конструктор меню можно вызвать двойным щелчком по компоненту либо щелчком на кнопке с многоточием в правой половине строки свойства Items компонента. На рисунке 12 показано окно Конструктора меню при вызове его для компонента TmainMenu. Окно для компонента TPopupMenu отличается от приведенного тем, что в нем нет горизонтальной строки меню. Пункты первого уровня сразу располагаются вертикально.

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

В конце каждого уровня меню имеется «пустой» пункт – пустой прямоугольник (без имени). При выполнении приложения такой пункт не показывается. Назначение «пустого» пункта – создание нового пункта или подпункта. Для этого необходимо активизировать соответствующий пустой прямоугольник в окне Конструктора меню и в Инспекторе объектов в свойстве Caption ввести наименование пункта (подпункта), которое будет показываться на экране при выполнении приложения. Сразу же на этом месте будет создан новый пункт и появится новый пустой прямоугольник, позволяя тем самым вводить новые пункты (подпункты). При этом при необходимости можно изменить также и значение свойства Name – имя объекта, описывающего создаваемый пункт (подпункт) или значения любых других свойств.

При работе с Конструктором меню широко используются команды его контекстного меню. Для вставки подпункта после текущего пункта из этого контекстного меню необходимо выбрать команду Insert. Для создания подпунктов более низкого уровня необходимо в контекстном меню подпункта текущего уровня (которому будет подчинен создаваемый подпункт) выбрать Create SubMenu. Для удаления пункта или подпункта следует его активизировать и выбрать из контекстного меню пункт Delete.

При конструировании меню можно также перемещать указателем мыши пункты и подпункты меню из одного места в другое.

Используемый совместно с Конструктором меню Инспектор объектов позволяет управлять свойствами отдельных пунктов меню.

При определении заголовков пунктов меню следует руководствоваться следующими правилами:

Ø  наименования должны быть краткими, максимум два-три слова;

Ø  желательно каждому пункту (подпункту) присвоить «горячую клавишу», по возможности первую букву;

Ø  после команды, требующей от пользователя дополнительной информации перед ее выполнением, поместить три точки – признак появления окна диалога;

Ø  если пункт меню используется как переключатель, использовать флажок Checked для отметки включенного состояния пункта.

II.  Задания для самостоятельного выполнения

Задание. создать приложение с элементами анимации, в котором графическое изображение перемещается по экрану с заданной скоростью, при этом оно должно быть «живым» – периодически изменять свой вид.

Ход работы

1 В личной папке создать папку для практической работы № 15, присвоив этой папке имя PR15.

2 Скопировать в папку с разрабатываемым проектом PR15 файлы с изображениями icon1.ico и icon2.ico. (можно подобрать свои небольшие рисунки – иконки).

3 Войти в Delphi и создать проект Project15, включающий одну форму Form1. Сохранить проект и его форму в папке PR15 под именем, соответствующем номеру практической работы № 15.

4 Поместить на форму компонент Image1 из палитры Additional. Графическое изображение в этот объект будет загружаться программно, поэтому на этапе дизайна нет необходимости в его загрузке.

5 Поместить на форму компонент Timer из палитры System. Проследить, чтобы свойство Enabled (доступность) было установлено в true.

Это означает, что таймер включен. Значения остальных свойств не имеют значения. Интервал звонков (свойство Interval) будет устанавливаться программно (при выполнении приложения). Однако можно установить его начальное значение равным примерно 100 (100 миллисекунд, или 0,1 с). Тогда при запуске приложения сразу появится изображение, которое тут же начнет «кривляться». Если определить Interval = 0, что равносильно отключению таймера, то в момент запуска изображение будет отсутствовать и появится только при включении таймера (когда будет задан ненулевой интервал).

6 Поместить на форму компонент MainMenu1 из палитры Standard для создания операционного меню, которое будет управлять работой проекта.

7 Вызвать контекстное меню компонента MainMenu1 (щелчком правой кнопки мыши) и выбрать в нем пункт Menu Designer. Появится окно Конструктора меню. Кстати, это окно можно вызвать двойным щелчком на компоненте или щелчком на кнопке с многоточием в правой половине строки Items Инспектора объектов.

8 Создать опции меню, как показано на рисунке 2:

N1 – Интервал времени;

N2 – Шаг перемещения;

N3 – Выход.

Наименования опций вводятся в строке Caption Инспектора объектов. Для создания новой опции щелкнуть справа на пустом прямоугольнике и ввести ее наименование. Справа появится новый пустой прямоугольник для ввода очередной опции. Каждая опция (пункт) может иметь подчиненные опции (подпункты). В нашем случае вторая опция имеет две подчиненные опции.

Для создания подчиненных опций необходимо сначала активизировать соответствующую опцию. В активной опции внизу появится пустой прямоугольник для ввода подопции. Щелкнуть на нем и ввести наименование подопции. Ниже появится новый пустой прямоугольник для ввода

Следующей подопции. Ввести две подопции:

N4 – По горизонтали;

N5 – По вертикали.

Рисунок 2 – Общий вид формы на этапе проектирования

9 В начале исполнительной части модуля объявить глобальные переменные:

Var

W,//Шаг перемещения по вертикали.

H: Integer;//Шаг перемещения по горизонтали.

FlagImage: Boolean; //Флаг переключения картинки.

Var Picture: array[1..2] of TPicture;

Переменная FlagImage служит для идентификации картинки, показываемой в компоненте Image1. Поскольку картинок всего две, переменная может иметь только два значения. В этом случае удобно использовать переменную логического типа.

Переменная Picture – массив типа TPicture (графическое изображение) предназначена для хранения графических изображений, которые будут периодически сменять друг друга в компоненте Image1, заставляя это изображение «гримасничать». Логическая переменная FlagImige управляет сменой изображений.

10 Разработать программный код обработки события onActivate для формы. В этом обработчике инициируется массив Picture. С помощью метода Create он размечается, а затем в него загружаются графические изображения. В разметке нуждается любой объект. Однако элементы управления (компоненты формы), располагаемые на какой-либо форме, размечаются автоматически при разметке формы. Массив не является элементом формы, поэтому нуждается в отдельной разметке каждого его элемента. В процессе разметки каждому элементу массива выделяется необходимая динамическая память.

//---------------------------------------------------

Procedure TPR15_Ivanov_Form1.FormActivate(Sender: TObject);

// Обработка события АКТИВАЦИЯ ФОРМЫ.

Begin

W:= 0;

H:= 0;

// Загружаем картинки в массив картинок. Затем при анимации

// будем брать картинки из массива, а не считывать каждый раз

// из файла. Но сначала переменную Picture надо разметить.

Picture[1]:=TPicture. Create;

Picture[2]:=TPicture. Create;

Picture[1].LoadFromFile('Face02.ico');

Picture[2].LoadFromFile('Face03.ico');

// С какой то картинки надо начинать.

FlagImige:=True;

End;

11 Поскольку в нескольких командах меню будут вводиться числовые данные, вынесем команды ввода и контроля в отдельную подпрограмму-функцию inputValue.

//---------------------------------------------------

Function inputValue(n:byte): integer;

// Функция общего назначения.

// Осуществляет ввод значения параметра анимации.

// Параметр n может иметь значение:

// 1 - вводится временной интервал.

// 2 - вводится шаг перемещения по горизонтали.

// 3 - вводится шаг перемещения по вертикали.

Var flag:boolean;

Var def: string[3];

Var str: String;

Const ss:array[1..3] of string = ('временной интервал', 'шаг перемещения по горизонтали', 'шаг перемещения по вертикали');

Begin

// В зависимости от вида параметра - разные значения

// по умолчанию. Можно подобрать другие (экспериментально).

If n=1 then def:='100'

Else def:='10';

Flag:=false;

While not flag do

Begin

Str:= InputBox('Ввод параметров анимации.',

'Введите '+ss[n], def);

Try

Result:=StrToInt(str);

Flag:=True;

Except

On EConvertError do

ShowMessage('Неверно введен '+ss[n]);

End;

End;

End;

12 Разработать программный код обработчиков события onClick для команд меню ввода интервала перемещения и шага перемещения по горизонтали и вертикали. Работа этих обработчиков сводится к вызову функции inputValue с разными параметрами и занесению ее результатов в соответствующие переменные или свойство.

//---------------------------------------------------

Procedure TPR15_Ivanov_Form1.N1Click(Sender: TObject);

// Выбор опции меню Интервал времени.

Begin

Timer1.Interval:=inputValue(1);

End;

//---------------------------------------------------

Procedure TPR15_Ivanov_Form1.N3Click(Sender: TObject);

// Выбор опции меню Шаг перемещения. Подопция По горизонтали.

Begin

W:=inputValue(2);

End;

//---------------------------------------------------

Procedure TPR15_Ivanov_Form1.N4Click(Sender: TObject);

// Выбор опции меню Шаг перемещения. Подопция По вертикали.

Begin

H:=inputValue(3);

End;

13 Главная работа по созданию эффекта анимации осуществляется в обработчике события OnTimer компонента Timer.

//---------------------------------------------------

Procedure TPR15_Ivanov_Form1.Timer1Timer(Sender:TObject);

// Обработка события ЗВОНОК ТАЙМЕРА. Наступает регулярно

// через интервал времени, заданный параметром Intrrval

// объекта Timer1.

Begin

//Проверяем, достигли ли уже границы окна, и если достигли –

//меняем шаг перемещения на обратный. Т. е. будем теперь

//двигаться в обратном направлении.

//по вертикали:

If (Image1.Top <0) Or (Image1.Top >=

(L8_Ivanov_Form1.ClientHeight - Image1.Height))

Then H:= - H;

// по горизонтали:

If (Image1.Left <0) Or (Image1.Left >=

(L8_Ivanov_Form1.ClientWidth - Image1.Width))

Then W:= - W;

//Картинку постоянно меняем, попеременно показывая то одну, то другую

//Нужную картинку выбираем из массива картинок Picture[i].

//В эти массивы картинки были загружены при активации формы.

//Перенос картинки из массива в компонент Image1, точнее – в его свойство

//Picture осуществляем с помощью метода Assign этого свойства.

If FlagImige = True Then

Begin

FlagImige:= False;

Image1.Picture. Assign(Picture[1]);

End

Else

Begin

FlagImige:= True;

Image1.Picture. Assign(Picture[2]);

End;

// Перемещаем картинку.

Image1.Top:= Image1.Top + H;

Image1.Left:= Image1.Left + W;

End;

14 Нажав клавишу F9, запустить приложение на выполнение. В случае необходимости выполнить отладку. Исследовать влияние параметров анимации (временной интервал и шаг перемещения по вертикали и горизонтали) на качество анимации. Установить наиболее оптимальные параметры анимации.

15 Модифицировать приложение, используя не два, а большее количество сменяющих друг друга изображений. Для этого надо увеличить размерность массива Picture и вместо логического переключателя FlagImige использовать числовой, позволяющий отслеживать более двух состояний.

16 По результатам работы составить отчет.

III. Контрольные вопросы

1.  Графические компоненты.

2.  Свойства графических компонент.

3.  Процедура обработки события для графических компонент.

4.  Таймер (TTimer) и его свойства.

5.  Меню (TMenuItem).

6.  Главное меню формы (TMainMenu).

7.  Конструктор меню (Menu Designer).

Согласовано

На заседании цикловой комиссии общеобразовательных дисциплин

Протокол №___ от «__» ________

Председатель _________________

Добавить комментарий


Защитный код
Обновить

По темам:

История Украины

Культурология

Высшая математика

Информатика

Охотоведение

Статистика

География

Военная наука

Английский язык

Генетика

Разное

Технологиеские темы

Украинский язык

Филология

Философия

Химия

Экология

Социология

Физическое воспитание

Растениевосдство

Педагогика

История

Психология

Религиоведение

Плодоводство

Экономические темы

Бухгалтерские темы

Маркетинг

Иностранные языки

Ветеринарная медицина

Технические темы

Землеустройство

Медицинские темы

Творчество

Лесное и парковое хозяйство