Unit1.pas
上传用户:wanyu_2000
上传日期:2021-02-21
资源大小:527k
文件大小:14k
源码类别:

DVD

开发平台:

Delphi

  1. {-----------------------------------------------------------------------------
  2.  Unit Name: Unit1
  3.  Author:    Dancemammal
  4.  Purpose:   Test Application to test functions
  5.  History:   First Code Release
  6. -----------------------------------------------------------------------------}
  7. unit Unit1;
  8. interface
  9. uses
  10.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  11.   Dialogs, Devices, SCSITypes, CovertFuncs, StdCtrls, ComCtrls, CDSizer,
  12.   Menus, ExtCtrls, ToolWin, scsidefs, BurnUnit, AudioImage, BinCueImage, FileImage, WaveUtils, ImgList;
  13. type
  14.   TBurnerForm = class(TForm)
  15.     Button1: TButton;
  16.     PageControl1: TPageControl;
  17.     TabSheet6: TTabSheet;
  18.     ReadTocListView: TListView;
  19.     ToolBar1: TToolBar;
  20.     ToolButton1: TToolButton;
  21.     ToolButton2: TToolButton;
  22.     ToolButton3: TToolButton;
  23.     ToolButton4: TToolButton;
  24.     ToolButton5: TToolButton;
  25.     Panel1: TPanel;
  26.     CDSize1: TCDSize;
  27.     MainMenu1: TMainMenu;
  28.     File1: TMenuItem;
  29.     Options1: TMenuItem;
  30.     Functions1: TMenuItem;
  31.     CDCapabilities1: TMenuItem;
  32.     ShowWriterParameters1: TMenuItem;
  33.     SaveCDToISOImage1: TMenuItem;
  34.     N1: TMenuItem;
  35.     BurnISOToCD1: TMenuItem;
  36.     BurnWaveFileToCD1: TMenuItem;
  37.     N2: TMenuItem;
  38.     FormatCD1: TMenuItem;
  39.     BlankCD1: TMenuItem;
  40.     StatusBar2: TStatusBar;
  41.     SaveDialog1: TSaveDialog;
  42.     OpenDialog1: TOpenDialog;
  43.     ViewTOC1: TMenuItem;
  44.     ImageList1: TImageList;
  45.     ToolButton7: TToolButton;
  46.     ISOFunctions1: TMenuItem;
  47.     CreateISO9660File1: TMenuItem;
  48.     ShowReadWriteSpeeds1: TMenuItem;
  49.     GetCDDVDStructure1: TMenuItem;
  50.     GetBufferBits1: TMenuItem;
  51.     N4: TMenuItem;
  52.     N5: TMenuItem;
  53.     ToolButton8: TToolButton;
  54.     ToolBar2: TToolBar;
  55.     DriveCombo: TComboBox;
  56.     Label1: TLabel;
  57.     ToolButton9: TToolButton;
  58.     AddTrackToTrackList1: TMenuItem;
  59.     ToolButton6: TToolButton;
  60.     TabSheet1: TTabSheet;
  61.     TrackListBox: TListBox;
  62.     CreateACUEFile1: TMenuItem;
  63.     GetCDTEXT1: TMenuItem;
  64.     GetCDDBIDFromAudioCD1: TMenuItem;
  65.     AudioFunctions1: TMenuItem;
  66.     AddTracktoList1: TMenuItem;
  67.     ArtistPanel: TPanel;
  68.     N3: TMenuItem;
  69.     BurnTracksToAudioCD1: TMenuItem;
  70.     ToolButton10: TToolButton;
  71.     ToolButton11: TToolButton;
  72.     N6: TMenuItem;
  73.     BurnDAOCueFile1: TMenuItem;
  74.     ToolButton12: TToolButton;
  75.     Procedure CDChanged(Sender: TObject);
  76.     Procedure CDRemoved(Sender: TObject);
  77.     procedure FormCreate(Sender: TObject);
  78.     procedure FormDestroy(Sender: TObject);
  79.     procedure CDCapabilities1Click(Sender: TObject);
  80.     procedure ShowWriterParameters1Click(Sender: TObject);
  81.     procedure SaveCDToISOImage1Click(Sender: TObject);
  82.     procedure ViewTOC1Click(Sender: TObject);
  83.     procedure BurnWaveFileToCD1Click(Sender: TObject);
  84.     procedure BurnISOToCD1Click(Sender: TObject);
  85.     procedure CDSize1OverBurn(Sender: TObject);
  86.     procedure BlankCD1Click(Sender: TObject);
  87.     procedure ShowReadWriteSpeeds1Click(Sender: TObject);
  88.     procedure GetCDDVDStructure1Click(Sender: TObject);
  89.     procedure GetBufferBits1Click(Sender: TObject);
  90.     procedure CreateACUEFile1Click(Sender: TObject);
  91.     procedure GetCDTEXT1Click(Sender: TObject);
  92.     procedure GetCDDBIDFromAudioCD1Click(Sender: TObject);
  93.     procedure AddTracktoList1Click(Sender: TObject);
  94.     procedure AddTrackToTrackList1Click(Sender: TObject);
  95.     procedure CreateISO9660File1Click(Sender: TObject);
  96.     procedure ToolButton11Click(Sender: TObject);
  97.     procedure ToolButton12Click(Sender: TObject);
  98.   private
  99.     { Private declarations }
  100.     Procedure ShowLastError;
  101.     Procedure RefreshTrackList;
  102.     function GetCapabilityText: string;  //to take out ???
  103.   public
  104.     { Public declarations }
  105.     CDBurnerList : TDevices;
  106.     AudioImage : TAudioImage;
  107.     CurrentISOFilename,CurrentCUEFilename :String;
  108.   end;
  109. var
  110.   BurnerForm: TBurnerForm;
  111. implementation
  112. uses ISOUnit, Unit2;
  113. {$R *.dfm}
  114. Procedure TBurnerForm.CDChanged(Sender: TObject);
  115. begin
  116.     ReadTocListView.Items.Clear;
  117.     TrackListBox.Items.Clear;
  118.     if CDBurnerList.Items[DriveCombo.ItemIndex].DiscInfo.IsAudioDisk = True then
  119.         GetCDDBIDFromAudioCD1Click(nil)
  120.           else
  121.             ViewTOC1Click(nil);
  122. end;
  123. Procedure TBurnerForm.CDRemoved(Sender: TObject);
  124. begin
  125.     ReadTocListView.Items.Clear;
  126.     TrackListBox.Items.Clear;
  127. end;
  128. procedure TBurnerForm.FormCreate(Sender: TObject);
  129. var
  130.      Index : Integer;
  131. begin
  132.     CDBurnerList := TDevices.create;
  133.    for Index := 0 to CDBurnerList.Count -1 do
  134.    begin
  135.        DriveCombo.Items.Add(CDBurnerList.Items[Index].DeviceInfo.VendorName);
  136.        CDBurnerList.Items[Index].OnDriveDiskInsert := CDChanged;
  137.        CDBurnerList.Items[Index].OnDriveDiskRemove := CDRemoved;
  138.    end;
  139.    DriveCombo.ItemIndex := 0;
  140.    AudioImage := TAudioImage.Create;
  141. end;
  142. procedure TBurnerForm.FormDestroy(Sender: TObject);
  143. begin
  144.    AudioImage.Free;
  145.    CDBurnerList.Free;
  146. end;
  147. procedure TBurnerForm.CDCapabilities1Click(Sender: TObject);
  148. var
  149.     CapString : String;
  150. begin
  151.     CapString := GetCapabilityText;
  152.     Showmessage(CapString);
  153. end;
  154. function TBurnerForm.GetCapabilityText: string;
  155. var
  156.   Strings: Tstringlist;
  157.   CDROMCap: TCdRomCapabilities;
  158. begin
  159.   CDROMCap := CDBurnerList.Items[DriveCombo.ItemIndex].Capability;
  160.   Strings := Tstringlist.create;
  161.   try
  162.     Strings.Add('-- Device Reading Methods --');
  163.     if cdcReadCDR in CDROMCap then
  164.       Strings.Add('    Read CD-R media');
  165.     if cdcReadCDRW in CDROMCap then
  166.       Strings.Add('    Read CD-RW media');
  167.     if cdcReadMethod2 in CDROMCap then
  168.       Strings.Add('    Read CD-R written using fixed packets');
  169.     if cdcReadDVD in CDROMCap then
  170.       Strings.Add('    Read DVD-ROM media');
  171.     if cdcReadDVDR in CDROMCap then
  172.       Strings.Add('    Read DVD-R / DVD-RW media');
  173.     if cdcReadDVDRAM in CDROMCap then
  174.       Strings.Add('    Read DVD-RAM media');
  175.     Strings.Add('-- Device Writing Methods --');
  176.     if cdcWriteCDR in CDROMCap then
  177.       Strings.Add('    Write CD-R media');
  178.     if cdcWriteCDRW in CDROMCap then
  179.       Strings.Add('    Write CD-RW media');
  180.     if cdcWriteDVDR in CDROMCap then
  181.       Strings.Add('    Write DVD-R / DVD-RW media');
  182.     if cdcWriteDVDRAM in CDROMCap then
  183.       Strings.Add('    Write DVD-RAM media');
  184.     Strings.Add('-- Device Writing Extended Functions --');
  185.     if cdcWriteTestMode in CDROMCap then
  186.       Strings.Add('    Write in test mode');
  187.     if cdcWriteBurnProof in CDROMCap then
  188.       Strings.Add('    Can Use Burn Proof');
  189.     Strings.Add('-- Device Extended Methods --');
  190.     if cdcReadMode2form1 in CDROMCap then
  191.       Strings.Add('        Capable to read Mode 2 Form 1 (CD-XA format)');
  192.     if cdcReadMode2form2 in CDROMCap then
  193.       Strings.Add('        Capable to read Mode 2 Form 2 (CD-XA format)');
  194.     if cdcReadMultisession in CDROMCap then
  195.       Strings.Add('        Capable to read PhotoCD format (multiple sessions)');
  196.     if cdcCddaBarCode in CDROMCap then
  197.       Strings.Add('       Capable to read CD disc bar code');
  198.     result := Strings.Text;
  199.   finally
  200.     Strings.free;
  201.   end;
  202. end;
  203. procedure TBurnerForm.ShowWriterParameters1Click(Sender: TObject);
  204. Var
  205.    TestString : String;
  206. begin
  207.   TestString := CDBurnerList.Items[DriveCombo.ItemIndex].DeviceBurnSettings;
  208.   Showmessage(TestString);
  209.   ShowLastError;
  210. end;
  211. Procedure TBurnerForm.ShowLastError;
  212. Begin
  213.       Statusbar2.Panels[0].Text := ScsiErrToString(CDBurnerList.Items[DriveCombo.ItemIndex].LastError);
  214.       Statusbar2.Refresh;
  215. End;
  216. procedure TBurnerForm.SaveCDToISOImage1Click(Sender: TObject);
  217. Var
  218.    Filename: String;
  219. Begin
  220.    If Savedialog1.Execute Then
  221.    Begin
  222.       Filename := Savedialog1.FileName;
  223.       BurnForm.CDBurner := CDBurnerList.Items[DriveCombo.ItemIndex];
  224.       BurnForm.Show;
  225.       BurnForm.DumpISOFile(FileName);
  226.    end;
  227.    ShowLastError;
  228. End;
  229. procedure TBurnerForm.ViewTOC1Click(Sender: TObject);
  230. Var TOC: TScsiTOC;
  231.    i: integer;
  232. Begin
  233.    TOC := CDBurnerList.Items[DriveCombo.ItemIndex].DeviceReader.TOC;
  234.    ReadTocListView.Items.Clear;
  235.    For i := 0 To TOC.TrackCount - 1 Do
  236.       With ReadTocListView.Items.Add Do
  237.       Begin
  238.          Caption := IntToStr(i);
  239.          Subitems.Add(IntToStr(TOC.Tracks[i].TrackNumber));
  240.          Subitems.Add(IntToStr(TOC.Tracks[i].AbsAddress));
  241.          Subitems.Add(SetToStr(TypeInfo(TScsiSubQinfoFlags), TOC.Tracks[i].Flags));
  242.       End;
  243. End;
  244. procedure TBurnerForm.BurnWaveFileToCD1Click(Sender: TObject);
  245. begin
  246.     BurnForm.CDBurner := CDBurnerList.Items[DriveCombo.ItemIndex];
  247.     BurnForm.Show;
  248.     BurnForm.StartAudioWrite(AudioImage);
  249. end;
  250. procedure TBurnerForm.BurnISOToCD1Click(Sender: TObject);
  251. Var
  252.    FileImage : TFileImage;
  253. begin
  254.  Opendialog1.FilterIndex := 1;
  255.  if opendialog1.Execute then
  256.  begin
  257.     CurrentISOFilename := opendialog1.filename;
  258.     FileImage := TFileImage.Create(CurrentISOFilename);
  259.     CDSize1.MemShaded := FileImage.ISOFileSize;
  260.     BurnForm.CDBurner := CDBurnerList.Items[DriveCombo.ItemIndex];
  261.     BurnForm.Show;
  262.     BurnForm.StartDataWrite(FileImage);
  263.     FileImage.Free;
  264.  end;
  265. end;
  266. procedure TBurnerForm.CDSize1OverBurn(Sender: TObject);
  267. begin
  268.    showmessage('Size of data is too big!');
  269. end;
  270. procedure TBurnerForm.BlankCD1Click(Sender: TObject);
  271. begin
  272.     BurnForm.CDBurner := CDBurnerList.Items[DriveCombo.ItemIndex];
  273.     BurnForm.Show;
  274.     BurnForm.BlankThisCD;
  275. end;
  276. procedure TBurnerForm.ShowReadWriteSpeeds1Click(Sender: TObject);
  277. var
  278.     CapString : String;
  279.     Strings : TStringlist;
  280.     Maxread,maxwrite,curread,curwrite : integer;
  281. begin
  282.    CDBurnerList.Items[DriveCombo.ItemIndex].GetSpeed(Maxread,MaxWrite,curread,curwrite);
  283.    Strings := Tstringlist.create;
  284.    Strings.Add('-- Device Reading Speeds --');
  285.    Strings.Add('       Current Read Speed = ' + inttostr(curread));
  286.    Strings.Add('       Maximum Read Speed = ' + inttostr(Maxread));
  287.    Strings.Add('-- Device Writing Speeds --');
  288.    Strings.Add('       Current Write Speed = ' + inttostr(curwrite));
  289.    Strings.Add('       Maximum Write Speed = ' + inttostr(MaxWrite));
  290.    CapString := Strings.Text;
  291.    Strings.Free;
  292.    Showmessage(CapString);
  293. end;
  294. procedure TBurnerForm.GetCDDVDStructure1Click(Sender: TObject);
  295. var
  296.     Desc : TScsiDVDLayerDescriptorInfo;
  297.     CapString : String;
  298. begin
  299.     Desc := CDBurnerList.Items[DriveCombo.ItemIndex].DiscInfo.DVDescriptor;
  300.     CapString := 'Disk Type     : '+ CDBurnerList.Items[DriveCombo.ItemIndex].DiscInfo.DiscType.DType + #10#13;
  301.     CapString := CapString + 'Capacity : '+ inttostr(CDBurnerList.Items[DriveCombo.ItemIndex].DiscInfo.Capacity) + #10#13;
  302.     CapString := CapString + 'Book Type     : '+Desc.BookType + #10#13;
  303.     CapString := CapString + 'Track Density : '+Desc.TrackDensity + #10#13;
  304.     CapString := CapString + 'Disc Size     : '+Desc.DiscSize + #10#13;
  305.     CapString := CapString + 'Maximum Rate  : '+Desc.MaximumRate + #10#13;
  306.     CapString := CapString + 'Linear Density: '+Desc.LinearDensity + #10#13;
  307.     CapString := CapString + 'Layer Type    : '+Desc.LayerType + #10#13;
  308.     Showmessage(CapString);
  309. end;
  310. procedure TBurnerForm.GetBufferBits1Click(Sender: TObject);
  311. begin
  312.   CDBurnerList.items[DriveCombo.ItemIndex].CDBufferSize;
  313. end;
  314. Procedure TBurnerForm.RefreshTrackList;
  315. Var
  316.  Index : Integer;
  317.  name,Disp : String;
  318.  AudioCDSize, DataSize : Integer;
  319.  AudioTrack : TCDTrackItem;
  320. begin
  321.   TrackListBox.Items.Clear;
  322.   AudioCDSize := 0;
  323.   For Index := 0 to AudioImage.TrackCount -1 do
  324.   begin
  325.     AudioTrack := AudioImage.Tracks[index];
  326.     name :=  AudioTrack.CDTrack.TrackName;
  327.     Disp :=  AudioTrack.DisplayName;
  328.     DataSize := AudioTrack.CDTrack.DataSize;
  329.     AudioCDSize := AudioCDSize + (DataSize div (1024*1024));
  330.     TrackListBox.Items.Add(name + ' : '+ Disp);
  331.   end;
  332.     CDSize1.MemShaded := AudioCDSize;
  333. end;
  334. procedure TBurnerForm.CreateACUEFile1Click(Sender: TObject);
  335. begin
  336.    CDBurnerList.items[DriveCombo.ItemIndex].DiscInfo.CreateCUEFile('C:Temp.bin','C:TempCUE.cue');
  337.    showmessage('Cue File created');
  338. end;
  339. procedure TBurnerForm.GetCDTEXT1Click(Sender: TObject);
  340. var
  341.  Text : String;
  342. begin
  343.   Text := CDBurnerList.items[DriveCombo.ItemIndex].DiscInfo.CDText.Artist + ' : '+ CDBurnerList.items[DriveCombo.ItemIndex].DiscInfo.CDText.Album + #10#13;
  344.   Text := Text + CDBurnerList.items[DriveCombo.ItemIndex].DiscInfo.CDText.MusicTracks.Text;
  345.   showmessage(Text);
  346. end;
  347. procedure TBurnerForm.GetCDDBIDFromAudioCD1Click(Sender: TObject);
  348. var
  349.   Header : String;
  350.   Index : Integer;
  351. begin
  352.    TrackListBox.Items.Clear;
  353.    Header := CDBurnerList.items[DriveCombo.ItemIndex].DiscInfo.CDDBInformation.Artist;
  354.    Header := Header + '  /  ' + CDBurnerList.items[DriveCombo.ItemIndex].DiscInfo.CDDBInformation.Album;
  355.    ArtistPanel.Caption := Header;
  356.    for index := 0 to CDBurnerList.items[DriveCombo.ItemIndex].DiscInfo.CDDBInformation.Tracks.Count -1 do
  357.       TrackListBox.Items.Add(inttostr(Index+1)+',  '+ CDBurnerList.items[DriveCombo.ItemIndex].DiscInfo.CDDBInformation.Tracks[index]);
  358. end;
  359. procedure TBurnerForm.AddTracktoList1Click(Sender: TObject);
  360. var
  361.      AudioTrack : TCDTrackItem;
  362.      TrackIndex : Integer;
  363. begin
  364.    Opendialog1.FilterIndex := 2;
  365.    if Opendialog1.Execute then
  366.    begin
  367.     for TrackIndex := 0 to Opendialog1.Files.Count -1 do
  368.     begin
  369.        AudioTrack := AudioImage.Add;
  370.        AudioTrack.LoadWaveFile(OpenDialog1.Files[TrackIndex]);
  371.        if not (AudioTrack.CDTrack.PCMFormat = Stereo16bit44100Hz) then
  372.            AudioTrack.CDTrack.ConvertToPCM(Stereo16bit44100Hz);
  373.        RefreshTrackList;
  374.     end;
  375.    end;
  376. end;
  377. procedure TBurnerForm.AddTrackToTrackList1Click(Sender: TObject);
  378. begin
  379.    showmessage('not yet coded');
  380. end;
  381. procedure TBurnerForm.CreateISO9660File1Click(Sender: TObject);
  382. begin
  383.   ISOForm.show;
  384. end;
  385. procedure TBurnerForm.ToolButton11Click(Sender: TObject);
  386. Var
  387.    BinImage : TBinCueImage;
  388. begin
  389.  Opendialog1.FilterIndex := 3;
  390.  if opendialog1.Execute then
  391.  begin
  392.     CurrentCUEFilename := opendialog1.filename;
  393.     BinImage := TBinCueImage.Create(CurrentCUEFilename);
  394.     BinImage.SetupBINCUEImage;
  395.     CDSize1.MemShaded := BinImage.BINFileSize;
  396.     BurnForm.CDBurner := CDBurnerList.Items[DriveCombo.ItemIndex];
  397.     BurnForm.Show;
  398.     BurnForm.StartCUEDataWrite(BinImage);
  399.     BinImage.Free;
  400.  end;
  401. end;
  402. procedure TBurnerForm.ToolButton12Click(Sender: TObject);
  403. begin
  404.   form2.show
  405. end;
  406. end.