Советы по Delphi

         

Заставьте приложение Delphi 2 `петь`


Тема: Как заставить приложение Delphi 2 `петь`.

(* Данный совет демонстрирует четыре различных способа как заставить ваше Delphi 2.0 приложение `петь`, т.е. загружать и проигрывать звуковой файл:

  1. Для проигрывания звукового файла используйте непосредственно функцию sndPlaySound().
  2. Считывайте звуковой файл в память, затем для его проигрывания используйте sndPlaySound()
  3. Используйте sndPlaySound для непосредственного проигрывания звуковых файлов, расположенных в файлах ресурсов, прилинкованных к вашему приложению.
  4. Считывайте звуковой файл, располагаемый в файле ресурса, прилинкованному к вашему приложению, в память, и затем для его проигрывания используйте sndPlaySound().
Для построения проекта вам понадобиться:
  1. Создайте звуковой файл с именем 'hello.wav' в каталоге проекта.
  2. Создайте текстовый файл с именем 'snddata.rc' в каталоге проекта.
  3. Добавьте следующую строку к файлу 'snddata.rc': HELLO WAVE hello.wav
  4. В dos-сессии перейдите в ваш каталог приложения и скомпилируйте .rc-файл, используя компилятор ресурсов Borland (brcc32.exe): введите путь к brcc32.exe и передайте 'snddata.rc' в качестве параметра.
Пример:

bin\brcc32 snddata.rc

Это создаст файл 'snddata.res', который Delphi слинкует с EXE-файлом вашего приложения.

Далее приведен необходимый вам код:



    unit PlaySnd1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) PlaySndFromFile: TButton; PlaySndFromMemory: TButton; PlaySndbyLoadRes: TButton; PlaySndFromRes: TButton; procedure PlaySndFromFileClick(Sender: TObject); procedure PlaySndFromMemoryClick(Sender: TObject); procedure PlaySndFromResClick(Sender: TObject); procedure PlaySndbyLoadResClick(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.DFM}
{$R snddata.res}
uses MMSystem;
procedure TForm1.PlaySndFromFileClick(Sender: TObject); begin sndPlaySound('hello.wav', SND_FILENAME or SND_SYNC); end;
procedure TForm1.PlaySndFromMemoryClick(Sender: TObject); var f: file; p: pointer; fs: integer; begin AssignFile(f, 'hello.wav'); Reset(f,1); fs := FileSize(f); GetMem(p, fs); BlockRead(f, p^, fs); CloseFile(f); sndPlaySound(p, SND_MEMORY or SND_SYNC); FreeMem(p, fs); end;
procedure TForm1.PlaySndFromResClick(Sender: TObject); begin PlaySound('HELLO', hInstance, SND_RESOURCE or SND_SYNC); end;
procedure TForm1.PlaySndbyLoadResClick(Sender: TObject); var h: THandle; p: pointer; begin h := FindResource(hInstance, 'HELLO', 'WAVE'); h := LoadResource(hInstance, h); p := LockResource(h); sndPlaySound(p, SND_MEMORY or SND_SYNC); UnLockResource(h); FreeResource(h); end;

end.

[001026]



Содержание раздела