Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 669

/ вопрос решён /

Здравствуйте!
Уважаемые эксперты.
Подскажите, пожалуйста, как мне проиграть файлы wav. из ресурса EXE файла?
Нужно проиграть в потоке. Вот у меня, что-то получилось. Как проиграть второй файл?
И как остановить поток? А то файл играет, пока не закончится.
Я замаялась!

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls,MMSystem;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. Button2: TButton;
  13. procedure Button1Click(Sender: TObject);
  14. private
  15. { Private declarations }
  16. public
  17. { Public declarations }
  18. end;
  19.  
  20. TSpeakThread = class(TThread)
  21. protected
  22.  
  23. procedure Execute; override;
  24. end;
  25. var
  26. Form1: TForm1;
  27.  
  28. implementation
  29.  
  30. {$R *.dfm}
  31. {$R SOUND.RES }
  32.  
  33. { TSpeakThread }
  34.  
  35. procedure TSpeakThread.Execute;
  36. var
  37. Resources: TStringList;
  38. begin
  39. inherited;
  40. FreeOnTerminate:= True;
  41. Resources:= TStringList.Create();
  42. try
  43. PlaySound('SOUND', hInstance, SND_RESOURCE or SND_SYNC);
  44. finally
  45. Resources.Free();
  46. end;
  47. end;
  48.  
  49. procedure TForm1.Button1Click(Sender: TObject);
  50. begin
  51. TSpeakThread.Create(false);
  52. end;
  53.  
  54. end.
  55.  


Ket Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задала: Ket (статус: Посетитель)
Вопрос отправлен: 19 января 2010, 17:30
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Очень смахивает на мой код из модуля uThreads.pas, ну да ладно.
Зачем тебе там Resources: TStringList? Тупо скопипастила, не зная, что за код? Айяйяй...
Чтобы остановить воспроизведение, нужно вызывать PlaySound(nil, hInstance, 0) из другого потока (можно из главного).
Чтобы проиграть следующий файл, нужно создать аналогичный поток с другим именем ресурса.
Если требуется проигрывать несколько звуков из ресурсов один за одним, воспользуйся классом TThreadQueue из моего модуля uThreads.pas, либо циклом по списку в одном потоке (это как раз Resources: TStringList).

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 19 января 2010, 18:43
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 19 января 2010, 19:18; участников в обсуждении: 2.
Ket

Ket (статус: Посетитель), 19 января 2010, 19:08 [#1]:

А можно примерчик?
min@y™

min@y™ (статус: Доктор наук), 19 января 2010, 19:18 [#2]:

Цитата (Ket):

А можно примерчик?

Зачем? Я и так всё разжевал.
Готового примера у меня нет.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

4 июля 2012, 13:12: Статус вопроса изменён на решённый (изменил модератор DNK)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:30
Выполнено за 0.02 сек.