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

📄 cd.pas

📁 Java实例入门
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit Cd;

interface

uses
	SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
	Forms, Dialogs, StdCtrls, ExtCtrls, MPlayer, Buttons,MMsystem, Cdedit, Ledcntrl,
  IniFiles, ComCtrls ;

type
	TCDForm = class(TForm)
		CDPanel: TMediaPlayer;
		Ticker: TTimer;
		TrackList: TComboBox;
		TimerMethod1: TSpeedButton;
		TimerMethod2: TSpeedButton;
		Label1: TLabel;
		TrackOnce: TSpeedButton;
		TrackRepeat: TSpeedButton;
		TimerMethod3: TSpeedButton;
		TimerMethod4: TSpeedButton;
		CDOnce: TSpeedButton;
		CDRepeat: TSpeedButton;
		Label2: TLabel;
		PowerButton: TSpeedButton;
    Bevel2: TBevel;
	Bevel3: TBevel;
	Bevel4: TBevel;
    Bevel5: TBevel;
	Button1: TButton;
	Bevel6: TBevel;
	 Shape1: TShape;
	TitleOfCD: TLabel;
	Artist: TLabel;
	Bevel7: TBevel;
	BackDisp: TShape;
	Bevel1: TBevel;
	OnTopButton: TSpeedButton;
	MMPlay: TSpeedButton;
	MMPause: TSpeedButton;
    MMStop: TSpeedButton;
    MMForward: TSpeedButton;
    MMRewind: TSpeedButton;
    MMNext: TSpeedButton;
    MMPrev: TSpeedButton;
    MMEject: TSpeedButton;
	MoveTimer: TTimer;
    Volume: TTrackBar;
	procedure TickerTimer(Sender: TObject);
	procedure FormCreate(Sender: TObject);
	procedure TrackListClick(Sender: TObject);
	procedure TrackOnceClick(Sender: TObject);
	procedure TrackRepeatClick(Sender: TObject);
	procedure CDOnceClick(Sender: TObject);
	procedure CDRepeatClick(Sender: TObject);
	procedure TimerMethod1Click(Sender: TObject);
	procedure TimerMethod2Click(Sender: TObject);
	procedure TimerMethod3Click(Sender: TObject);
	procedure TimerMethod4Click(Sender: TObject);
	procedure Button1Click(Sender: TObject);
	procedure PowerButtonClick(Sender: TObject);
	procedure FormClose(Sender: TObject; var Action: TCloseAction);
	procedure FormDblClick(Sender: TObject);
	procedure OnTopButtonClick(Sender: TObject);
	procedure VolumeChange(Sender: TObject);
	procedure FormActivate(Sender: TObject);
    procedure MMPlayClick(Sender: TObject);
	procedure MMPauseClick(Sender: TObject);
	procedure MMStopClick(Sender: TObject);
	procedure MMForwardClick(Sender: TObject);
	procedure MMRewindClick(Sender: TObject);
	procedure MMNextClick(Sender: TObject);
	procedure MMPrevClick(Sender: TObject);
	procedure MMEjectClick(Sender: TObject);
    procedure MMForwardMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MMForwardMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MoveTimerTimer(Sender: TObject);
    procedure MMRewindMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure MMRewindMouseUp(Sender: TObject; Button: TMouseButton;
	  Shift: TShiftState; X, Y: Integer);
	private
		procedure WMSizing(var mess: TMessage); message WM_Sizing;
	{ Private declarations }
	public
	{ Public declarations }
	RealCmdShow: word;
end;

const
	MAXTRACKS=99;
const
	CDDEVICE=2;

const
  AllowedInstances = 0;

type TrackDetail=record
	TrackTitle: string[80];
	TrackStart: longint;
	TrackLength: longint
end;

type CDDetail=record
	CDTitle: string[80];
	Artist: string[80];
	TotalTracks: integer;
	CDLength: longint;
	TrackDetail: array[1..MAXTRACKS] of TrackDetail
end;

type
	CDStates=(cdOffline,cdPlaying,cdStopped,cdNotReady,cdPaused);
	TimerModes=(tmTrackGone,tmTrackLeft,tmCDGone,tmCDLeft);
	PlayModes=(plTrackOnce,plTrackRepeat,plCDOnce,plCDRepeat);

var
	CDForm: TCDForm;
	PlayerStatus: CDStates;
	LastPlayerStatus: CDStates;
	CurrentTrack,LoopTrack: integer;
	TrackPosition,CDPosition: longint;
	CurRemaining,CDRemaining: longint;
	TimerMode: TimerModes;
	PlayMode: PlayModes;
	EndPosition: longint;
	CurrentCD: CDDetail;
	Disptype: integer;
	OnTop: Integer;
	CDKey: string;
	GlobalCD: CDDetail;
	MyAppName, MyClassName: array[0..255] of Char;
	NumFound: Integer;
	LastFound, MyPopup: HWND;
	downcnt: integer;
	stepgap: integer;

procedure SetButtons(CDMode: CDStates);
procedure SetTimerTrack(tim:integer;tck: integer);
procedure SetupNewCD;
procedure TurnOnLEDs;
procedure TurnOffLEDs;
procedure EnablePlayer;
procedure DisablePlayer;
procedure GotoTrack(tracknum: integer);
procedure GotoPosition(pos: longint);
procedure GetPositions;
procedure PositionDisplay;
function GetPlayerStatus: CDStates;
procedure CDOfflineTimer;
procedure CDPlayingTimer;
procedure CDNotReadyTimer;
procedure CDStoppedTimer;
procedure CDPausedTimer;
function MilliToTime(t: LongInt): string;
procedure FindCD(key: string;var ACD: CDDetail);
procedure MakeCDKey(var ACD: CDDetail;var key: string);
procedure EditCD(var EdCD: CDDetail;key: string);
function ZeroFill(size: integer;s: string): string;
procedure WriteCD(key: string;var ACD: CDDetail);
procedure CDDetails(var ACD: CDDetail;s: integer);
function GetEndPosition(tracknum: integer): longint;
procedure SetTimer(t: CDStates);
procedure UpdateTracklist(l: integer);
procedure SetVolumeScroller;
procedure SetFormCaption(s: string);
procedure preparefornewCD;

implementation
{$R *.DFM}

procedure TCDForm.WMSizing(var mess: TMessage);
type
	rp=^TRect;
var
	r:rp;
	w,h: integer;
begin
	r:=rp(mess.LParam);
	h:=r.bottom-r.top;
	w:=236;
	case h of
		0..73: begin h:=73; w:=140; end;
		74..100: h:=100;
		101..137: h:=137;
		138..167: h:=167;
	else
		h:=208;
		w:=264;
	end;
	// Left and right sizing not to do anything
	if mess.WParam in [WMSZ_TOP,WMSZ_TOPLEFT,WMSZ_TOPRIGHT] then
		r.top:=r.bottom-h;
	if mess.WParam in [WMSZ_BOTTOM,WMSZ_BOTTOMLEFT,WMSZ_BOTTOMRIGHT] then
		r.bottom:=r.top+h;
	if mess.WParam in [{WMSZ_LEFT,}WMSZ_BOTTOMLEFT,WMSZ_TOPLEFT] then
		r.left:=r.right-w;
	if mess.WParam in [{WMSZ_RIGHT,}WMSZ_BOTTOMRIGHT,WMSZ_BOTTOMLEFT,
		WMSZ_TOP,WMSZ_BOTTOM] then
		r.right:=r.left+w;
	if mess.WParam in [WMSZ_RIGHT] then
		r.right:=r.left+w;
	if mess.WParam in [WMSZ_LEFT] then
		r.left:=r.right-w;
	mess.Result:=1;
end;

{ Enable/Disable CDPlayer Buttons }
procedure SetButtons(CDMode: CDStates);
var
	n,m: TButtonSet;
begin
	n:=CDForm.CDPanel.EnabledButtons;
 {	case CDMode of
		CDOffline: m:=[btEject];
		CDPlaying: m:=[btPause,btStop,btNext,btPrev,btStep,btBack,btEject];
		CDStopped: m:=[btPlay,btEject];
		CDNotReady:m:=[btEject];
		CDPaused: m:=[btPause,btStop,btEject];
	end; }
	with CDForm do
		case CDMode of
			CDOffLine, CDNotReady:	begin
				MMPlay.Enabled:=False;	MMPause.Enabled:=False;
				MMStop.Enabled:=False;	MMForward.Enabled:=False;
				MMRewind.Enabled:=False;	MMNext.Enabled:=False;
				MMPrev.Enabled:=False;	MMEject.Enabled:=True;
			end;
			CDPlaying: begin
				MMPlay.Enabled:=True; MMPlay.Down:=True;
				MMPause.Enabled:=True;
				MMStop.Enabled:=True; 	MMForward.Enabled:=True;
				MMRewind.Enabled:=True;	MMNext.Enabled:=True;
				MMPrev.Enabled:=True;  	MMEject.Enabled:=True;
			end;
			CDStopped: begin
				MMPlay.Enabled:=True;	MMPause.Enabled:=False;
				MMStop.Enabled:=False; 	MMForward.Enabled:=False;
				MMRewind.Enabled:=False;	MMNext.Enabled:=False;
				MMPrev.Enabled:=False;  	MMEject.Enabled:=True;
			end;
			CDPaused: begin
				MMPlay.Enabled:=True;	MMPause.Enabled:=True;
				MMPause.Down:=True;
				MMStop.Enabled:=True; 	MMForward.Enabled:=True;
				MMRewind.Enabled:=True;	MMNext.Enabled:=False;
				MMPrev.Enabled:=False;  	MMEject.Enabled:=True;
			end;
		end;
{ Only alter the buttons if the new setting is different -
  this stops flickering }
	if n<>m then CDForm.CDPanel.EnabledButtons:=m;
end;

procedure SetTimerTrack(tim:integer;tck: integer);
var
	minutes,seconds: integer;
	m,s,t: string[2];
begin
	t:=zerofill(2,inttostr(tck));
       //	CDForm.Track.Enabled:=True;
       //	CDForm.Track.Display:=t;

	minutes:=tim div 60;
	seconds:=tim -(minutes*60);
	m:=zerofill(2,inttostr(minutes));
	s:=zerofill(2,inttostr(seconds));
    //	CDForm.TimeDisp.Display:=m + '.' + s ;
{	Application.Title:='CD Player:'+t +
		' ' + m+ '.' + s; }
{	Application.Title:='CD Player:'+t +
		' ' + m+ '.' + s + ' ' + Copy(CDForm.TrackList.Text, Pos(')',
		CDForm.TrackList.Text) + 2, 100) ; // Greg Lief 1/2/97 }
	Application.Title:='CD Player:'+t+' ' + m+ '.' + s+' '+
		CurrentCD.TrackDetail[CurrentTrack].TrackTitle;  // Slightly better way
end;

procedure SetupNewCD;
var
	lp: integer;
begin
{ Get the total number of tracks for the new CD, And update the display }
	CDForm.CDPanel.Timeformat:=tfMilliseconds;
	CurrentCD.TotalTracks:=CDForm.CDPanel.Tracks;
{ Get the Total length of the CD}
	CurrentCD.CDLength:=CDForm.CDPanel.Length;
{ Clear the Track List, then store track information }
	for lp:=1 to CurrentCD.TotalTracks do
	begin
		CurrentCD.TrackDetail[lp].TrackStart:=CDForm.CDPanel.TrackPosition[lp];
		CurrentCD.TrackDetail[lp].TrackLength:=CDForm.CDPanel.TrackLength[lp];
		CurrentCD.TrackDetail[lp].TrackTitle:='';
	end;
{ Get the current CDs Key }
	MakeCDKey(CurrentCD,CDKey);
	FindCD(CDKey,CurrentCD);
	CDDetails(CurrentCD,1);
// Update the display
	SetTimerTrack(CurrentCD.CDLength Div 1000,CurrentCD.TotalTracks);
{ Initialise the TrackList TrackName, This will change if the
  CD is currently playing }
	CurrentTrack:=1;
	UpdateTrackList(1);
end;

{ Set all the LEDs to On 0's }
procedure TurnOnLEDs;
begin
      //	CDForm.Track.Enabled:=True;
      //	CDForm.TimeDisp.Enabled:=True;
end;

{  Set all the LEDs to Off 0's }
procedure TurnOffLEDs;
begin
    //	CDForm.Track.Enabled:=False;
     //	CDForm.TimeDisp.Enabled:=False;
end;

{ Activate all controls etc.. }
procedure EnablePlayer;
begin
	TurnOnLEDs;
	CDForm.CDPanel.Enabled:=True;
	CDForm.Tracklist.Enabled:=True;
	CDForm.Button1.Enabled:=True
end;

procedure SetDisp(d: integer);
begin
	with CDForm do
	begin
       //		Track.DisplayType:=d;
       //		TimeDisp.DisplayType:=d;
		if d=0 then
		begin
		// Green on black displays
			BackDisp.Brush.Color:=clBlack;
			Shape1.Pen.Color:=clBlack;
			Shape1.Brush.Color:=clBlack;
			TitleOfCD.Color:=clBlack;
			TitleOfCD.Font.Color:=clLime;
			Artist.Color:=clBlack;
			Artist.Font.Color:=clLime;
			TrackList.Color:=clBlack;
			TrackList.Font.Color:=clLime;
		end else
		begin
		// Black on silver displays (LCD ish)
			BackDisp.Brush.Color:=clSilver;
			Shape1.Pen.Color:=clSilver;
			Shape1.Brush.Color:=clSilver;
			TitleOfCD.Color:=clSilver;
			TitleOfCD.Font.Color:=clBlack;
			Artist.Color:=clSilver;
			Artist.Font.Color:=clBlack;
			TrackList.Color:=clSilver;
			TrackList.Font.Color:=clBlack;
		end;
	end;
end;

{ Deactivate all controls etc.. }
procedure DisablePlayer;
begin
	TurnOffLeds;
	Setbuttons(CDOffline);
   //	CDForm.CDPanel.Enabled:=False;
	CDDetails(CurrentCD,0);
	CDForm.Tracklist.Enabled:=False;
	CDForm.Button1.Enabled:=False;
	SetFormCaption('');
	CDKey:='';
end;

{ Goto a specified Track Number }
procedure GotoTrack(tracknum: integer);
begin
	if (tracknum<=CurrentCD.TotalTracks) and (tracknum>0) then
		GotoPosition(CurrentCD.TrackDetail[tracknum].TrackStart);
end;

{ Goto a specified position }
procedure GotoPosition(pos: longint);
begin
	if CDForm.CDPanel.Mode=mpPlaying then
	begin
		CDForm.CDPanel.Pause;
		CDForm.CDPanel.Position:=pos;
		CDForm.CDPanel.Resume;
	end else
		CDForm.CDPanel.Position:=pos;
end;

{ Get all the current positions of the CD Player }
procedure GetPositions;
var
	lp: integer;
begin
{ Get the Current Position }
	CDPosition:=CDForm.CDPanel.Position;
{ Get the current Track - I might lose this as EndPosition
	allows me to determine the Current Track }
	for lp:=1 to CurrentCD.TotalTracks do
		if CDPosition>=CurrentCD.TrackDetail[lp].TrackStart then
			CurrentTrack:=lp ;
{ Get Position within track }
	TrackPosition:=CDPosition -
		CurrentCD.TrackDetail[CurrentTrack].TrackStart;

⌨️ 快捷键说明

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