Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_rab_pascal_delphi.doc
Скачиваний:
0
Добавлен:
20.02.2020
Размер:
6.06 Mб
Скачать
  1. Введіть опис глобальних змінних модуля:

var

main: Tmain;

shiftX,shiftY:integer;

i,n,score:integer;

left1,left2,left3,Stop:integer;

dir:string;

  1. Введіть опис глобальних констант програми:

Const

//координати розташування малюнків при перетаскуванні на геометричні фігури

Etop=56; Eleft1=24; Eleft2=200; Eleft3=376;

folder='\img\';

k = 4; {Кількість запитань}

a: array [1..k, 1..3] of string = ( {імена малюнків}

('car.jpg', 'money.jpg', 'bomb.jpg'),

('coins.jpg', 'clock.jpg', 'tennis.jpg'),

('brick.jpg', 'building.jpg', 'champagne.jpg'),

('dice.jpg', 'donkey.jpg', 'door.jpg'));

b: array [1..k, 1..3] of string = ( {підписи малюнків}

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

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

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

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

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

(2, 1, 3), {позиції розміщення підписів малюнків}

(3, 2, 1),

(2, 1, 3),

(1, 3, 2));

  1. Запрограмуйте процедури: створення форми FormCreate, Вставки в неї малюнків SetPicture, виведення інформації про результати тестів Information і кнопку Ex:

procedure Tmain.FormCreate(Sender: TObject);

begin

left1:=im1.Left; // Зберігаємо позиції малюнків

left2:=im2.Left; left3:=im3.Left;

Stop:=im1.Top;

n:=0; // Обнуляємо номер питання score:=0; // обнуляємо результат тесту

dir:=GetCurrentDir; // взаємо місце знаходження нашої програми

showmessage('Як будете готові, натисніть клавішу "Ок"'); // чекаємо готовності //користувача

setpicture; // встановлюємо малюнки

end;

Procedure SetPicture;

var

s:integer;

begin

;//якщо малюнки були здвинуті то повертаємо їх на своє місце

main.Im1.Top:=Stop; main.Im2.Top:=Stop; main.Im3.Top:=Stop;

main.Im1.Left:=Left1; main.Im2.Left:=Left2; main.Im3.Left:=Left3;

;//якщо всі малюнки були виведені, переходимо на обробку результатів тесту//

if n=4 then

begin

main.ExClick(main); exit;

end;

//Встановлюємо максимальне значення і позицію прогресноі панелі

main.progr.Max:=main.SpinEdit1.Value*100;

main.progr.Position:=main.SpinEdit1.Value*100;

//Вибираємо наступне питання

n:=n+1;

//Виводимо першу картинку

i:=1;

s:=checkf[n,i];

main.Im1.Picture.LoadFromFile(dir+folder+a[n,i]);

main.L1.Caption:=b[n,s];

inc(i);

//Виводимо другу картинку

s:=checkf[n,i];

main.Im2.Picture.LoadFromFile(dir+folder+a[n,i]);

main.L2.Caption:=b[n,s];

inc(i);

//Виводимо третю картинку

s:=checkf[n,i];

main.Im3.Picture.LoadFromFile(dir+folder+a[n,i]);

main.L3.Caption:=b[n,s];

//корегуємо розмір поля картинки відповідно до розмірів самої картинки

main.Im1.Width:=main.Im1.Picture.Width;

main.Im2.Width:=main.Im2.Picture.Width;

main.Im3.Width:=main.Im3.Picture.Width;

main.Im1.Height:=main.Im1.Picture.Height;

main.Im2.Height:=main.Im2.Picture.Height;

main.Im3.Height:=main.Im3.Picture.Height;

end;

procedure Information;

begin

//Зупиняємо таймери

main.Timer1.Enabled := False; main.Timer2.Enabled := False;

//Знаходимо кількість зароблених балів

score := (score * 100) div k;

main.play.FileName := ' ';

//якщо користувач набрав більш ніж 100 балів то запускаємо файл //«applause.wav»

if score > 70 then

main.play.FileName := dir+'\applause.wav';

If main.play.FileName <>' ' then

begin

main.play.Open; {Відкриваємо мулът. плеєр}

main.play.Play; {Відтворюємо звук }

End;

//Виводимо повідомлення

MessageDlg('Ви набрали'+IntToStr(score)+' балів зі 100', mtInformation,[mbOk], 0);

//Виходимо з програми

main.close;

end;

procedure Tmain.ExClick(Sender: TObject);

begin

information;//викликаємо підпрограму опрацювання результатів тесту

end;

  1. Забезпечте перетягування малюнка по формі, запрограмувавши обробку таких трьох подій об’єкта Image1: OnMouseDown (Якщо натиснути мишу), OnMouseMove (Якщо перетягувати мишу) и OnMouseUp (Якщо відпустити мишу). Для заповнення відповідних процедур скористайтесь вкладкою Events вікна інспектора об’єктів першого малюнку:

procedure TForml.ImlMouseDown(Sender: TObject;

Button: TMouseButton; Shift: TShiftState;

X, Y: Integer);

Begin

//тимчасова змінна Tag=1 якщо клавіша миші натиснена

Iml.Tag := 1;

//запам’ятовуємо координати натиснення миші в середині малюнка

shiftY := Y;

shiftX := X;

end;

procedure TForml.ImlMouseMove(Sender: TObject;

Shift: TshiftState; X,Y: Integer);

begin

if Iml.Tag = 1 then //якщо натиснена клавіша миші то

begin

//змінюємо координати малюнка

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

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

end;

end;

procedure TForml.ImlMouseUp(Sender : Tobject;Button : TMouseButton; Shift : TShiftState;

X, Y : Integer);

Begin

im1.Tag:=0;

//Якщо малюнок знаходиться повністю в першій фігурі то розміщуємо його по центру фігури//

if position1(im1,p1) then

begin

im1.Top:=Etop;

im1.Left:=Eleft1;

exit;

end;

//Якщо малюнок знаходиться повністю в другій фігурі то розміщуємо його по центру фігури//

if position1(im1,p2) then

begin

im1.Top:=Etop;

im1.Left:=Eleft2;

exit;

end;

//Якщо малюнок знаходиться повністю в третій фігурі то розміщуємо його по центру фігури//

if position1(im1,p3) then

begin

im1.Top:=Etop;

im1.Left:=Eleft3;

exit;

end;

//Якщо малюнок не розташований в жодній з фігур то повертаємо його на своє місце

im1.Top:=stop;

im1.Left:=left1;

end;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]