Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2009, 22:47   #1
tisha077
 
Регистрация: 06.12.2009
Сообщений: 9
По умолчанию Задержка с помощью timer.Enabled

Нужно сделать цикл, в котором через определенное время (3-5сек) будут отображаться картинки, при нажатии на которые воспроизводятся соответствующие звук-файлы.
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
timer1.Enabled:=true;  //активируем таймер
i:=1;
if timer1.Enabled then
   begin
     for i:=1 to 5 do //цикл по 5-ти картинкам
       begin
        j:=(inttostr(i)+'.jpg');//формируем назв. картинки
        image1.Picture.LoadFromFile(j);//загружаем картинку
       {if image1.OnClick then} <---как тут описать "при нажатии"???
           begin
             s:=(inttostr(i)+'.wav');//формируем назв. звук-файла
             MCISendString(PChar('play ' + s),nil,0,0);//воспроизводим звук
             end;
      timer1.Enabled:=false; //дезактивируем таймер
     end;
   end;
end;
При запуске видно только последнюю картинку и воспроизводятся все звуки сразу... подскажите в чем проблема.

У нас принято оформлять код специальным тэгом - кнопочка "#".
И не нужно "истерить" множеством восклицательных знаков и огромными шрифтами.
Модератор

Последний раз редактировалось mihali4; 13.12.2009 в 23:30.
tisha077 вне форума Ответить с цитированием
Старый 13.12.2009, 23:34   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

В процедуре FormCreate еще не видна даже форма, поэтому там делают только подготовительные операции.
А если вы хотите организовать некие визуальные эффекты, используйте событие OnShow.
Но при таком использовании таймера, как у вас, ничего не изменится.
Нужно:
1. Отобразить первую картинку
2. Запустить таймер
3. Запустить проигрывание первого звука
4. По срабатыванию таймера дезактивировать его.
5. Выключить первый звук.
6. Повторить пп 1-5 для остальных картинок и звуков.

Последний раз редактировалось mihali4; 14.12.2009 в 00:51.
mihali4 вне форума Ответить с цитированием
Старый 13.12.2009, 23:37   #3
tisha077
 
Регистрация: 06.12.2009
Сообщений: 9
По умолчанию

"5. Повторить пп 1-5 для остальных картинок и звуков"

повторять так же через for или другим методом?
tisha077 вне форума Ответить с цитированием
Старый 13.12.2009, 23:50   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

For - это и есть цикл для перебора картинок и звуков.
Я описал алгоритм тех операций, которые находятся внутри цикла.
mihali4 вне форума Ответить с цитированием
Старый 14.12.2009, 00:01   #5
tisha077
 
Регистрация: 06.12.2009
Сообщений: 9
По умолчанию

у меня примерно 100 картинок. Если их все так прописывать то программа окажется неимоверно большой, если вы это имеете ввиду.
Сделал в той последовательности что вы говорили:
Код:
i:=1;
   begin
     for i:=1 to 2 do
      begin
        j:=(inttostr(i)+'.jpg');
        image1.Picture.LoadFromFile(j);
        timer1.Enabled:=true;
           begin
             s:=(inttostr(i)+'.wav');
             MCISendString(PChar('play ' + s),nil,0,0);
           end;
       timer1.Enabled:=false;
     end;
end;
ничего не изменилося

а какое правильное использование таймера? и как написать "При нажатии на изображение"?
просто я уже часа 2 копаюсь на форуме и не чего толком найти не могу.
tisha077 вне форума Ответить с цитированием
Старый 14.12.2009, 00:12   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
у меня примерно 100 картинок
Значит - for i:=1 to 100 do
Цитата:
какое правильное использование таймера?
Смотрим встроенный хэлп по таймеру.
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
end;
А в самой процедуре смены картинок вместо Timer1.Enabled := False; пишем:
Код:
while Timer1.Enabled do
Application.ProcessMessages;
Цитата:
как написать "При нажатии на изображение"?
Событие Image1Click...

Последний раз редактировалось mihali4; 14.12.2009 в 00:29.
mihali4 вне форума Ответить с цитированием
Старый 14.12.2009, 00:26   #7
tisha077
 
Регистрация: 06.12.2009
Сообщений: 9
По умолчанию

через событие Image1click не могу, так как у меня всего 1 image, а звуки разные к отображенным файлам изображениям.
Timer1Enebled:=False у меня есть, вот:
Код:
var
  Form1: TForm1;
  i:integer; s,j:string;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=1;
   begin
     for i:=1 to 2 do
      begin
        j:=(inttostr(i)+'.jpg');
        image1.Picture.LoadFromFile(j);
        while Timer1.Enabled do
        Application.ProcessMessages;
        if imege1click then
           begin
             s:=(inttostr(i)+'.wav');
             MCISendString(PChar('play ' + s),nil,0,0);
           end;
       timer1.Enabled:=false;
     end;
   end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  timer1.Enabled:=false;
end;
end.
tisha077 вне форума Ответить с цитированием
Старый 14.12.2009, 00:33   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Timer1Enebled:=False у меня есть
Читаем мой предыдущий пост.
Особенно - выделенное красным...
Цитата:
через событие Image1click не могу, так как у меня всего 1 image, а звуки разные
Но счетчик-то содержит номер картинки...

З.Ы. Ей-богу, впечатление такое, что вы уже голый и торопитесь поскорее убежать в баню...
Внимательнее нужно быть.
mihali4 вне форума Ответить с цитированием
Старый 14.12.2009, 00:42   #9
tisha077
 
Регистрация: 06.12.2009
Сообщений: 9
По умолчанию

простите я внимательный, может просто не правильно как-то выражаюсь...
я не тороплюсь, я на самом деле над прогой еще с обеда сижу.
если вы обратите внимание на код который я скинул, то заметите что я исправил в точности так как вы и говорили.
счетчик не содержит номер картинки, он формирует название картинки в переменную "j", а затем выводит в image1.
на данный момент главный вопрос это как сделать, чтобы картинки загружались из файла( image1.LoadFromFile(j) друг за другом в интервале 3-5 секунд.
tisha077 вне форума Ответить с цитированием
Старый 14.12.2009, 00:57   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
простите я внимательный, может просто не правильно как-то выражаюсь... я не тороплюсь, я на самом деле над прогой еще с обеда сижу.
Тогда еще раз пост номер 2 - я там тоже красным выделил...
Цитата:
как сделать, чтобы картинки загружались из файла( image1.LoadFromFile(j) друг за другом в интервале 3-5 секунд
Цикл с таймером мы вроде бы организовали (правда только на примере двух картинок - for i:=1 to 2 do у вас).
3 или 5 секунд - это вы задаете в Timer.Interval.
Сотню картинок (да хоть тысячу) перебрать - задайте массив с путями к картинкам. Тогда счетчик цикла будет однозначно определять элемент массива - картинку...
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фокус и св-во enabled megachuhancer Общие вопросы Delphi 4 09.09.2009 11:59
Перехват изменения Enabled kinderproc Компоненты Delphi 4 22.06.2009 15:21
SpeedButton, glyph, enabled ScorpioN_T Общие вопросы Delphi 8 27.04.2009 19:14
Изображение на кнопке в состоянии Enabled=False SibBear Общие вопросы Delphi 2 25.03.2009 17:14
Задержка JRcoker Общие вопросы Delphi 11 08.08.2008 00:38