Ход работы. Загрузите среду визуального программирования Delphi.
Загрузите среду визуального программирования Delphi.
2. Измените заголовок (Caption) формы с "Form1" на "Английский язык - тестирование".
3. Откажитесь от всех системных кнопок формы, задав значение False во всех позициях свойства Borderlcons: biSystemMenu, biMinimize, biMaximize и biHelp. Работу с программой будем завершать нажатием на кнопку Выход.
Расположите на форме объекты так, как показано на рис. 17.
![]() Задайте такие свойства объектов:
Замечание. Размеры фигур должны быть больше, чем размеры рисунков, поскольку последние следует располагать строго в середине фигур. Если во время наложения рисунка на фигуру рисунок исчезает, переместите его на передний план командой его контекстового меню Bring To Front.
5. Дважды нажмите на первом таймере и запрограммируйте мигание сообщения "Обязательно нажмите на кнопку "Готово" после размещения рисунков!!" так:
procedure TForm1.Timer1Timer(Sender: TObject); Begin if Label1.Visible=True then {Если поле светится} Label1.Visible:=False {поле гасится,} else Label1. Visible:= True; {иначе - поле засвечивается} End;
6. Введите описание глобальных констант и переменных программы:
const k=4; {Количество обновлений содержания теста} a: array [1..k,1..3] of string =({Массив рисунков} ('car.wmf, 'money.wmf, 'bomb.wmf'), ('coins.wmf, 'clock.wmf, 'tennis.wmf), ('brick.wmf, 'building.wmf, 'champgne.wmf), ('dice.wmf, 'donkey.wmf, 'door.wmf));
b: array[1..k,1..3] of string =({Массив слов} ('money', 'car', 'bomb'), ('tennis', 'clock', 'coins'), ('building', 'champagne', 'brick'), ('dice', 'door', 'donkey'));
check: array[1..k,1..3] of integer=( (2, 1, 3), {Таблица отображения} (3, 2, 1), {массива рисунков а в массив} (3, 1, 2), {слов b. Здесь число-} (1, 3, 2)); {номер рисунка к слову}
var Form1: TForm1; {Эта строка уже есть в заготовке модуля} i,score: integer; shift,shift: integer; left1,left2,left3: integer; top1,top2,top3: integer;
7. Вставьте рисунки bomb.wmf, tennis.wmf и money.wmf из папки C:\Program Files\Microsoft Office\ media \ cagcat10 (либо спросить у преподавателя) объекты Image1, Image2 и Image3 соответственно. Свойствам Caption текстовых полей Label2, Label3 и Label4 установите значения "money", "bomb" и "tennis" соответственно.
8. Запрограммируйте процедуры: создание формы FormCreate, вставка рисунков SetPicture, вывод информации о результате теста Information и кнопку BitBtn2:
procedure TForm1.FormCreate(Sender: TObject); Begin i:=0; {Номер обновления содержания теста} score:=0; {Набранные пользователем баллы} left1:=Image1.Left; {Сохраняем начальные координаты} left2:=Image2.Left; {левых верхних углов} left3:=Image3.Left; {трех рисунков в форме} top1:=Image1.Top; top2:=Image2.Top; top3:=Image3.Top; SetPicture; {Процедура і-го вставление рисунков} end;
procedure SetPicture; Begin {Пока рисунки не расположены правильно – кнопка "Готово" недоступная:} Form1.BitBtn1.Enabled:=False; i:=i+1; {Увеличиваем номер серии рисунков} if i>=k+l then Information {Если тест закончен, то выводим результаты (процедура Information)} else {Иначе} Begin {Обновляем слова:} Form1.Label2.Caption:=b[i,1]; Form1.Label3.Caption:=b[i,2]; Form1.Label4.Caption:=b[i,3]; {Обновляем рисунки:} Form1.Image1.Picture.LoadFromFile(a[i,1]); Form1.Image2.Picture.LoadFromFile(a[i,2]); Form1.Image3.Picture.LoadFromFile(a[i,3]); {Обновляем индикатор времени на 100%:} Form1.Gauge1.Progress:=Form1.Gauge1.MaxValue; {Располагаем рисунки под фигурами:} Form1.Image1.Left:=left1; Form1.Image2.Left:=left2; Form1.Image3.Left:=left3; Form1.Image1.Top:=top1; Form1.Image2.Top:=top2; Form1.Image3.Top:=top3; End; End;
procedure Information; Begin {Останавливаем оба таймера} Form1.Timer1.Enabled:=False; {Останавливаем мигание Label1} Form1.Timer2.Enabled:=False; {Останавливаем движение индикатора времени} {Результат теста приводим к 100 баллам} score:=(score*100) div k; {Если результат >90 – считываем файл громких аплодисментов} if score>90 then Form1.MediaPlayer1.FileName:='applause.wav'; {имена звуковых файлов могут быть другими – уточнить у преподавателя} {Если результат между 70 и 90 – считываем файл легких аплодисментов} if (score>70) and (score<90) then Form1.MediaPlayer1.FileName:='clap.wav'; {В других случаях файл не считываем и аплодисментов не будет} Form1.MediaPlayer1.Open; {Открываем мульт. плеер} Form1.MediaPlayer1.Play; {Воссоздаем звук } {Открываем окно сообщения "Вы набрали ## баллов из 100} MessageDlg('Вы набрали '+IntToStr(score)+' баллов из 100', mtInformation,[mbOk], 0); {После нажатия на кнопке "Ok" информационного окна:} Form1.Close; { 3aкpивaeм окно программы - заканчиваем работу} End;
procedure TForm1.BitBtn2Click(Sender: TObject); Begin Information; End;
Процедуры Information и SetPicture не являются методами класса Form1. Поэтому изменение свойств любых объектов формы происходит в них путем явного указания имени формы Form1 перед именем соответствующего объекта, например, Form1.Timer1.Enabled. Объявление процедур Information и SetPicture вставьте между описанием типа Tform1 и разделом подсоединенных модулей uses:
procedure Information; procedure SetPicture;
9. Обеспечьте перетягивание первого рисунка на форме, запрограммировав обработку таких трех событий для объекта Image1: OnMouseDown (Если нажать на мышку), OnMouseMove (Если перетягивать мышку) и OnMouseUp (Если отпустить мышку). Для заполнения заготовок приведенных процедур воспользуйтесь закладкой Events окна инспектора объектов первого рисунка.
procedure TForm1.Image1MouseDown(Sender: TObject; Button:TMouseButton; Shift: TShiftState; X, Y: Integer); Begin {Временная переменная Tag объекта Image1 =1, если} Image1.Tag:=1; {клавиши мыши в этот момент нажата} shift:=Y; {Запоминаем координату (X;Y) точки} shift:=X; {нажатия мышью в середине рисунка} End;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer); Begin if Image1.Tag=1 then {Если нажатая клавиша мыши} Begin {Изменяем координаты рисунка на величину изменения координаты указателя мыши} {(X;Y) с учетом его смещений в середине рисунка shiftX, shiftY} Image1.Top:=Image1.Top + Y - shift; Image1.Left:=Image1.Left +X - shift; End; End;
procedure Tform1.Image1MouseUpfSender: TObject; Button; TMouseButton; Shift: TShiftState; X, Y: Integer); Begin Image1.Tag:=0 {Запоминаем, что кнопка мыши отпущена} end;
Обратите внимание, что программа не проверяет, на какую именно кнопку мыши нажал пользователь, и потому перетягивание можно осуществлять произвольной кнопкой. Проверить кнопки мыши можно, проанализировав аргумент Button (типа TMouseButton) приведенных процедур: Button = {mbLeft (левая клавиша), mbRight (права), mbMiddle (средняя)}. Координаты указателя мыши в пикселях передаются у процедуры с помощью аргументов X и Y типа integer.
|