Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.02.2011, 18:40
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию Выбор картинки по играющему звуку (совсем нуб)

Необходимо сделать тест, показывает десять картинок и в это время играет один звук и нужно выбрать нужную картинку ( например картинка машины и рев двигателя). Звуков соответсвенно тоже 10, для каждой картинки, что бы все картинку угадать. Загрузил картинки в массив и на форму. Звуки так, же.
pic:array[1..10] of TImage;
snd:array[1..10] of integer; //Беру по порядку пути к файлам mp3 и проигрываю.

Вот как мне сравнивать картинку и звук, что бы сделать тест. Необходимо получаеться вводить дополнительные индефикаторы, но я не разберусь(

Последний раз редактировалось kriv0y, 26.02.2011 в 18:43.
Ответить с цитированием
  #2  
Старый 26.02.2011, 19:23
iGeTT iGeTT вне форума
Прохожий
 
Регистрация: 23.12.2010
Адрес: Moscow
Сообщения: 38
Версия Delphi: 7 Lite
Репутация: 10
По умолчанию

Ну например в начале проигрывания звука заносишь номер звука в переменную i, а при нажатии сравниваешь
Код:
if Select = i then showmessage('Yeah, it's right') else showmessage('Try again')
__________________
"Никаких сиплюсплюс тут у меня!" (с)
Ответить с цитированием
  #3  
Старый 26.02.2011, 20:29
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

да, это я могу, но как мне индификатор повесить на картинки image1.Picture; ведь они у меня в таком массиве p:array[1..10] of TImage; А я не могу сравнивать число или строку с картинкой которую беру из массива.
Ответить с цитированием
  #4  
Старый 26.02.2011, 20:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от kriv0y
да, это я могу, но как мне индификатор повесить на картинки image1.Picture; ведь они у меня в таком массиве p:array[1..10] of TImage; А я не могу сравнивать число или строку с картинкой которую беру из массива.


У тебя есть индекс. Надо что бы по порядку зауки и картинки в массивах совпадали. Когда выводишь (загружаешь) картинки, то их индексы можно положить в свойство Tag (оно для того и сделано). Соответсвенно, выбираешь случайным образом индекс, по нему проигрываешь звук, далее юзер кликает по картинке и ты просто сравниваешь значение индекса с записанным в Tag значением. Совпадает - угадал.
Ответить с цитированием
  #5  
Старый 26.02.2011, 22:26
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
У тебя есть индекс.

Спасибо! Это весьма исчерпывающий ответ для меня. Не могли бы вы помочь еще в процедуре проигрывания звука, у меня пока по клику на картинке отображает сообщение Yes/No хотелось бы что бы проигрывался звук вместо сообщения. Но как вставить не пойму, ведь в цикле может быть только одна процедура, а для проигрывания и откртия файла их три, примерно таких

mediaplayer1.FileName:=file.mp3;
MediaPlayer1.Open;
MediaPlayer1.Play;

А это моё событие при клике на картинку


Код:
procedure TForm7.Image12Click(Sender: TObject);
begin
if image12.Tag=y then  ShowMessage('Yes')

else  ShowMessage('NO ');
Ответить с цитированием
  #6  
Старый 26.02.2011, 22:43
iGeTT iGeTT вне форума
Прохожий
 
Регистрация: 23.12.2010
Адрес: Moscow
Сообщения: 38
Версия Delphi: 7 Lite
Репутация: 10
По умолчанию

begin end...
__________________
"Никаких сиплюсплюс тут у меня!" (с)
Ответить с цитированием
  #7  
Старый 26.02.2011, 22:58
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

естественно я непонял*(
Ответить с цитированием
  #8  
Старый 26.02.2011, 23:21
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
ведь в цикле может быть только одна процедура
В IF-е или цикле может быть одна команда. Однако если поставить операторные скобки (begin ... end то можно будет делать много.
Код:
if image12.Tag=y then
begin
 Mediaplayer1.FileName:='file.mp3';
 MediaPlayer1.Open;
 MediaPlayer1.Play;
end
else
begin
 Mediaplayer1.FileName:='file2.mp3';
 MediaPlayer1.Open;
 MediaPlayer1.Play;
end;

А вообще тут несколько не обязательно:
Код:
if image12.Tag=y then
 Mediaplayer1.FileName:='file.mp3'
else
 Mediaplayer1.FileName:='file2.mp3';

MediaPlayer1.Open;
MediaPlayer1.Play;
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #9  
Старый 27.02.2011, 00:28
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Действительно! Спасибо! Я тут всех уже конечно достал тупостью, но вот самый последний вопрос, в котором я проигрывааю звуки из массива S в котором по порядку пути к файлам с:\1.mp3 , с:\1.mp3 с задержкой таймера. Но когда доходи до последнего звука, то показывает ошибку




Цитата:

procedure TForm7.Timer1Timer(Sender: TObject);

begin

if b>10 then MediaPlayer1.stop;

Inc (b);

mediaplayer1.FileName:=S[b];
MediaPlayer1.Open;
MediaPlayer1.Play;

end;



Ответить с цитированием
  #10  
Старый 27.02.2011, 01:22
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
procedure TForm7.Timer1Timer(Sender: TObject);
begin
if b>10 then MediaPlayer1.stop;
Inc (b);
mediaplayer1.FileName:=S[b];
MediaPlayer1.Open;
MediaPlayer1.Play;
end;
Пройдемся пошагово. Предположим, у нас уже конец и b=10.
b>10? нет.
inc(b) - b=11
mediaplayer1.FileName:=S[11];

Я так понимаю, что в массиве S всего 10 элементов?

если я верно все понял, то надо наоборот:
Код:
procedure TForm7.Timer1Timer(Sender: TObject);
begin
 inc(b);
 if b>10 then 
 begin
  MediaPlayer1.stop;
  Timer1.Enabled:=false;   // отключаем таймер чтобы больше не вызывалась эта процедура
  b:=0;                  // на всякий случай (т.е. на будущее)
 end
 else
 begin
  mediaplayer1.FileName:=S[b];
  MediaPlayer1.Open;
  MediaPlayer1.Play;
 end;
end;
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 27.02.2011 в 01:25.
Ответить с цитированием
  #11  
Старый 27.02.2011, 20:10
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Спасибо всем большое!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:29.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025