Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
230401_MU_-_Osnovy_algoritmizatsii_i_programmir...docx
Скачиваний:
12
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

5. Дважды щелкните на первом таймере и запрограммируйте мигание сообщения «Обязательно нажмите на кнопку «Гото­во» после размещения рисунков!!» так:

procedure TForml.TimerlTimer(Sender: Tobject); begin

{Еслиполемигает}

if Labell.Visible = True then

Labell.Visible := False {полегасится,}

else

{иначе - полезасвечивается} Labell.Visible := True;

end;

6*. Введите описание глобальных переменных программы:

varForml : Tforml

{Эта строка уже есть в заготовке модуля} shiftX, shiftY :integer;

6**. Введите описания глобальных констант и переменных программы:

const к = 4; {Количество обновлений содержания теста}

a: array [l..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 [l..k, 1..3] of string = ( {Массивслов}

('money', 'car', 'bomb'),

('tennis', 'clock', 'coins'),

('building', 'champagne', "brick'),

('dice', 'door', 'donkey')

);

check: array [l..k, 1..3] of integer = (

(2, 1, 3), {Таблица отображения} (3, 2, 1), {массива рисунков а в }(3, 1, 2), {массив слов Ъ. Здесь число-} (1, 3, 2) ); {номер рисунка к слову}

var

Forml : TForml; {Этастрокаужеестьвзаготовкемодуля} i, score : integer; shiftX, shiftY : integer; leftl, left2, left3 : integer; topi, top2, top3 : integer;

7*.Запрограммируйте кнопку BitBtn2 как кнопку закрытия окна командой close.

Вставьте рисунки bomb.wmf, tennis.wmf и money.wmf, из папки С:\ ProgramFiles \ MicrosoftOffice \ Clipart \ Popular в объекты Imagel, Image2 и Image3 соответственно.

Свойствам Caption текстовых полей Label2, Label3 и Label4 присвойте значения "money", "bomb" и "tennis" соответственно.

7**.Запрограммируйте процедуры: создания формы FormCreate, вставки в неё рисунков SetPicture, вывод информации о ре­зультате теста Informationи кнопку BitBtn2:

procedure Tb1orml.FormCreate(Sender: TObject); begin

i := 0; {Номер обновления содержания теста) score := 0; {Набранные пользователем баллы) {Сохраняем начальные координаты)

{левых верхних углов) {трех рисунков в форме)

leftl ;= Imagel.Left left2 := Image2.Left left3 := Image3.Left topi := Imagel.Top; top2 := Image2.Top;

top3 := Image3.Top;

SetPicture; {Процедура i-ойвставкирисунков)

end;

procedure Information; begin

{ОстанавливаемобатаймераПрекращаеммигание Labell} Forml.Timer 1.Enabled := False; {Останавливаемдвижениеиндикаторавремени) Forml.Timer2.Enabled := False; {Результаттестаприводимк 100 баллам) score := (score * 100) div к;

{Если результат > 90 - считываем файл громкого

аплодирования)

if score >90 then

Forml.MediaPlayerl.FileName :— 'applause.wav';

{Если результат между 70 и 90 - считываем файл

легкогоаплодирования.)

if (score >70) and (score <90) then

Forml.MediaPlayerl.FileName := 'clap.wav'; {Иначе файл не считываем и аплодирования не будет)

Forml.MediaPlayerl.Open; {Открываем мульт. плеер)

Forml.MediaPlayerl.Play; {Воссоздаём звук }

{Открываем окно сообщения"Вы набрали ## баллов с 100}

MessageDlg('Bbi набрали '+IntToStr(score)+' баллов из 100', mtInformation,[mbOk], 0); {После щелчка на кнопке "Ok" информационного окна:} {Закрываем окно программы. - заканчиваем работу}

Forml.close;

end;

procedure TForml.BitBtn2Click(Sender: TObject); begin

Information;

end;

Процедуры Information и SetPicture не являются методами класса Forml. Поэтому изменение свойств любых объектов фор­мы происходит в них путем явного указания имени формы Forml перед именем соответствующего объекта, например, Forml.Timer1.Enabled. Декларации процедур Information и

SetPicture вставьте между описанием типа TForml и разделом подсоединенных модулей - uses:

procedureInformation; procedureSetPicture;

8. Обеспечьте перетягивания первого рисунка на форме, запрограммировав обработки таких трех событий для объек­та Imagel: OnMouseDown (ЕслиНажатьМышь), OnMouseMove (ЕслиПеретягиватьМышь) и OnMouseUp (ЕслиОтпустить-Мышь). Для заполнения заготовок приведенных процедур воспользуйтесь закладкой Events окна инспектора объектов первого рисунка.

procedureTForml.ImagelMouseDown(Sender: TObject;

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

begin

{Временная переменная Tag объекта Imagel=1, если) {клавиша мыши в этот момент нажата) Imagel.Tag := 1;

shift := Y; {Запоминаем координату (X;Y) точки) shift := X; {щелчка мыши в середине рисунка) end;

procedureTForml.lmagelMouseMove(Sender: TObject;Shift: TshiftState; X,Y: Integer);

begin

ifImagel.Tag = 1 then {Еслинажатаклавишамыши} begin

{Меняем, координаты рисунка на величину изменения ко­ординаты указателя мыши (X;Y) с учетом его смещений в середине рисунка shiftX, shiftY}

Imagel.Top := Imagel.Top + Y - shiftY;

Imagel.Left := Imagel.Left + X - shiftX;

end;

end;

procedureTForml.ImagelMouseUp(Sender : Tobject;

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

begin

{Запоминаем, что клавиши мыши отпущены.} Image 1.Tag := 0 end;

Обратите внимание, что программа не проверяет, какую имен­но клавишу мыши нажал пользователь, поэтому перетягивать картинки можно любой клавишей. Проверить клавиши мыши можно, проанализировав аргумент Button (типа TMouseButton) приведенных процедур: Button = {mbLeft (левая клавиша), mbRight (правая), mbMiddle (средняя)}. Координаты указателя мыши в пикселях передаются в процедуры с помощью аргументов X и Y типа integer.