| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- {========================================================================}
- {= (c) 1995-99 SwiftSoft Ronald Dittrich =}
- {========================================================================}
- {= All Rights Reserved =}
- {========================================================================}
- {= D 01099 Dresden = Fax.: +49(0)351-8037944 =}
- {= Loewenstr.7a = info@swiftsoft.de =}
- {========================================================================}
- {= Actual versions on http://www.swiftsoft.de/index.html =}
- {========================================================================}
- {= This code is for reference purposes only and may not be copied or =}
- {= distributed in any format electronic or otherwise except one copy =}
- {= for backup purposes. =}
- {= =}
- {= No Delphi Component Kit or Component individually or in a collection=}
- {= subclassed or otherwise from the code in this unit, or associated =}
- {= .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed =}
- {= without express permission from SwiftSoft. =}
- {= =}
- {= For more licence informations please refer to the associated =}
- {= HelpFile. =}
- {========================================================================}
- {= $Date: 22.03.99 - 15:52:01 $ =}
- {========================================================================}
- unit CDCopy;
- interface
- uses
- Windows,
- Messages,
- SysUtils,
- Classes,
- Graphics,
- Controls,
- Forms,
- Dialogs,
- StdCtrls,
- Buttons,
- ComCtrls,
- ExtCtrls,
- MMSystem,
- MMUtils,
- MMObj,
- MMHTimer,
- MMTrigg,
- MMGauge,
- MMCDRead,
- MMCDATyp, ImgList;
- type
- TCopyDlg = class(TForm)
- Label1: TLabel;
- lblTime1: TLabel;
- Timer: TMMHiTimer;
- Meter1: TMMGauge;
- Bevel1: TBevel;
- Label2: TLabel;
- lblPercent1: TLabel;
- lblRemaining1: TLabel;
- Label3: TLabel;
- lblTime2: TLabel;
- Meter2: TMMGauge;
- Label6: TLabel;
- lblPercent2: TLabel;
- Label8: TLabel;
- lblRemaining2: TLabel;
- Label10: TLabel;
- lblSpeed1: TLabel;
- Label11: TLabel;
- Label4: TLabel;
- lblSpeed2: TLabel;
- Label9: TLabel;
- btnAbort: TButton;
- Panel1: TPanel;
- Messages: TMemo;
- Timer2: TTimer;
- ImageList: TImageList;
- procedure btnAbortClick(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure TimerTimer(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- procedure Timer2Timer(Sender: TObject);
- public
- StartTime : Longint;
- FullTime : Longint;
- LastTime : Longint;
- CurTrack : Longint;
- Writing : Boolean;
- CurImage : integer;
- UserAbort : Boolean;
- ErrorAbort: Boolean;
- FileName : TFileName;
- procedure StartCopy;
- function FindNextTrack: integer;
- procedure CopyTrack(Track: integer);
- procedure UpdateStatus;
- procedure StartTimer;
- procedure StopTimer;
- end;
- var
- CopyDlg: TCopyDlg;
- implementation
- uses CDMain;
- {$R *.DFM}
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.FormCreate(Sender: TObject);
- begin
- ImageList.ResourceLoad(rtBitmap, 'BM_DRIVE1', clNone);
- ImageList.ResourceLoad(rtBitmap, 'BM_DRIVE2', clNone);
- ImageList.ResourceLoad(rtBitmap, 'BM_CD1', clNone);
- ImageList.ResourceLoad(rtBitmap, 'BM_CD2', clNone);
- ImageList.ResourceLoad(rtBitmap, 'BM_CD3', clNone);
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.FormShow(Sender: TObject);
- var
- maxFrames,i: integer;
- begin
- with CDMainForm, CDMainForm.CDReader do
- begin
- Messages.Clear;
- btnAbort.Caption := 'Cancel';
- UserAbort := False;
- ErrorAbort:= False;
- CurImage := 0;
- Fulltime := 0;
- maxFrames := 0;
- CurTrack := -1;
- for i := 0 to ListBox.Items.Count-1 do
- begin
- if ListBox.Selected[i] and (Tracks[i].TrackType = ttAudio) then
- begin
- inc(MaxFrames,MSFToFrame(Tracks[i].Length));
- if (CurTrack = -1) then CurTrack := i;
- end;
- end;
- if (CurTrack = -1) then
- begin
- CurTrack := Max(ListBox.ItemIndex,0);
- maxFrames := MSFToFrame(Tracks[CurTrack].Length);
- end;
- Meter2.MinValue := 0;
- Meter2.MaxValue := maxFrames;
- Meter2.Progress := 0;
- end;
- Timer2.Enabled := True;
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- begin
- if (trOpen in CDMainForm.Trigger.State) then
- begin
- UserAbort := True;
- CDMainForm.Trigger.Stop;
- CanClose := False;
- end
- else CanClose := True;
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.StartCopy;
- begin
- CopyTrack(CurTrack);
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.CopyTrack(Track: integer);
- var
- i: integer;
- S: string;
- begin
- with CDMainForm, CDMainForm.CDReader do
- begin
- SetCopyParams(Tracks[Track].Start, Tracks[Track].Length);
- Meter1.MinValue := 0;
- Meter1.MaxValue := MSFToFrame(Tracks[Track].Length);
- Meter1.Progress := 0;
- CurTrack := Track;
- i := Pos('.',FileName);
- if (i > 0) then
- S := System.Copy(FileName,1,i-1)
- else
- S := FileName;
- S := S + Format('%.2d.wav',[CurTrack+1]);
- DeleteFile(S);
- CDMainForm.WaveFile.Wave.FileName := S;
- try
- Trigger.Start;
- except
- Trigger.Stop;
- raise;
- end;
- Messages.Lines.Add(Format('Copying Track %02d',[CurTrack+1]));
- end;
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- function TCopyDlg.FindNextTrack: integer;
- var
- i: integer;
- begin
- with CDMainForm, CDMainForm.CDReader do
- begin
- Result := CurTrack;
- for i := 0 to ListBox.Items.Count-1 do
- begin
- if ListBox.Selected[i] and (Tracks[i].TrackType = ttAudio) then
- begin
- if (i > Result) then
- begin
- Result := i;
- break;
- end;
- end;
- end;
- end;
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.btnAbortClick(Sender: TObject);
- begin
- if (trOpen in CDMainForm.Trigger.State) then
- begin
- UserAbort := True;
- CDMainForm.Trigger.Stop;
- end
- else Close;
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.UpdateStatus;
- var
- CurTime,CurFrame: Longint;
- begin
- with CDMainForm do
- begin
- CurTime := TimeGetTime-StartTime;
- FullTime := FullTime+(CurTime-LastTime);
- LastTime := CurTime;
- CurFrame := CDReader.CurrentFrame-CDReader.StartFrame;
- Meter2.Progress := Meter2.Progress + (CurFrame-Meter1.Progress);
- Meter1.Progress := CurFrame;
- lblPercent1.Caption := Format('%.1f %%',[(Meter1.Progress*100)/Meter1.MaxValue]);
- lblSpeed1.Caption := Format('%.1f X',[((Meter1.Progress*FRAME_SIZE)/(CurTime/1000))/SINGLE_SPEED]);
- lblTime1.Caption := TimeToString(CurTime);
- lblRemaining1.Caption:= TimeToString(MulDiv(CurTime,Meter1.MaxValue,Meter1.Progress)-CurTime);
- lblPercent2.Caption := Format('%.1f %%',[(Meter2.Progress*100)/Meter2.MaxValue]);
- lblSpeed2.Caption := Format('%.1f X',[((Meter2.Progress*FRAME_SIZE)/(FullTime/1000))/SINGLE_SPEED]);
- lblTime2.Caption := TimeToString(FullTime);
- lblRemaining2.Caption:= TimeToString(MulDiv(FullTime,Meter2.MaxValue,Meter2.Progress)-FullTime);
- end;
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.StartTimer;
- begin
- StartTime := TimeGetTime;
- LastTime := 0;
- Timer.Enabled := True;
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.StopTimer;
- begin
- Timer.Enabled := False;
- if not ErrorAbort then
- begin
- Meter1.Progress := Meter1.MaxValue;
- Meter1.Update;
- lblPercent1.Caption := '100.0 %';
- lblPercent1.Update;
- lblRemaining1.Caption := TimeToString(0);
- lblRemaining1.Update;
- end;
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.TimerTimer(Sender: TObject);
- begin
- if Timer.Enabled then UpdateStatus;
- end;
- {-- TCopyDlg ------------------------------------------------------------------}
- procedure TCopyDlg.Timer2Timer(Sender: TObject);
- begin
- Timer2.Enabled := False;
- StartCopy;
- end;
- end.
|