unit UnitFmtDialog;interfaceuses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, MMUtils, MMWave,
  MMREGS, MMPCMSup, MMObj, MMDSPObj, MMAudio; //MMSystem,type
  TFmtDialog = class(TForm)
    GrpBitLength: TRadioGroup;
    GrpSampleRate: TRadioGroup;
    btOK: TButton;
    btCancel: TButton;
    Channel: TRadioGroup;
    MMWaveFile1: TMMWaveFile;
    procedure FormShow(Sender: TObject);
    procedure ChannelClick(Sender: TObject);
    procedure GrpBitLengthClick(Sender: TObject);
    procedure GrpSampleRateClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormHide(Sender: TObject);
  public
    Wave: TMMWave;
    PWaveFormat: PWaveFormatEx;
    Channels: Byte;
    BitLength: Byte;
    SampleRate: Longint;
  end;var
  FmtDialog: TFmtDialog;implementation{$R *.DFM}{-- TForm2 ---------------------------------------------------------------}
procedure TFmtDialog.FormCreate(Sender: TObject);
begin
   PWaveFormat := GlobalAllocMem(sizeOf(tWaveFormatEx));
end;{-- TForm2 ---------------------------------------------------------------}
procedure TFmtDialog.FormDestroy(Sender: TObject);
begin
   GlobalFreeMem(pointer(PWaveFormat));
end;{-- TForm2 ---------------------------------------------------------------}
procedure TFmtDialog.FormShow(Sender: TObject);
begin
     if (Wave <> Nil) then
     begin
          Channels := Ord(Wave.Mode)+1;
          BitLength := Wave.BitLength;
          SampleRate := Wave.SampleRate;
     end
     else
     begin
          Channels := 1;
          BitLength := 8;
          SampleRate := 11025;
     end;     Channel.ItemIndex := Channels-1;
     GrpBitLength.ItemIndex := (BitLength div 8)-1;
     case Cardinal(SampleRate) of
          8000..10099: GrpSampleRate.ItemIndex := 0;
         11000..21999: GrpSampleRate.ItemIndex := 1;
         22000..31999: GrpSampleRate.ItemIndex := 2;
         32000..39999: GrpSampleRate.ItemIndex := 3;
         40000..44150: GrpSampleRate.ItemIndex := 4;
                  else GrpSampleRate.ItemIndex := 5;
     end;
end;{-- TForm2 ---------------------------------------------------------------}
procedure TFmtDialog.ChannelClick(Sender: TObject);
begin
     Channels := Channel.ItemIndex+1;
end;{-- TForm2 ---------------------------------------------------------------}
procedure TFmtDialog.GrpBitLengthClick(Sender: TObject);
begin
     BitLength := (GrpBitLength.ItemIndex+1) * 8;
end;{-- TForm2 ---------------------------------------------------------------}
procedure TFmtDialog.GrpSampleRateClick(Sender: TObject);
begin
     case GrpSampleRate.ItemIndex of
          0: SampleRate := 8000;
          1: SampleRate := 11025;
          2: SampleRate := 22050;
          3: SampleRate := 32000;
          4: SampleRate := 44100;
          5: SampleRate := 48000;
     end;
end;{-- TForm2 ---------------------------------------------------------------}
procedure TFmtDialog.FormHide(Sender: TObject);
begin
   { build the destination format header }
   pcmBuildWaveHeader(PWaveFormat, BitLength, Channels, SampleRate);
end;end.

解决方案 »

  1.   


    PWaveFormat: PWaveFormatEx;这一行
      

  2.   

    public
        Wave: TMMWave;
        PWaveFormat: PWaveFormatEx;//这行提示错误,
        Channels: Byte;
        BitLength: Byte;
        SampleRate: Longint;
      end;下面提示
    [Error] UnitFmtDialog.pas(26): Undeclared identifier: 'PWaveFormatEx'
    [Error] UnitFmtDialog.pas(42): Undeclared identifier: 'tWaveFormatEx'
    [Warning] UnitFmtDialog.pas(48): Unsafe type 'Pointer'
    [Fatal Error] UnitMain.pas(143): Could not compile used unit 'UnitFmtDialog.pas'
      

  3.   

    先用type语句把
    tWaveFormatEx
    PWaveFormatEx
    定义