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

📄 main.pas

📁 Some source code for creating a media player in delphi
💻 PAS
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, CommonTypes,
  VsControls, VsSkin, VsButtons, VsProgressBar, VsLed, VsLabel, AudioObject,
  VsSlider, ExtCtrls, VsComposer, VsImageClip, VsCheckBox, VsImageText,
  VsImage, DrawUtils, Menus;

type
  TFormPlayer = class(TForm)
    mainSkin: TVsSkin;
    VsButton1: TVsButton;
    VsButton2: TVsButton;
    BtnPrev: TVsButton;
    BtnPlay: TVsButton;
    BtnPause: TVsButton;
    BtnStop: TVsButton;
    BtnNext: TVsButton;
    BtnOpen: TVsButton;
    VsComposer: TVsComposer;
    RptCheck: TVsCheckBox;
    ShfCheck: TVsCheckBox;
    VolTrack: TVsSlider;
    BalTrack: TVsSlider;
    OpenDialog: TOpenDialog;
    TimerDisplay: TTimer;
    TimerRender: TTimer;
    TimePosText: TVsImageText;
    PosTrackBar: TVsSlider;
    TitleText: TVsImageText;
    StateText: TVsImageText;
    VsCheckBox1: TVsCheckBox;
    EQCheck: TVsCheckBox;
    PLCheck: TVsCheckBox;
    PopupMenu: TPopupMenu;
    Config: TMenuItem;
    WavePaint: TImage;
    FreqText: TVsImageText;
    BpsText: TVsImageText;
    PLIndexText: TVsImageText;
    StartupTimer: TTimer;
    Playlist: TMenuItem;
    Equalyzer: TMenuItem;
    AudioPlayer: TMenuItem;
    Play: TMenuItem;
    Pause: TMenuItem;
    Stop: TMenuItem;
    N1: TMenuItem;
    Next: TMenuItem;
    Previous1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    Exit1: TMenuItem;
    Open: TMenuItem;
    TimerMove: TTimer;
    procedure VsButton1Click(Sender: TObject);
    procedure VsButton2Click(Sender: TObject);
    procedure RptCheckClick(Sender: TObject);
    procedure ShfCheckClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtnOpenClick(Sender: TObject);
    procedure BtnPlayClick(Sender: TObject);
    procedure BtnStopClick(Sender: TObject);
    procedure BtnPauseClick(Sender: TObject);
    procedure BtnNextClick(Sender: TObject);
    procedure BtnPrevClick(Sender: TObject);
    procedure VolTrackChange(Sender: TObject);
    procedure BalTrackChange(Sender: TObject);
    procedure TimerDisplayTimer(Sender: TObject);
    procedure TimerRenderTimer(Sender: TObject);
    procedure PosTrackBarMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure PLCheckClick(Sender: TObject);
    procedure ConfigClick(Sender: TObject);
    procedure EQCheckClick(Sender: TObject);
    procedure StartupTimerTimer(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure PlaylistClick(Sender: TObject);
    procedure EqualyzerClick(Sender: TObject);
    procedure TimePosTextClick(Sender: TObject);
    procedure mainSkinMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure mainSkinMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure TimerMoveTimer(Sender: TObject);
    procedure TimePosTextContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
  private
   ScrollText, LastText : String;
   EQOffX, EQOffY : Integer;
   PLOffX, PLOffY : Integer;
  public
    { Public declarations }
  end;

var
  FormPlayer: TFormPlayer;

implementation

uses playlist, config, equalyzer;

{$R *.DFM}

procedure TFormPlayer.VsButton1Click(Sender: TObject);
begin
  Application.Minimize;
end;

procedure TFormPlayer.VsButton2Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TFormPlayer.RptCheckClick(Sender: TObject);
begin
  AudioObjectPlayer.AORepeat := RptCheck.Checked;
end;

procedure TFormPlayer.ShfCheckClick(Sender: TObject);
begin
  AudioObjectPlayer.AOShuffle := ShfCheck.Checked;
end;

procedure TFormPlayer.FormCreate(Sender: TObject);
begin
 AudioObjectPlayer := TAudioObject.Create(Application.Handle);
 DrawInit;
end;

procedure TFormPlayer.BtnOpenClick(Sender: TObject);
begin
OpenDialog.Title := 'Open Files';
OpenDialog.Filter := AudioObjectPlayer.GetDialogFilter + '|Any file (*.*)|*.*';
 if not OpenDialog.Execute then exit;
 if FormConfig.PLClearCheck.Checked then AudioObjectPlayer.Clear;
 AudioObjectPlayer.OpenFiles(OpenDialog.Files);
 Selected := AudioObjectPlayer.ItemIndex;
 AudioObjectPlayer.SetLegth(Selected, AudioObjectPlayer.GetSongLen);
 ListTotal := AudioObjectPlayer.GetTotLegth;
 DrawPlayList (100 - FormPlaylist.ListSlider.Position);
end;

procedure TFormPlayer.BtnPlayClick(Sender: TObject);
begin
 if AudioObjectPlayer.EngineState = ENGINE_PAUSE then
   AudioObjectPlayer.UnPause
  else
   AudioObjectPlayer.Play(AudioObjectPlayer.GetCurSong);
  AudioObjectPlayer.SetLegth(Selected, AudioObjectPlayer.GetSongLen);   
end;

procedure TFormPlayer.BtnStopClick(Sender: TObject);
begin
 AudioObjectPlayer.Stop;
end;

procedure TFormPlayer.BtnPauseClick(Sender: TObject);
begin
 AudioObjectPlayer.Pause;
end;

procedure TFormPlayer.BtnNextClick(Sender: TObject);
begin
 AudioObjectPlayer.NextSong;
 Selected := AudioObjectPlayer.ItemIndex;
 AudioObjectPlayer.SetLegth(Selected, AudioObjectPlayer.GetSongLen);
 DrawPlayList (100 - FormPlaylist.ListSlider.Position);
end;

procedure TFormPlayer.BtnPrevClick(Sender: TObject);
begin
 AudioObjectPlayer.PrevSong;
 Selected := AudioObjectPlayer.ItemIndex;
 DrawPlayList (100 - FormPlaylist.ListSlider.Position);
 AudioObjectPlayer.SetLegth(Selected, AudioObjectPlayer.GetSongLen); 
end;

procedure TFormPlayer.VolTrackChange(Sender: TObject);
begin
 AudioObjectPlayer.SetMainVolume(VolTrack.Position);
end;

procedure TFormPlayer.BalTrackChange(Sender: TObject);
begin
 AudioObjectPlayer.SetPanning(BalTrack.Position);
end;

procedure TFormPlayer.TimerDisplayTimer(Sender: TObject);
 var fLen, fPos : Integer; Tmp : String;
begin
 fPos := AudioObjectPlayer.GetSongPos div 1000;
 fLen := AudioObjectPlayer.GetSongLen div 1000;

 PosTrackBar.Position := Trunc((fPos / fLen) * 100);
 if FormConfig.InvTimeCheckBox.Checked then
   TimePosText.Text := ShortTime (fLen - fPos)
 else
   TimePosText.Text := ShortTime (fPos);

 Tmp := (AudioObjectPlayer.GetSongTitle(AudioObjectPlayer.GetCurSong));
 if (Tmp) <> '' then
  begin
    Tmp := (Tmp) + ' (' + ShortTime (AudioObjectPlayer.GetSongLen div 1000) + ') *** ';
    if LastText <> Tmp then
      begin
       ScrollText := Tmp;
       LastText := Tmp;
      end
     else ScrollText := Copy(ScrollText, 2, Length(ScrollText)) + ScrollText[1];
  end
   else
    begin
      LastText := 'WinUx';
      ScrollText := 'WinUx';
     end;

  if Length(TMP) > 26 then TitleText.Text := ScrollText else TitleText.Text := LastText;


 {Playlkyst and Player Infos}
  Application.Title := LastText + ' - WinUX';
  FormPlaylist.InfoText.Text := 'Totals ' + IntToStr(Selected + 1) + '/' + IntToStr(AudioObjectPlayer.Count) + '   ' +
                               ShortTime (ListTotal div 1000);
  PLIndexText.Text := IntToStr(Selected + 1) + '/' + IntToStr(AudioObjectPlayer.Count);
  FreqText.Text    := IntToStr(AudioObjectPlayer.OutFrequency div 1000) + 'khz';
  BpsText.Text     := IntToStr(AudioObjectPlayer.GetBitrate) + 'kBs';
   case AudioObjectPlayer.EngineState of
    ENGINE_PLAY  : StateText.Text := 'P';
    ENGINE_PAUSE : StateText.Text := 'U';
    ENGINE_STOP  : StateText.Text := 'S';
    ENGINE_SONG_END :
     begin
       if AudioObjectPlayer.AORepeat or AudioObjectPlayer.AOShuffle then
              BtnNext.OnClick(Nil);
     end;
   end;
end;

procedure TFormPlayer.TimerRenderTimer(Sender: TObject);
 var LCH, RCH : Integer;
begin
 if not TimerMove.Enabled then
  begin
   EQOffX := FormPlayer.Left - FormEq.Left;
   EQOffY := FormPlayer.Top - FormEq.Top;
   PLOffX := FormPlayer.Left - FormPlaylist.Left;
   PLOffY := FormPlayer.Top - FormPlaylist.Top;
  end;
  
 if FormConfig.NoneDrawCheck.Checked then Exit;
 if FormConfig.WaveDrawCheck.Checked then DrawWave(WavePaint.Canvas.Handle);
 if FormConfig.FFTDrawCheck.Checked then DrawFFT;
end;

procedure TFormPlayer.PosTrackBarMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 var fLen : LongInt;
begin
 if Button <> mbLeft then Exit;
   fLen := AudioObjectPlayer.GetSongLen;
   AudioObjectPlayer.SetSongPos(Trunc(fLen * X / PosTrackBar.Width));
end;

procedure TFormPlayer.PLCheckClick(Sender: TObject);
begin
 if PLCheck.Checked then FormPlaylist.Show
     else FormPlaylist.Close;
end;

procedure TFormPlayer.ConfigClick(Sender: TObject);
begin
 FormConfig.SHow;
end;

procedure TFormPlayer.EQCheckClick(Sender: TObject);
begin
 if EQCheck.Checked then FormEQ.Show
     else FormEQ.Close;
end;

procedure TFormPlayer.StartupTimerTimer(Sender: TObject);
begin
   StartupTimer.Enabled := False;

   {Set Initial Parameters}
    ScrollText := 'WinUX';
    LastText := ScrollText;
    AudioObjectPlayer.SetMainVolume(12);
    AudioObjectPlayer.SetOutBufferLen(2000);
    
   {Forms Positions and refresh}
    FormPlayer.Height := mainSkin.Height;
    FormPlayer.Width := mainSkin.Width;
    FormPlayer.Top := (Screen.Height - FormPlayer.Height - FormEQ.Height - FormPlaylist.Height ) div 2;
    FormPlayer.Left := (Screen.Width - FormPlayer.Width ) div 2;
    FormPlaylist.Top  := FormPlayer.Top + FormPlayer.Height;
    FormPlaylist.Left := FormPlayer.Left;
    FormEQ.Top  := FormPlayer.Top - FormEQ.Height;
    FormEQ.Left := FormPlayer.Left;
    EQCheck.Checked := True;
    PLCheck.Checked := True;
    FormEQ.Show;
    FormPlaylist.Show;
end;

procedure TFormPlayer.Exit1Click(Sender: TObject);
begin
 Close;
end;

procedure TFormPlayer.PlaylistClick(Sender: TObject);
begin
  PLCheck.Checked := not PLCheck.Checked;
  PLCheckClick(Nil);
end;

procedure TFormPlayer.EqualyzerClick(Sender: TObject);
begin
  EQCheck.Checked := not EQCheck.Checked;
  EQCheckClick(Nil);
end;

procedure TFormPlayer.TimePosTextClick(Sender: TObject);
begin
  FormConfig.InvTimeCheckBox.Checked := not FormConfig.InvTimeCheckBox.Checked;
end;

procedure TFormPlayer.mainSkinMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 if Button <> mbLeft then Exit;
  TimerMove.Enabled := True;
end;

procedure TFormPlayer.mainSkinMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  TimerMove.Enabled := False;
end;

procedure TFormPlayer.TimerMoveTimer(Sender: TObject);
begin
 if FormConfig.MoveCheck.Checked then
  begin
    FormEq.Left := FormPlayer.Left - EQOffX;
    FormEq.Top := FormPlayer.Top - EQOffY;
    FormPlaylist.Left := FormPlayer.Left - PLOffX;
    FormPlaylist.Top := FormPlayer.Top - PLOffY;
  end;
end;

procedure TFormPlayer.TimePosTextContextPopup(Sender: TObject;
  MousePos: TPoint; var Handled: Boolean);
begin
 TimePosTextClick(Nil);
end;

end.

⌨️ 快捷键说明

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