Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Не воспроизводится WAVE из ресурсов, когда сразу..


Автор: navodri 15.4.2010, 19:56
Столкнулся со странной проблемой. Не воспроизводится WAVE из ресурсов, когда сразу за процедурой воспроизведения идет функция закрытия формы. Подскажите почему и как можно решить эту проблему?


Код

procedure PlayWaveFromResource(ResName, SectionName: String);
var
 FindHandle, ResHandle: THandle;
 ResPtr: Pointer;
begin
 FindHandle := FindResource(HInstance, PChar(ResName), PChar(SectionName));
  if FindHandle <> 0 then begin
   ResHandle := LoadResource(HInstance, FindHandle);
    if ResHandle <> 0 then begin ResPtr := LockResource(ResHandle);
    if ResPtr <> nil then sndPlaySound(PChar(ResPtr), SND_ASYNC or SND_MEMORY);
   UnlockResource(ResHandle);
  end;
  FreeResource(FindHandle);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //При нажатии на кнопку проигрываем WAVE из ресурсов (что не выходит когда ниже идет функция закрытия формы)...
  PlayWaveFromResource('CLICK', 'WAVE');

  //...и закрываем форму
   Form1.Close;
end;

Автор: former 15.4.2010, 21:05
navodri, надо дождаться, пока воспроизведение закончится.

Автор: navodri 15.4.2010, 21:33
понятно. а как это сделать?

Добавлено через 5 минут и 57 секунд
Решение оказалось простым:

procedure PlayWaveFromResource(ResName, SectionName: String);
var
 FindHandle, ResHandle: THandle;
 ResPtr: Pointer;
begin
 FindHandle := FindResource(HInstance, PChar(ResName), PChar(SectionName));
  if FindHandle <> 0 then begin
   ResHandle := LoadResource(HInstance, FindHandle);
    if ResHandle <> 0 then begin ResPtr := LockResource(ResHandle);
    if ResPtr <> nil then sndPlaySound(PChar(ResPtr), SND_SYNC or SND_MEMORY);
   UnlockResource(ResHandle);
  end;
  FreeResource(FindHandle);
 end;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)