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

📄 main.pas

📁 一个delphi制作的mp3播放器!
💻 PAS
📖 第 1 页 / 共 3 页
字号:
   dragPos:=Form;//取得鼠标的位置
   if Form1.Visible then
   Form3.CanAccept(messmove);
   if GDragLbNamLb or GDragMorFilLb then
       begin
           GDragLbNamLb:=False;
           GDragMorFilLb:=False;
       end;    
   if Fdown then
     begin //设置鼠标拖动窗口
        Left := Left + X - FOldX;
        Top :=Top + Y - FOldY;
    end;
   if Form3.Visible then
     Form3.OnShow(sender);  
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    Form2.Show;
    Application.ProcessMessages;
end;
 

procedure TForm1.FulScrPopClick(Sender: TObject);
begin
    if  (Form2.Visible=False) and (Form5.Visible=False) then
         Form1.ScreenClick(Sender)
     Else
         Form2.Panel1DblClick(Sender);
end;

procedure TForm1.NextPClick(Sender: TObject);
begin
     NexClick(Sender);   
end;
procedure TForm1.PictureMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    FDown:=True;
    Foldx:=x;//保存鼠标按下时的位置
    Foldy:=y;
end;

procedure TForm1.PictureMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    Fdown:=False;
end;

procedure TForm1.DotTimTimer(Sender: TObject);
begin
try
    if (Mediaplayer1.Mode in [mpplaying] ) and (not dotPress) then
         dotIm.Left:=barIm.Left+round(Mediaplayer1.Position/freq);
Except
 Exit;
 end;
end;

procedure TForm1.DotImMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    dotPress:=True;
    DotDownx:=x;
end;

procedure TForm1.DotImMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     dotPress:=False;
     if Mediaplayer1.Mode in [Mpplaying,mppaused] then
        begin //若正在播放或暂停时,实时拖动
           Mediaplayer1.stop;//调节进度时,Mediaplayer会自动停止 
           Mediaplayer1.Position:=round(abs((dotIm.left-barIm.left))*Freq);
           if PauseSign.Visible then
               PauseSignClick(Sender)
           Else
               Mediaplayer1.Play;
           DotTim.Enabled:=True;
        end;
end;

procedure TForm1.DotImMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  DotMax:integer;
  CanMove:boolean;
begin
   DotMax:=BarIm.Left+barIm.width-DotIm.WIdth;
   Movex:=x;
   CanMove:=(dotIm.Left<=DotMax) and (dotIm.Left>=barIm.Left);
   if (Mediaplayer1.Mode in [mpPlaying,mppaused]) and  (DotPress and canMove) then
      begin //若正在播放或暂停时,实现实时托动
          DotTim.Enabled:=False;
          {if dotIm.Left>DotMax then
              begin
                 dotIm.Left:=DotMax;
                 Exit;
              end;
           if dotIm.Left<barIm.Left then
               dotIm.Left:=BarIm.Left;}
          dotIm.Left:=dotIm.Left+x-dotDownx;
          //Form1.Edit1.Text:='DotLeft:'+IntToStr(dotIm.Left)+'sdfd';//+IntToStr(Foldy);
      end;
end;

procedure TForm1.BarImDblClick(Sender: TObject);
var
  shift:tshiftState;
begin
    DotPress:=True;
    DotImMouseMove(Sender,shift,0,0);
end;

procedure TForm1.BarImMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   if button<>mbLeft then Exit;
      dotPress:=True;
       Movex:=x;
   if (Mediaplayer1.Mode=mpplaying) and  (DotPress) then
      begin
          DotTim.Enabled:=False;
          dotIm.Left:=X+barIm.left;
          Mediaplayer1.Position:=X*freq;
          Mediaplayer1.Play;
      end;
end;

procedure TForm1.BarImMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    dotPress:=False;
    DotTim.Enabled:=True;
end;

procedure TForm1.BarImMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
    barMove.X:=x;
    barMove.Y:=y;
end;

procedure TForm1.ShortCutOPenBtClick(Sender: TObject);
begin
    PlaySbtclick(Sender);//ChanLan1();
end;

procedure TForm1.Label5MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    if (Button=mbLeft) then
       begin  //进入移动状态
          SendMessage(self.Handle,WM_LBUTTONUP,0,0);
          SendMessage(self.Handle,WM_NCLBUTTONDOWN,HTCaption,0);
       end;
end;

procedure TForm1.OPenMenuClick(Sender: TObject);
begin
     PlaySbtClick(Sender);
end;

procedure TForm1.PlaySbtClick(Sender: TObject);
var
   DrawIndex: Integer;
   Rect: TRect;
begin
Try
 case MediaPlayer1.Mode of
    mpNotready :   Openclick(Sender);//刚开始处的状态
    mpstopped,mpseeking:
        begin
          Mediaplayer1.Open;
          mediaplayer1.Play;
          Form1.PlayInf(MediaPlayer1.FileName);
          Form1.Picture1(MediaPlayer1.FileName);
        end;
    mppaused:      Form1.PauseClick();   //Mediaplayer1.Mode<>mpplaying;
    Else
       begin
            if (Mediaplayer1.Mode=mpplaying) and (enter=False) then
                Form1.PauseClick()
            Else   
            if  (HaveDrag=1) or (currentFile<>'') or
                  enter or (Mediaplayer1.Mode=mpstopped) then
                begin//难点处理此事件   
                    if PauseSign.Visible then
                        Form1.PauseClick();
                    Mediaplayer1.FileName:=CurrentFile;
                    Mediaplayer1.Open;
                    Mediaplayer1.Play;//处理文件信息,如是否为视频
                    Form1.Picture1(MediaPlayer1.FileName);
                    Form1.PlayInf(MediaPlayer1.FileName);
                end     
              Else
                Openclick(Sender);
        end;
     with Form3  do
        //LbNameDrawItem(Control,DrawIndex,Rect(LbName.left,LbName.top,(Left+width),(top+Height)),State);
 end;
Except
    showmessage('不能播放此格式!');
    Exit;
end;
end;

procedure TForm1.FastOpenBitClick(Sender: TObject);
begin
    PlaySbtClick(Sender);
end;

procedure TForm1.CtrlVolumeClick(Sender: TObject);//打开 Windows 声音窗口
var
  OPenReturn:cardinal;
  sysDir:pchar;
  OPenFlag:integer;
begin
    OPenReturn:=shellexecute(handle,'open',//
            'sndvol32.exe',0,nil,SW_ShowNormal);
    if OPenReturn<>42 then
        begin//打开 Windows 声音窗口
           winexec('Rundll32.exe Shell32.dll,Control_RunDLL mmsys.cpl,,0',Sw_showNormal);
        end;//若是Control_RunDll,则出错丢失条目 Control_RunDll
end;

procedure TForm1.LockScrClick(Sender: TObject);
begin
    LockScr.Checked:=not LockScr.Checked;
end;

procedure TForm1.ExitPlayClick(Sender: TObject);//关闭播放器
begin
    //Application.Terminate;
    Form1.close;//用Application.Terminate不会触发FormCloseQuery事件,不能保存播放列表
end;

procedure TForm1.PlayListSdbClick(Sender: TObject);
begin
   Form3.Visible:=not Form3.Visible;
end;

procedure TForm1.StopSdbClick(Sender: TObject);
begin
    if MediaPlayer1.Mode in [mpplaying,mppaused] then
        begin
            MediaPlayer1.Stop;
            LbRunTimer.enabled:=False;
            DotIm.Left:=barIm.Left;
            Label1.caption:='播放已停止';//关闭后DeviceID仍为1
            //Label1.caption:=IntTostr(MediaPlayer1.DeviceID);
        end;
end;

procedure TForm1.OpenSoundWinClick(Sender: TObject);
begin
   CtrlVolumeClick(sender);
end;

procedure TForm1.OpenHelpClick(Sender: TObject);
var
  shift:TshiftState;
  key:word;
begin
   key:=Vk_F1;//调用 Form的 KeyDown事件,打开帮助文件
   Form1.KeyDown(key,shift);
end;
procedure TForm1.ToMainFormClick(Sender: TObject);
var
  shift:TshiftState;
  key:word;
begin
   key:=Vk_F11;//调用 Form的 KeyDown事件,打开帮助文件
   Form2.FormKeyDown(sender,key,shift);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   Form2.Formkeydown(Sender,Key,Shift);
end;

procedure TForm1.OpenClick(Sender: TObject);
var
  i:integer;
begin
     try//-[ofAllowMultiSelect];//设置只能单选
       Opendialog1.Title:='请选择多个文件';
       if OpenDialog1.Execute=False then Exit;
       currentFile:=OpenDialog1.Filename;
       case MediaPlayer1.Mode of
         Mppaused:
              Form1.PauseClick();
         mpplaying:
              StopSdb.OnClick(sender);
        end;
       curpos:=Form3.MoreFilNameLb.Items.Count-2;//默认当前为0
       for i:=0 to (Form1.OpenDialog1.Files.Count-1) do
       begin //添加到正在播放的列表中
         CurrentFile:=Form1.OpenDialog1.Files.strings[i];
         Form3.MoreFilNameLb.Items.Add(GetFileName(currentFile));
         Form3.MoreFilPathLb.Items.Add(currentFile);
       end;//ComboBox1的Style为CcsDropDownList时
        //改它的text为'正在播放'无效
      if Form3.ComboBox1.ItemIndex<>0 then//如果不是"正在播放" 的列表
          begin
             Form3.ComboBox1.ItemIndex:=0;
             Form3.ComboBox1Change(sender);
          end
       else
          begin
             MediaPlayer1.FileName:=CurrentFile;
             MediaPlayer1.Open;
             MediaPlayer1.Play;
             Picture1(MediaPlayer1.FileName);
             PlayInf(CurrentFile); //处理时间显示等信息
          end;
Except //将打开的文件添加到 "正在播放"的列表中
   begin
       showmessage('不能播放此格式!');
        Exit;
   end;
    end;
end;

procedure TForm1.StopSdbDblClick(Sender: TObject);
begin
    if MediaPlayer1.Mode=mpplaying then
        begin
            MediaPlayer1.Stop;
            LbRunTimer.enabled:=False;
            DotIm.Left:=barIm.Left;
        end;
end;

procedure TForm1.MaxVolImMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    VolIncIm.Width:=x;
    SetVolume(x*round(65535/MaxVolIm.Width));
    if not Label1.visible then
       Label1.show;
    Label1.caption:='当前音量:'+IntToStr(round(100*(x/MaxVolIm.Width)))+'%';
end;

procedure TForm1.FormminClick(Sender: TObject);
begin
   //Form1.visible:=false;最小化到任务栏上)
   Application.minimize;
end;

end.








⌨️ 快捷键说明

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