⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cd.pas

📁 Java实例入门
💻 PAS
📖 第 1 页 / 共 3 页
字号:
procedure TCDForm.TrackOnceClick(Sender: TObject);
begin
	if TrackOnce.Down=False	then
		TrackOnce.Down:=True;
	TrackRepeat.Down:=False;
	CDOnce.Down:=False;
	CDRepeat.Down:=False;
	PlayMode:=plTrackOnce;
end;

procedure TCDForm.TrackRepeatClick(Sender: TObject);
begin
	if TrackRepeat.Down=False then
		TrackRepeat.Down:=True;
	TrackOnce.Down:=False;
	CDOnce.Down:=False;
	CDRepeat.Down:=False;
	PlayMode:=plTrackRepeat;
end;

procedure TCDForm.CDOnceClick(Sender: TObject);
begin
	if CDOnce.Down=False then
		CDOnce.Down:=True;
	TrackRepeat.Down:=False;
	TrackOnce.Down:=False;
	CDRepeat.Down:=False;
	PlayMode:=plCDOnce;
end;

procedure TCDForm.CDRepeatClick(Sender: TObject);
begin
	if CDRepeat.Down=False then
		CDRepeat.Down:=True;
	TrackRepeat.Down:=False;
	TrackOnce.Down:=False;
	CDOnce.Down:=False;
	PlayMode:=plCDRepeat;
end;

{ Really crap routine - but hell who cares? }
function ZeroFill(size: integer;s: string): string;
var
	a,b: integer;
	t: string;
begin
	SetLength(t,size);
	for a:=1 to size do
		t[a]:='0';
	b:=size;
	for a:=length(s) downto 1 do
	begin
		t[b]:=s[a];
		dec(b);
	end;
	ZeroFill:=t;
end;

{ Convert the milliseconds time to minutes:seconds string }
Function MilliToTime(t: LongInt): string;
var
	a: integer;
	s: string;
begin
	a:=t div 1000;
	s:=ZeroFill(2,inttostr(a div 60)) +
		':' + ZeroFill(2,inttostr(a mod 60));
	MilliToTime:=s;
end;

procedure TCDForm.TimerMethod1Click(Sender: TObject);
begin
	if TimerMethod1.Down=False	then
		TimerMethod1.Down:=True;
		TimerMethod2.Down:=False;
		TimerMethod3.Down:=False;
		TimerMethod4.Down:=False;
		TimerMode:=tmTrackGone;
end;

procedure TCDForm.TimerMethod2Click(Sender: TObject);
begin
	if TimerMethod2.Down=False	then
		TimerMethod2.Down:=True;
		TimerMethod1.Down:=False;
		TimerMethod3.Down:=False;
		TimerMethod4.Down:=False;
		TimerMode:=tmTrackLeft;
end;

procedure TCDForm.TimerMethod3Click(Sender: TObject);
begin
	if TimerMethod3.Down=False	then
		TimerMethod3.Down:=True;
		TimerMethod2.Down:=False;
		TimerMethod1.Down:=False;
		TimerMethod4.Down:=False;
		TimerMode:=tmCDGone;
end;

procedure TCDForm.TimerMethod4Click(Sender: TObject);
begin
	if TimerMethod4.Down=False	then
		TimerMethod4.Down:=True;
		TimerMethod2.Down:=False;
		TimerMethod3.Down:=False;
		TimerMethod1.Down:=False;
		TimerMode:=tmCDLeft;
end;

procedure TCDForm.Button1Click(Sender: TObject);
var
	key: string;
begin
{ Edit current CD Details }
	key:=CDKey; { Save the current CD Key }
	EditCD(CurrentCD,key);
end;

{ Edit a CDDetail Record }
procedure EditCD(var EdCD: CDDetail;key: string);
begin
	GlobalCD:=EdCD;
	CDEditForm.ShowModal;
	if CDEditForm.modalresult=mrOk then
	begin
		WriteCD(key,GlobalCD);
		if CDKey=Key then
		begin
			EdCD:=GlobalCD;
			CDDetails(EdCD,1);
			UpdateTrackList(CurrentTrack);
		end;
	end;
end;

{ Create a Key to Identify a CD (Hopefully uniquely) }
procedure MakeCDKey(var ACD: CDDetail;var key: string);
var
	s: string[5];
	lp: integer;
	d: integer;
begin
	key:='';
	if ACD.TotalTracks>60 then d:=60
	else d:=ACD.TotalTracks;
	for lp:=1 to d do
	begin
		s:=MilliToTime(ACD.TrackDetail[lp].TrackLength);
		key:=key+s[1]+s[2]+s[4]+s[5];
	end;
end;

{ Write CD }
procedure WriteCD(key: string;var ACD: CDDetail);
var
	CDIniFile: TIniFile;
	TrackNum: integer;
begin
	CDIniFile:=TIniFile.Create('CDDATA.INI');
	CDIniFile.WriteString(key,'Title',ACD.CDTitle);
	CDIniFile.WriteString(key,'Artist',ACD.Artist);
	for TrackNum:=1 to ACD.TotalTracks do
		CDIniFile.WriteString(key,'Track'+inttostr(TrackNum),
			ACD.TrackDetail[TrackNum].TrackTitle);
	CDIniFile.Free;
end;

{ Find CD in CDDATA.INI file }
procedure FindCD(key: string;var ACD: CDDetail);
var
	CDIniFile: TIniFile;
	TrackNum: integer;
begin
	CDIniFile:=TIniFile.Create('CDDATA.INI');
	ACD.CDTitle:=CDIniFile.ReadString(key,'Title','');
	ACD.Artist:=CDIniFile.ReadString(key,'Artist','');
	for TrackNum:=1 to ACD.TotalTracks do
		ACD.TrackDetail[TrackNum].TrackTitle:=CDIniFile.ReadString(key,
			'Track'+inttostr(TrackNum),'');
	CDIniFile.Free;
end;

{ Setup CD Details on Form }
procedure CDDetails(var ACD: CDDetail;s: integer);
var
	lp: integer;
begin
	if s<>0 then
	begin
		if ACD.CDTitle='' then CDForm.TitleOfCd.Caption:='Untitled'
		else CDForm.TitleOfCD.Caption:=ACD.CDTitle;
		if ACD.Artist='' then CDForm.Artist.Caption:=''
		else CDForm.Artist.Caption:=ACD.Artist;
		CDForm.Tracklist.Clear;
		for lp:=1 to ACD.TotalTracks do
			CDForm.TrackList.Items.ADD(inttostr(lp)+
				': (' + MilliToTime(ACD.TrackDetail[lp].TrackLength) +
				') '+ACD.TrackDetail[lp].TrackTitle);
	end else
	begin
		CDForm.TitleOfCD.Caption:='';
		CDForm.Artist.Caption:='';
		CDForm.TrackList.Clear;
		CDform.TrackList.Text:='';
	end;
end;

procedure TCDForm.PowerButtonClick(Sender: TObject);
begin
	CDForm.Close;
end;

procedure TCDForm.FormDblClick(Sender: TObject);
begin
   DispType:=DispType xor 1;
   Setdisp(DispType);
end;

procedure TCDForm.OnTopButtonClick(Sender: TObject);
begin
	if OnTopButton.Down=True then
	begin
		SetWindowPos(Application.handle,hWnd_TopMost,
			0, 0, 0, 0,SWP_NOMOVE+SWP_NOSIZE);
		OnTop:=1;
	end else
	begin
		OnTop:=0;
		SetWindowPos(Application.handle,hWnd_NoTopMost,
			0, 0, 0, 0,SWP_NOMOVE+SWP_NOSIZE);
	end;
end;

procedure TCDForm.FormActivate(Sender: TObject);
begin
	case RealCmdShow of
	  SW_SHOWMINIMIZED,
	  SW_MINIMIZE,
	  SW_SHOWMINNOACTIVE:
		Application.Minimize;
	end;
end;

procedure TCDForm.MMPlayClick(Sender: TObject);
begin
	if PlayerStatus=CDPaused then
	begin
		PlayerStatus:=CDPlaying;
		SetButtons(CDPlaying);
		CDForm.CDPanel.Play;
	end
	else begin
		PlayerStatus:=CDPlaying;
		SetButtons(CDPlaying);
		GotoTrack(CurrentTrack);
		EndPosition:=GetEndPosition(CurrentTrack);
		UpdateTrackList(CurrentTrack);
		CDForm.CDPanel.Play;
	end;
end;

procedure TCDForm.MMPauseClick(Sender: TObject);
begin
	PlayerStatus:=CDPaused;
	SetButtons(CDPaused);
	CDForm.CDPanel.Pause;
end;

procedure TCDForm.MMStopClick(Sender: TObject);
begin
	PlayerStatus:=CDStopped;
	SetButtons(CDStopped);
	CDForm.CDPanel.Stop;
end;

procedure TCDForm.MMForwardClick(Sender: TObject);
begin
	SetButtons(PlayerStatus);
	MMForward.Down:=False;
end;

procedure TCDForm.MMRewindClick(Sender: TObject);
begin
	SetButtons(PlayerStatus);
	MMRewind.Down:=False;
end;

procedure TCDForm.MMNextClick(Sender: TObject);
begin
	if CurrentTrack<CurrentCD.TotalTracks then
	begin
		inc(CurrentTrack);
		UpdateTrackList(CurrentTrack);
		GotoTrack(CurrentTrack);
		EndPosition:=GetEndPosition(CurrentTrack);
		CDForm.CDPanel.Play;
	end;
	SetButtons(CDPlaying);
end;

procedure TCDForm.MMPrevClick(Sender: TObject);
begin
{ If more than 5 seconds into the track then goto beginning
	of the track }
	if TrackPosition>5000 then
	begin
		GotoTrack(CurrentTrack);
		CDForm.CDPanel.Play;
	end {Otherwise go back one track }
	else if CurrentTrack>1 then
	begin
		dec(CurrentTrack);
		UpdateTrackList(CurrentTrack);
		GotoTrack(CurrentTrack);
		EndPosition:=GetEndPosition(CurrentTrack);
		CDForm.CDPanel.Play;
	end;
	SetButtons(CDPlaying);
end;

procedure TCDForm.MMEjectClick(Sender: TObject);
var
  SetParm      : TMCI_SET_Parms;
begin
	if PlayerStatus=cdNotReady then
	begin
		try
			SetParm.dwCallback  := Handle;
			SetParm.dwAudio     := MCI_SET_AUDIO_ALL;
			mciSendCommand(CDPanel.DeviceID,
			   mci_SET,(mci_Notify or MCI_SET_DOOR_CLOSED),
			   Longint(@SetParm) );
		except
		end;
	end else
	begin
		PlayerStatus:=cdNotReady;
		DisablePlayer;
		CDForm.CDPanel.Eject;
		MMEject.Down:=False;
	end;
end;

procedure TCDForm.MMForwardMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
	MoveTimer.Interval:=500;
	MoveTimer.Enabled:=True;
	downcnt:=300;
	stepgap:=1000;
	Ticker.Enabled:=False;
	CDPanel.Pause;
end;

procedure TCDForm.MMForwardMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
	MoveTimer.Enabled:=False;
	if PlayerStatus=CDPlaying then CDForm.CDPanel.Resume;
	Ticker.Enabled:=True;
end;

procedure TCDForm.MoveTimerTimer(Sender: TObject);
var
	pos: longint;
begin
	pos:=CDPanel.Position;
	if downcnt>20 then
	begin
		downcnt:=downcnt-20;
		MoveTimer.Interval:=downcnt;
	end	else
	begin
		if (stepgap>0) and (stepgap<3000) then stepgap:=stepgap+1000
		else if (stepgap<0) and (stepgap>-3000) then stepgap:=stepgap-1000;
	end;
	pos:=pos+StepGap;
	if (stepgap<0) and (pos<=0) then
	begin
		pos:=0;
	end else if (stepgap>0) and (pos>=CurrentCD.CDLength) then
	begin
		pos:=CurrentCD.CDLength;
	end;
	CDPanel.Position:=pos;
	GetPositions;
	PositionDisplay;
end;

procedure TCDForm.MMRewindMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
	MoveTimer.Interval:=500;
	MoveTimer.Enabled:=True;
	downcnt:=300;
	stepgap:=-1000;
	Ticker.Enabled:=False;
	CDPanel.Pause;
end;

procedure TCDForm.MMRewindMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
	MoveTimer.Enabled:=False;
	if PlayerStatus=CDPlaying then CDForm.CDPanel.Resume;
	Ticker.Enabled:=True;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -