当前在线:1位
今日来宾:位
来宾总数:位
|首页|公司简介|工业自控|网上招标|医用软件|标签耗材|服务&支持|访客留言|
文章:(总数3) 所在位置:首页>>技术交流
  • S7-200系列PLC与监控计算机通信实现的研究
  • Delphi编程(TreeView控件检索数据库)
  • CD、Combao刻录Delphi编程一例
    工控(总数0)
    仪表(总数10)
  • ZKWBK-H型无功功率自动补偿控制器
  • ZA19E-9ST三相交流多功能仪表
  • ZA19V-7ST三相交流电压表(轮显、按键选择显示)
  • ZA19A-7ST三相交流电流表(轮显、按键选择显示)
  • ZA19V-9S三相交流电压表(同时显示)
  • ZA19A-9S三相交流电流表(同时显示)
  • ZA19V-6D单相交流电压表
  • ZA19A-6D单相交流电流表
  • ZA19V-4D单相交流电压表
  • ZA19A-4D单相交流电流表
    CD、Combao刻录Delphi编程一例  
    通过CDwriter控件,支持CD、combao,如有需要该控件可与公司联系
    unit cdwriterUnit;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, OleCtrls, CDWriterXPLib_TLB, StdCtrls, ExtCtrls, ComCtrls,
      treeview2, ImgList, Buttons;

    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        chkUseBurnProof: TCheckBox;
        Panel2: TPanel;
        driver: TComboBox;
        speedcombo: TComboBox;
        Label1: TLabel;
        Label2: TLabel;
        Splitter1: TSplitter;
        CDWriter: TCDWriterXP;
        ImageList1: TImageList;
        lvwImageFiles: TListView;
        txtVolIdentifier: TLabeledEdit;
        chkUseJoliet: TCheckBox;
        chkCacheImage: TCheckBox;
        chkFinalizeDisc: TCheckBox;
        cmdWriteDisc: TBitBtn;
        Cancelcmd: TBitBtn;
        tvwDirectories: TTreeView;
        chkTestWrite: TCheckBox;
        sbrStatus: TStatusBar;
        prgTrackProgress: TProgressBar;
        prgTotalProgress: TProgressBar;
        Label3: TLabel;
        Label4: TLabel;
        lblReadBuffer: TLabel;
        lblDriveBuffer: TLabel;
        Button1: TButton;
        readeProgress: TProgressBar;
        driverProgress: TProgressBar;
        procedure loaddrivercombo(Sender: TObject);
        procedure loadwriteSpeed;
        procedure FormCreate(Sender: TObject);
        procedure driverChange(Sender: TObject);
        procedure enableform(blnenable: boolean);
        procedure CDWriterCachingTrack(ASender: TObject; Track: Smallint;
          BlocksToCache: Integer);
        procedure CDWriterCachingTrackStatus(ASender: TObject;
          BlocksCached: Integer);
        procedure CDWriterClosingDisc(Sender: TObject);
        procedure CDWriterClosingSession(Sender: TObject);
        procedure CDWriterClosingTrack(ASender: TObject; Track: Smallint);
        procedure CDWriterEnumISOItems(ASender: TObject; const ParentDestPath,
          ItemDestPath, ItemName, SourceFilePath: WideString;
          IsDirectory: WordBool; FileDate: TDateTime; FileSize: Integer);
        procedure resetimage;
        procedure RecalcImageSize;
        procedure CDWriterISOImageReset(Sender: TObject);
        procedure CDWriterISOItemAdded(ASender: TObject; const ParentDestPath,
          ItemDestPath, ItemName, SourceFilePath: WideString;
          IsDirectory: WordBool; FileDate: TDateTime; FileSize: Integer);
        procedure CDWriterPreparingToWrite(Sender: TObject);
        procedure CDWriterReadBufferStatus(ASender: TObject;
          ReadBufferUsed: Smallint);
        procedure CDWriterReadingFile(ASender: TObject; FileIndex: Integer);
        Function GetWriteErrorMessage(Asender:Tobject;writeError:eWriteError;DeviceError:eCDError):string;
        Function GetDeviceErrorMsg(DeviceError:eCDError):String;
        Function GetFileErrorMessage(FileError:eTrackFileError;FileName:String):string;
        procedure CDWriterTrackFileError(ASender: TObject; FileError: TOleEnum;
          const FileName: WideString);
        procedure CDWriterTrackWriteStart(ASender: TObject; Track: Smallint;
          BlocksToWrite: Integer);
        procedure CDWriterTrackWriteStatus(ASender: TObject; Track: Smallint;
          BlocksWritten: Integer; DeviceBufferUsed: Smallint);
        procedure CDWriterWriteError(ASender: TObject; WriteError,
          DeviceError: TOleEnum);
        procedure CDWriterWritingCancelled(Sender: TObject);
        procedure CDWriterWritingComplete(Sender: TObject);
        procedure CancelcmdClick(Sender: TObject);
        procedure cmdWriteDiscClick(Sender: TObject);
        procedure txtVolIdentifierChange(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure loadfilelist(strCurrentDestPath:string);
        procedure tvwDirectoriesChange(Sender: TObject; Node: TTreeNode);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}
    type Pconid=^Tconid;
         Tconid=record
         key:string;
    end;
    const sglSplitLimit:single=500;
    var mintCurrentDrive,mintTracksToWrite,mintCurrentTrackCaching:smallint;
        mlngTrackBlocksToWrite,mlngCurrentTrackBlocksToCache:integer;
        mblnUnloadOk:boolean;
        pnt:Ttreenode;
        conid:Pconid;
    procedure TForm1.loaddrivercombo(Sender: TObject);
    var i:integer;
    begin
    for i:=0 to cdwriter.GetDriveCount-1 do
    driver.Items.Add(cdwriter.GetDriveLetter(i)+':'+cdwriter.GetDriveName(i)+'  '+cdwriter.GetDriveVendor(i));
    if driver.Items.Count>0 then
    driver.ItemIndex:=0;
    driverchange(nil);
    enableform(true);
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    loaddrivercombo(nil);
    cdwriter.ClearISOImage;
    end;

    procedure Tform1.loadwriteSpeed;
    var maxspeed,intspeed:integer;
    begin
    maxspeed:=cdwriter.GetMaxWriteSpeed;
    speedcombo.Items.Clear;
    intspeed:=maxspeed;
    if maxspeed>0 then
    repeat
    speedcombo.Items.Add(inttostr(intspeed)+'X');
    if intspeed<=4 then
    intspeed:=intspeed div 2
    else
    intspeed:=intspeed-4;
    until intspeed<=0
    else
    speedcombo.Items.Add('default');
    if speedcombo.Items.Count>0 then
    speedcombo.ItemIndex:=0;
    end;
    procedure TForm1.driverChange(Sender: TObject);
    var i:integer;
    begin
    i:=driver.ItemIndex;
    if cdwriter.OpenDrive(i) then
     mintCurrentDrive:=i else
     mintCurrentDrive:=-1;
     loadwriteSpeed;
     if cdwriter.IsDriveBurnProofCapable then
     chkUseBurnProof.Enabled:=true
     else
     chkUseBurnProof.Enabled:=false;
     chkUseBurnProof.Checked:=true;
    end;

    procedure TForm1.enableform(blnenable:boolean);
    begin
         Driver.Enabled := blnEnable;
         Speedcombo.Enabled := blnEnable;
        lvwImageFiles.Enabled := blnEnable;
        tvwDirectories.Enabled := blnEnable;
        cmdWriteDisc.Enabled := blnEnable;
        chkCacheImage.Enabled := blnEnable;
        chkFinalizeDisc.Enabled := blnEnable;
        chkTestWrite.Enabled := blnEnable;
        chkUseJoliet.Enabled := blnEnable;
        txtVolIdentifier.Enabled := blnEnable;
         If (CDWriter.IsDriveBurnProofCapable) and (blnEnable) Then
            chkUseBurnProof.Enabled:=True
        Else
            chkUseBurnProof.Enabled:=False;
        Cancelcmd.enabled := (not blnEnable);
         mblnUnloadOk:= blnEnable;
        application.ProcessMessages;
    end;
    procedure TForm1.CDWriterCachingTrack(ASender: TObject; Track: Smallint;
      BlocksToCache: Integer);
    begin
    mlngCurrentTrackBlocksToCache:=BlocksToCache;
    mintCurrentTrackCaching:=Track;
    end;

    procedure TForm1.CDWriterCachingTrackStatus(ASender: TObject;
      BlocksCached: Integer);
    var intpercenttrackcached:int64;
    begin
    intpercenttrackcached:=round((blockscached/mlngCurrentTrackBlocksToCache)*100);
    sbrstatus.Panels[0].Text:='贮存轨道完成'+inttostr(intpercenttrackcached)+'%';
    end;

    procedure TForm1.CDWriterClosingDisc(Sender: TObject);
    begin
    sbrstatus.Panels[0].Text:='正在关封闭光盘......';
    end;

    procedure TForm1.CDWriterClosingSession(Sender: TObject);
    begin
    sbrstatus.Panels[0].Text:='正在关闭进程......';
    end;

    procedure TForm1.CDWriterClosingTrack(ASender: TObject; Track: Smallint);
    begin
    sbrstatus.Panels[0].Text:='正在关闭轨道'+inttostr(track);
    end;

    procedure TForm1.CDWriterEnumISOItems(ASender: TObject;
      const ParentDestPath, ItemDestPath, ItemName, SourceFilePath: WideString;
      IsDirectory: WordBool; FileDate: TDateTime; FileSize: Integer);
      var list:Tlistitem;
      begin
    if not isdirectory then
    begin
    list:=lvwimagefiles.Items.Add;
    list.Caption:=ItemName;
    list.ImageIndex:=3;
    list.SubItems.Add(inttostr(round(filesize/1000))+'KB');
    list.SubItems.Add(datetimetostr(filedate));
    application.ProcessMessages;
    end;
    end;
    procedure TForm1.resetimage;
    begin
    lvwImageFiles.Items.Clear;
    tvwDirectories.Items.Clear;
    cdwriter.VolumeIdentifier:='New Disc';
    new(conid);
    conid.key:='\';
    pnt:=tvwDirectories.Items.AddObject(nil,'New Disc',conid);
    pnt.ImageIndex:=0;
    pnt.SelectedIndex:=0;
    txtVolIdentifier.Text:=cdwriter.VolumeIdentifier;
    RecalcImageSize;
    end;
    procedure Tform1.RecalcImageSize;
    var lngSizeBlocks,lngSizeBytes:integer;
    begin
    lngSizeBlocks:=cdwriter.GetISOVolumeSizeBlocks;
    lngSizeBytes:=cdwriter.ConvertBlocksToBytes(lngSizeBlocks,wtpdata);
    sbrStatus.Panels[0].Text:='数据文件大小:'+Format('%8.2f',[lngSizeBytes/1000000])+'MB';
    sbrStatus.Panels[1].Text:='文件数:'+inttostr(cdwriter.GetISOFileCount);
    sbrStatus.Panels[2].Text:='目录数:'+inttostr(cdwriter.GetDriveCount);
    end;
    procedure TForm1.CDWriterISOImageReset(Sender: TObject);
    begin
    resetimage;
    end;

    procedure TForm1.CDWriterISOItemAdded(ASender: TObject;
      const ParentDestPath, ItemDestPath, ItemName, SourceFilePath: WideString;
      IsDirectory: WordBool; FileDate: TDateTime; FileSize: Integer);
    var pnnt,prnt:Ttreenode;
        i:integer;
    begin
    i:=0;
    if isdirectory then
    begin
    repeat
    prnt:=tvwdirectories.Items.Item[i];
    i:=i+1;
    until pconid(tvwdirectories.Items.Item[i-1].Data)^.key=parentdestpath;
    new(conid);
    conid.key:=ItemDestPath;
    pnnt:=tvwdirectories.Items.AddChildObject(prnt,ItemName,conid);
    pnnt.ImageIndex:=1;
    pnnt.SelectedIndex:=2;
    sbrstatus.Panels[0].Text:='添加......'+itemdestpath;
    end;
    application.ProcessMessages;
    end;

    procedure TForm1.CDWriterPreparingToWrite(Sender: TObject);
    begin
     mintTracksToWrite:=1;
     sbrstatus.Panels[0].Text:='正在准备刻录......';
     prgTotalProgress.Position := 0;
     prgTrackProgress.Position := 0;
     readeprogress.Position:=0;
     driverprogress.Position:=0;
     enableform(false);
    end;

    procedure TForm1.CDWriterReadBufferStatus(ASender: TObject;
      ReadBufferUsed: Smallint);
    begin
    readeprogress.Position:=readbufferused;
    {lblReadBuffer.Caption:='读缓存:'+inttostr(readbufferused)+'%';}
    end;

    procedure TForm1.CDWriterReadingFile(ASender: TObject; FileIndex: Integer);
    begin
    sbrStatus.Panels[1].Text:='读文件......'+inttostr(fileindex);
    end;
    Function Tform1.GetWriteErrorMessage(Asender:Tobject;writeError:eWriteError;DeviceError:eCDError):string;
    begin
    case WriteError of
    errDriveError:
    if DeviceError = cdUnknownError Then result:='发生未知错误,扩展错误号:'+cdwriter.GetErrorData else
       result:= GetDeviceErrorMsg(DeviceError);
    errFileError: result:='刻录过程中发生了文件错误!';
    errInvalidFormat:result:='轨道已被以无效的格式添加到刻录映像中...请重试!';
    errNoTracksQueued:result:='轨道已被添加到刻录映像中...请重试!';
    errReadBufferInitFailed:result:='读缓存未能初始化...请检查内存/磁盘资源。';
    errWriteBufferInitFailed:result:='写缓存未能初始化...请检查内存/磁盘资源。';
    else
    result:='未知的刻录错误。';
    end;
    end;
    Function Tform1.GetDeviceErrorMsg(DeviceError:eCDError):String;
    begin
    Case DeviceError of
        cdNoAdditionalErrorData:result:='No additional error data was reported' ;//1000
        cdIOTerminated: result:='Abnormal I/O Termination';//'1001
        cdLogicalUnitNotReady:result:='The drive is not ready';//'1002
        cdLogicalUnitCommFailed:result:='Communication with drive unit failed';// '1003
        cdDeviceTrackingError:result:='The drive could not track properly' ;//1004
        cdWriteGenericError:result:='Writing error of unknown origin' ;//  '1005
        cdWriteRecoveryNeeded:result:='Writing occurred, but recovery is needed';   //'1006
        cdWriteRecoveryFailed ://1007
            result:='Recovery attempt failed';
        cdWriteLossOfStreaming ://1008
            result:='A buffer under-run has occurred';
        cdReadUnrecovered ://1009
            result:='The disc could not be read';
        cdReadRetriesExhausted ://1010
            result:='The drive attempts at reading retries failed';
        cdReadErrorTooLong ://1011
            result:='The read timed out';
        cdReadLECUncorrectable ://1012
            result:='While reading, the LEC was not recovered';
        cdReadCIRCUnrecovered ://1013
            result:='The CIRC could not be validated';
        cdReadUPCEANFailed ://1014
            result:='Reading of the UPC failed';
        cdReadISRCFailed ://1015
            result:='Reading of the ISRC failed';
        cdReadLossOfStreaming ://1016
            result:='Streaming while reading was interrupted';
        cdPositioningError ://1017
            result:='Drive could not position media';
        cdParameterListLengthError ://1018
            result:='An incompatible parameter length was sent to the drive';
        cdSynchronousTransferError ://1019
            result:='A transfer error occurred to the drive';
        cdInvalidCommandCode ://1020
            result:='An invalid command was sent to the drive';
        cdLBAOutOfRange ://1021
            result:='Error trying to write past the end of the media';
        cdInvalidCDBField ://1022
            result:='Invalid command field';
        cdInvalidParamterListField ://1023
            result:='An incompatible parameter field was sent to the drive';
        cdParameterNotSupported ://1024
            result:='A command parameter is not supported';
        cdParamterValueInvalid ://1025
            result:='A command parameter had an invalid value';
        cdBusOrDeviceReset ://1026
            result:='The SCSI/ATAPI bus was reset and caused a write failure';
        cdParametersChanged ://1027
            result:='A command parameter changed while in progress';
        cdIncompatibleMedium ://1028
            result:='The disc is not compatible with the drive mode';
        cdReadUnknownMediumFormat ://1029
            result:='The drive does not recognize the format of the disc';
        cdReadIncompatibleMediumFormat ://1030
            result:='The disc format is not compatible with the drive';
        cdWriteUnknownMediumFormat ://1031
            result:='The disc is of an unknown format';
        cdIncompatibleWriteFormat ://1032
            result:='The drive cannot write because of an incompatible format';
        cdMediaNotPresent ://1033
            result:='A disc is not present';
        cdLogicalUnitFailure ://1034
            result:='The drive had an unknown failure';
        cdLogicalUnitTimedOut ://1035
            result:='The drive has timed out while completing a command';
        cdEraseFailed ://1036
            result:='The disc could not be erased';
        cdUnableToRecoverTOC ://1037
            result:='The Table of Contents is unrecoverable';
        cdEndOfUserAreaOnTrack ://1038
            result:='Error trying to write past the user area of the media';
        cdPacketDoesNotFit ://1039
            result:='Packet recording is not configured correctly';
        cdIllegalTrackMode ://1040
            result:='The current track mode is incompatible with the disc format';
        cdInvalidPacketSize ://1041
            result:='Packet recording has incorrect size';
        cdSessionFixationError ://1042
            result:='A generic session closing error occurred';
        cdSessionFixationErrorLeadIn ://1043
            result:='Error closing Lead-in area';
        cdSessionFixationErrorLeadOut ://1044
            result:='Error closing Lead-out area';
        cdSessionFixationIncompleteTrack ://1045
            result:='While closing, the track was never completed';
        cdEmptyPartialReservedTrack ://1046
            result:='Error attempting to write to a reserved track';
        cdPowerCalibrationFull ://1047
            result:='Power calibration area is full';
        cdPowerCalibrationAreaError ://1048
            result:='A flaw exists in the Power calibration area';
        cdPMAUpdateFailure ://1049
            result:='The disc is PMA could not be updated';
        cdPMAFull ://1050
            result:='The disc is PMA is full';
        cdUnknownError ://1051
            result:='Unknown error - use extended data for more information';
        cdNoError ://1052 - You will never see this most likely
            result:='No Error Reported';
        cdNoSeekComplete ://1053
            result:='A seek command was interrupted by another command'
        End;
    end;
    Function Tform1.GetFileErrorMessage(FileError:eTrackFileError;FileName:String):string;
    begin
    Case FileError of
        tfeFileBufferError:result:='Error buffering file:' + FileName;
        tfeFileOpenError:result:='Error opening file: '+ FileName;
        tfeFileReadError:result:='Error reading file:'+ FileName;
        tfeFileWriteError:result:='Error writing file: '+ FileName;
    Else
        result:='Unknown file error!:';
    end;
    end;
    procedure TForm1.CDWriterTrackFileError(ASender: TObject;
      FileError: TOleEnum; const FileName: WideString);
    var strerrormsg:string;
    begin
    strerrormsg:=getfileErrorMessage(fileerror,filename);
    sbrstatus.Panels[0].Text:=strerrormsg;
    end;
    procedure TForm1.CDWriterTrackWriteStart(ASender: TObject; Track: Smallint;
      BlocksToWrite: Integer);
    begin
    sbrstatus.Panels[0].Text:='正准备写轨道#:'+inttostr(track);
    prgTrackProgress.Position:=0;
    mlngTrackBlocksToWrite:=BlocksToWrite;
    end;

    procedure TForm1.CDWriterTrackWriteStatus(ASender: TObject;
      Track: Smallint; BlocksWritten: Integer; DeviceBufferUsed: Smallint);
    var intPercentTrackWritten,intPercentTotalTracksWritten:Integer;
    begin
       driverProgress.Position:=DeviceBufferUsed;
      {lblDriveBuffer.Caption:='刻录缓存:'+inttostr(DeviceBufferUsed)+'%';}
      intPercentTrackWritten:=round((BlocksWritten/mlngTrackBlocksToWrite) * 100);
      intPercentTotalTracksWritten:=round(((Track - 1 + (intPercentTrackWritten/100))/mintTracksToWrite)*100);
      prgTrackProgress.Position:=intPercentTrackWritten;
      prgTotalProgress.Position:=intPercentTotalTracksWritten;
      sbrStatus.Panels[0].Text:='正写轨道#:'+ inttostr(Track) +'... ';
    end;

    procedure TForm1.CDWriterWriteError(ASender: TObject; WriteError,
      DeviceError: TOleEnum);
    var strErrorMsg:String;
      begin
        strErrorMsg:=GetWriteErrorMessage(ASender, WriteError, DeviceError);
        application.MessageBox(pchar(strErrorMsg),'提示',0);
        EnableForm(true);
        sbrStatus.Panels[0].Text:='刻录发生错误..';
    end;

    procedure TForm1.CDWriterWritingCancelled(Sender: TObject);
    begin
     sbrStatus.Panels[0].Text:='取消刻录......';
    EnableForm(True);
    end;

    procedure TForm1.CDWriterWritingComplete(Sender: TObject);
    begin
        sbrStatus.Panels[0].Text:='刻录完毕!';
        EnableForm(True);
        readeprogress.Position:=0;
        driverprogress.Position:=0;
        application.MessageBox('刻录完成!','提示',0);
        If not CDWriter.TestWrite Then
         CDWriter.Eject;
        prgtotalprogress.Position:=0;
        prgtrackprogress.Position:=0;
    end;

    procedure TForm1.CancelcmdClick(Sender: TObject);
    begin
    cdwriter.CancelWrite;
    end;

    procedure TForm1.cmdWriteDiscClick(Sender: TObject);
    begin
    if mintCurrentDrive=-1 then
    begin
    application.MessageBox('未选择刻录机或刻录机不存在!','提示',0);
    exit;
    end;
    if not cdwriter.IsMediaLoaded then
    begin
    application.MessageBox('请插入可刻录CD盘!','提示',0);
    cdwriter.Eject;
    exit;
    end;
    with cdwriter do
    begin
    WriteType:=wtpdata;
    CloseDisc:=chkfinalizedisc.Checked;
    CloseSession:=true;
    Joliet:=chkusejoliet.Checked;
    VolumeIdentifier:=txtvolidentifier.Text;
    TestWrite:=chktestwrite.Checked;
    CacheDataTrack:=chkcacheimage.Checked;
    SetBurnProofMode(chkuseburnproof.Checked);
    end;
    if not cdwriter.WriteDisc then
    application.MessageBox('刻录盘刻录失败!','提示',0);
    end;

    procedure TForm1.txtVolIdentifierChange(Sender: TObject);
    begin
    pnt.Text:=txtvolidentifier.Text;
    end;
    procedure Tform1.loadfilelist(strCurrentDestPath:string);
    begin
    lvwimagefiles.Items.Clear;
    cdwriter.EnumerateISOItems(strCurrentDestPath);
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    cdwriter.ClearISOImage;
    cdwriter.CloneDirectoryToISO('\','H:\smallhis\*.*');
    RecalcImageSize;
    end;

    procedure TForm1.tvwDirectoriesChange(Sender: TObject; Node: TTreeNode);
    begin
    loadfilelist(pconid(node.Data)^.key);
    end;

    end.
     
    出处:公司自创 发表时间:2006-11-11 2:20:30  
      阅读次数:2111  
     
    版权所有:合肥能信电子有限责任公司
    地址:安徽.合肥市金寨路155号黄金广场3号楼202室
    Tel:3664416 7132717 7132719 Fax:0551-3664402
    E-Mail:Nengcom@mail.hf.ah.cn