- •Лабораторна робота № 7.
- •Виконання роботи
- •Двічі клацніть на піктограмі першого таймера і запрограмуйте миготіння повідомлення «Обов’язково натисніть кнопку «Далі» після розміщення малюнків!!»:
- •Введіть опис глобальних змінних модуля:
- •Введіть опис глобальних констант програми:
- •Запрограмуйте процедури: створення форми FormCreate, Вставки в неї малюнків SetPicture, виведення інформації про результати тестів Information і кнопку Ex:
- •Запрограмуйте другий таймер, який забезпечує індикацію часу від 100% до 0%, зворотно пропорційно числу в SpinEditl. Кнопка «Далі» повинна бути активною, якщо всі малюнки розставлені.
- •Аналогічно запрограмуйте перетаскування двох інших малюнків.
- •Створіть ще одну функцію Position1, для перевірки, чи знаходиться малюнок на даній фігурі, чи ні.
- •Запрограмуйте кнопку «Далі» для перевірки правильності розташування малюнків і для формування наступних малюнків
- •Збережіть програму в своїй папці.
- •Створіть ехе-файл програми.
- •Закрийте Delphi, запустіть створену програму.
- •Продемонструйте створену програму викладачеві.
- •Оформіть звіт по лабораторній роботі: тема і мета роботи; послідовність виконання роботи, завданняння роздані на лабораторній роботі.
Двічі клацніть на піктограмі першого таймера і запрограмуйте миготіння повідомлення «Обов’язково натисніть кнопку «Далі» після розміщення малюнків!!»:
procedure TForm1.Timer1.Timer(Sender: Tobject);
begin
label4.Visible:=not label4.Visible;
end;
Введіть опис глобальних змінних модуля:
var
main: Tmain;
shiftX,shiftY:integer;
i,n,score:integer;
left1,left2,left3,Stop:integer;
dir:string;
Введіть опис глобальних констант програми:
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));
Запрограмуйте процедури: створення форми 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;
Забезпечте перетягування малюнка по формі, запрограмувавши обробку таких трьох подій об’єкта 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.gel.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.
