Код следующий:
- Код: Выделить всё
..........
uses
LCLIntf, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MMSystem, FuncUnit, Ap, ComCtrls, LResources, Math,
Windows;
TFTuner = class(TForm)
.........
private
hwi:HWAVEIN;
wh: TWaveHdr;
WaveData1:PChar;
stop:boolean;
n:integer;
procedure MMProcOpen(var Message: TMessage); message MM_WIM_OPEN;
procedure MMProcClose(var Message: TMessage); message MM_WIM_CLOSE;
procedure MMProcData(var Message: TMessage); message MM_WIM_DATA;
procedure
{ Private declarations }
public;
{ Public declarations }
end;
var
FTuner: TFTuner;
implementation
procedure TFTuner.MMProcOpen(var Message: TMessage);
begin
ShowMessage('Opened');
end;
procedure TFTuner.MMProcClose(var Message: TMessage);
begin
GlobalFree(integer(WaveData1));
end;
procedure TFTuner.MMProcData(var Message: TMessage);
begin
/// что то делаем
end;
// Запись инициируется по нажатию кнопки
procedure TFTuner.Button1Click(Sender: TObject);
var Device:integer;
Result:MMResult;
begin
// выбор устройства из списка. список генерится правильно
Device:=cbDev.ItemIndex;
wfx:=GetWaveFormat(Device);
if waveInOpen(@hwi,Device,@wfx,self.Handle, 0,CALLBACK_WINDOW)<>0 then exit;
if Result<>MMSYSERR_NOERROR then Exit;
wh.lpData:=WaveData1;
wh.dwBufferLength:=WaveDataLength*sizeof(byte);
wh.dwUser:=0;
wh.dwFlags:=0;
Result:=waveInPrepareHeader(hwi,@wh,sizeof(TWaveHdr));
if Result<>MMSYSERR_NOERROR then Exit;
Result:=waveInAddBuffer(hwi,@wh,sizeof(TWaveHdr));
if Result<>MMSYSERR_NOERROR then Exit;
Result:=waveInStart(hwi);
if Result<>MMSYSERR_NOERROR then Exit;
end;
................