main.pas

来自「mp3 播放器 delphi 源码」· PAS 代码 · 共 1,262 行 · 第 1/5 页

PAS
1,262
字号
  If IsNowProtected then begin MsgNotAllowed; Exit; end;
  With TSettingsForm.Create(Self) do Try ShowModal; Finally Free; end;
end;

procedure TMainForm.ButtonAbout_OnClick(Sender: TObject);
begin With TAboutForm.Create(Self) do Try ShowModal; Finally Free; end; end;

procedure TMainForm.ListViewLeft_OnDblClick(Sender: TObject);
var li1: TListItem;
begin
  If ListViewLeft.Selected<>nil then begin
    li1:=ListViewRight.Items.Add;
    li1.Caption:=ListViewLeft.Selected.Caption;
    li1.SubItems.Add(ListViewLeft.Selected.SubItems[0]);
    ListViewRight.Selected:=li1;
    ListViewRight.Selected.MakeVisible(false);
    If PlayAutoStart then If MPEGPlayer.Mode<>plmPlaying then ButtonPlay_OnClick(nil);
  end;
end;

procedure TMainForm.ListViewLeft_OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  If Shift=[] then Case Key of
    13: ButtonAddSel_OnClick(nil); // [Enter]
    106: ButtonSelAll_OnClick(nil); // Num[*]
    107: ButtonSelInvert_OnClick(nil); // Num[+]
    109: ButtonSelNone_OnClick(nil); // Num[-]
    112: ButtonAbout_OnClick(nil); // [F1]
    113: ButtonOpen_OnClick(nil); // [F2]
    114: ButtonAdd_OnClick(nil); // [F3]
    115: ButtonAddDir_OnClick(nil); // [F4]
    116: ButtonSave_OnClick(nil); // [F5]
    119: ButtonID3Tag_OnClick(nil); // [F8]
    120: ButtonPassword_OnClick(nil); // [F9]
    121: ButtonOptions_OnClick(nil); // [F10]
    48..90: If Sender=ListViewRight then begin // [0..9] and [a..z] in right list
              SearchEditRight.Text:=Char(Key); SearchPanelRight.Visible:=true;
              ActiveControl:=SearchEditRight; SearchEditRight.SelStart:=1;
            end else begin // [0..9] and [a..z] in left list
              SearchEditLeft.Text:=Char(Key); SearchPanelLeft.Visible:=true;
              ActiveControl:=SearchEditLeft; SearchEditLeft.SelStart:=1;
            end;
    // else messagedlg('keycode: '+inttostr(key),mtinformation,[mbok],0);
  end;
end;

procedure TMainForm.ListViewRight_OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  If Shift=[] then Case Key of
    13: ListViewRight_OnDblClick(nil); // [Enter]
    else ListViewLeft_OnKeyDown(Sender,Key,Shift);
  end;
end;

function DoColumnSort(Item1, Item2: TListItem; Col: integer): integer; StdCall;
var s1, s2: string;
begin
  Case Col of 0: begin s1:=Item1.Caption; s2:=Item2.Caption; end;
    else If (Item1.SubItems.Count>=Col)and(Item2.SubItems.Count>=Col) then begin s1:=Item1.SubItems[Col-1]; s2:=Item2.SubItems[Col-1]; end; end;
  Result:=lstrcmp(pchar(s1),pchar(s2));
end;

procedure TMainForm.ListView_OnColumnClick(Sender: TObject; Column: TListColumn);
var lv1: TListView;
begin lv1:=(Sender as TListView); lv1.CustomSort(@DoColumnSort,Column.Index); end;

procedure TMainForm.ListView_OnDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin Accept:=(Source=ListViewLeft)or(Source=ListViewRight); end;

procedure TMainForm.ListView_OnDragDrop(Sender, Source: TObject; X, Y: Integer);
var i1: integer; li1, li2: TListItem;
begin
  li1:=(Sender as TListView).GetItemAt(X,Y); 
  If (Sender=ListViewLeft)and(Source=ListViewLeft) then begin // inside ListViewLeft
    For i1:=pred(ListViewLeft.Items.Count) downto 0 do If ListViewLeft.Items[i1].Selected then begin
      ListViewLeft.Items[i1].Selected:=false; li2:=ListViewLeft.Items[i1];
      If li1=nil then li1:=ListViewLeft.Items.Add else li1:=ListViewLeft.Items.Insert(li1.Index);
      li1.Caption:=li2.Caption; li1.SubItems.Add(li2.SubItems[0]);
      li1.Selected:=true; li2.Delete;
    end;    
  end else
  If (Sender=ListViewRight)and(Source=ListViewRight)and(ListViewRight.Selected<>nil) then begin // inside ListViewRight
    li2:=ListViewRight.Selected;
    If li1=nil then li1:=ListViewRight.Items.Add else li1:=ListViewRight.Items.Insert(li1.Index);
    li1.Caption:=li2.Caption; li1.SubItems.Add(li2.SubItems[0]);
    If li2=PlayingListItem then PlayingListItem:=li1;
    li2.Delete;
    ListViewRight.Selected:=li1; li1.MakeVisible(false);
  end else
  If (Sender=ListViewLeft)and(Source=ListViewRight) then begin // from ListViewRight to ListViewLeft
    ButtonRemoveSel_OnClick(nil); li1.MakeVisible(false);
  end else
  If (Sender=ListViewRight)and(Source=ListViewLeft) then begin // from ListViewLeft to ListViewRight
    If (IsNowProtected)and(NeedPwForAddSel) then begin MsgNotAllowed; Exit; end;
    For i1:=pred(ListViewLeft.Items.Count) downto 0 do If ListViewLeft.Items[i1].Selected then begin
      If li1=nil then li1:=ListViewRight.Items.Add else li1:=ListViewRight.Items.Insert(li1.Index);
      li1.Caption:=ListViewLeft.Items[i1].Caption; li1.SubItems.Add(ListViewLeft.Items[i1].SubItems[0]);
    end;
    ListViewRight.Selected:=li1; li1.MakeVisible(false);
  end;
end;

procedure TMainForm.ListView_OnChange(Sender: TObject; Item: TListItem; Change: TItemChange);
begin
  If ListViewRight.Selected<>nil then begin
    If not ButtonPlay.Enabled then ButtonPlay.Enabled:=true;
    If (ListViewRight.Items[ListViewRight.Selected.Index-1]<>nil)or(LastSongs.Count>1) then begin
      If not ButtonBack.Enabled then ButtonBack.Enabled:=true
    end else If ButtonBack.Enabled then ButtonBack.Enabled:=false;
    If ((ListViewRight.Selected<>nil)and(ListViewRight.Items.Count=1))or(ListViewRight.Items[ListViewRight.Selected.Index+1]<>nil) then begin
      If not ButtonNext.Enabled then ButtonNext.Enabled:=true;
    end else If ButtonNext.Enabled then ButtonNext.Enabled:=false;    
  end else begin
    If ButtonPlay.Enabled then ButtonPlay.Enabled:=false;
    If LastSongs.Count>1 then begin If not ButtonBack.Enabled then ButtonBack.Enabled:=true;
    end else begin If ButtonBack.Enabled then ButtonBack.Enabled:=false; end;
    If ListViewLeft.Items.Count>0 then begin If not ButtonNext.Enabled then ButtonNext.Enabled:=true; end else
    If ButtonNext.Enabled then ButtonNext.Enabled:=false;
  end;  
end;

procedure TMainForm.PopupMenuLeft_OnPopup(Sender: TObject);
begin
  PMlAddSel.Enabled:=ListViewLeft.SelCount>0; PMlAddAll.Enabled:=ListViewLeft.Items.Count>0;
  PMlSelNone.Enabled:=ListViewLeft.Items.Count>0; PMlInvert.Enabled:=ListViewLeft.Items.Count>0;
  PMlSelAll.Enabled:=ListViewLeft.Items.Count>0; PMlSelGroup.Enabled:=ListViewLeft.Items.Count>0;
  PMlRemN.Visible:=(ListViewLeft.Items.Count>0)and(not((IsNowProtected)and(NeedPwForAddDir)));
  PMlRemSel.Visible:=(ListViewLeft.Items.Count>0)and(not((IsNowProtected)and(NeedPwForAddDir)));
  PMlRemAll.Visible:=(ListViewLeft.Items.Count>0)and(not((IsNowProtected)and(NeedPwForAddDir)));
end;

procedure TMainForm.PopupMenuRight_OnPopup(Sender: TObject);
begin
  PMrRemoveSel.Enabled:=ListViewRight.Selected<>nil; PMrRemoveAll.Enabled:=ListViewRight.Selected<>nil;
  PMrPlay.Enabled:=ButtonPlay.Enabled; PMrPause.Enabled:=ButtonPause.Enabled; PMrStop.Enabled:=ButtonStop.Enabled;
  PMrBack.Enabled:=ButtonBack.Enabled; PMrNext.Enabled:=ButtonNext.Enabled;
end;

procedure TMainForm.SearchEditLeft_OnExit(Sender: TObject);
begin SearchPanelLeft.Visible:=false; end;

procedure TMainForm.SearchEditRight_OnExit(Sender: TObject);
begin SearchPanelRight.Visible:=false; end;

procedure TMainForm.SearchEdit_OnChange(Sender: TObject);
var li1: TListItem;
begin
  li1:=ListViewLeft.FindCaption(0,(Sender as TEdit).Text,true,true,false);
  If li1<>nil then begin
    ButtonSelNone_OnClick(nil);
    ListViewLeft.Selected:=li1;
    li1.MakeVisible(false);
  end;
end;

procedure TMainForm.ButtonPanelFlatButton_OnClick(Sender: TObject);
begin
  If ButtonPanel1.Visible then begin ButtonPanel1.Visible:=false; ButtonPanel.Height:=12; ButtonPanelFlatButton.Height:=6; ButtonPanelFlatButton.Down:=true;
  end else begin ButtonPanel.Height:=49; ButtonPanelFlatButton.Height:=42; ButtonPanel1.Visible:=true; ButtonPanelFlatButton.Down:=false; end;
end;

procedure TMainForm.LeftTitleFlatButton_OnClick(Sender: TObject);
begin
  If PanelLeftCaption.Caption='' then begin PanelLeftCaption.Caption:=PanelLeftCaption.Hint; PanelLeftCaption.Height:=21; LeftTitleFlatButton.Height:=17; LeftTitleFlatButton.Down:=false;
  end else begin PanelLeftCaption.Caption:=''; PanelLeftCaption.Height:=10; LeftTitleFlatButton.Height:=6; LeftTitleFlatButton.Down:=true; end;
end;

procedure TMainForm.RightTitleFlatButton_OnClick(Sender: TObject);
begin
  If PanelRightCaption.Caption='' then begin PanelRightCaption.Caption:=PanelRightCaption.Hint; PanelRightCaption.Height:=21; RightTitleFlatButton.Height:=17; RightTitleFlatButton.Down:=false;
  end else begin PanelRightCaption.Caption:=''; PanelRightCaption.Height:=10; RightTitleFlatButton.Height:=6; RightTitleFlatButton.Down:=true; end;
end;

procedure TMainForm.ItemsPanelFlatButton_OnClick(Sender: TObject);
begin
  If ItemsPanel1.Visible then begin ItemsPanel1.Visible:=false; ItemsPanel2.Visible:=false; ItemsPanel.Width:=8; ItemsPanelFlatButton.Width:=6; ItemsPanelFlatButton.Down:=true;
  end else begin ItemsPanel1.Visible:=true; ItemsPanel2.Visible:=true; ItemsPanel.Width:=29; ItemsPanelFlatButton.Width:=27; ItemsPanelFlatButton.Down:=false; end;
end;

procedure TMainForm.MemoFlatButton_OnClick(Sender: TObject);
begin
  If Memo.Visible then begin MemoPanel.Hint:=IntToStr(MemoPanel.Height); Memo.Visible:=false; MemoPanel.Height:=12; MemoFlatButton.Down:=true;
  end else begin MemoPanel.Height:=StrToInt(MemoPanel.Hint); Memo.Visible:=true; MemoFlatButton.Down:=false; end;
end;

procedure TMainForm.SongFlatButton_OnClick(Sender: TObject);
begin
  If ButtonSong.Visible then begin ButtonSong.Visible:=false; SongPanel.Height:=8; SongFlatButton.Height:=6; SongFlatButton.Down:=true;
  end else begin ButtonSong.Visible:=true; SongPanel.Height:=21; SongFlatButton.Height:=20; SongFlatButton.Down:=false; end;
  PlayerMainPanel.Height:=SongPanel.Height+PeakPanel.Height+PosPanel.Height+PlayerPanel.Height+2;
end;

procedure TMainForm.PeakFlatButton_OnClick(Sender: TObject);
begin
  If PeakPanel2.Visible then begin
    PeakPanel2.Visible:=false; PeakPanel.Height:=8; PeakFlatButton.Height:=6; PeakFlatButton.Down:=true;
    If PeakTimer.Enabled then begin PeakTimer.Enabled:=false; Vumeter.Stop; end;
  end else begin
    PeakPanel2.Visible:=true; PeakPanel.Height:=26; PeakFlatButton.Height:=24; PeakFlatButton.Down:=false;
    If not PeakTimer.Enabled then begin Vumeter.Start; PeakTimer_OnTimer(nil); PeakTimer.Enabled:=true; end;
  end;
  PlayerMainPanel.Height:=SongPanel.Height+PeakPanel.Height+PosPanel.Height+PlayerPanel.Height+2;
end;

procedure TMainForm.PosFlatButton_OnClick(Sender: TObject);
begin
  If PosPanel2.Visible then begin PosPanel2.Visible:=false; PosPanel.Height:=8; PosFlatButton.Height:=6; PosFlatButton.Down:=true;
  end else begin PosPanel2.Visible:=true; PosPanel.Height:=32; PosFlatButton.Height:=32; PosFlatButton.Down:=false; end;
  PlayerMainPanel.Height:=SongPanel.Height+PeakPanel.Height+PosPanel.Height+PlayerPanel.Height+2;
end;

procedure TMainForm.PlayerFlatButton_OnClick(Sender: TObject);
begin
  If PlayerPanel2.Visible then begin PlayerPanel2.Visible:=false; PlayerPanel.Height:=8; PlayerFlutButton.Height:=6; PlayerFlutButton.Down:=true;
  end else begin PlayerPanel2.Visible:=true; PlayerPanel.Height:=44; PlayerFlutButton.Height:=42; PlayerFlutButton.Down:=false; end;
  PlayerMainPanel.Height:=SongPanel.Height+PeakPanel.Height+PosPanel.Height+PlayerPanel.Height+2;
end;

procedure TMainForm.ButtonAddSel_OnClick(Sender: TObject);
var i1: integer; li1: TListItem;
begin
  If ListViewLeft.SelCount<1 then Exit;
  If (IsNowProtected)and(NeedPwForAddSel) then begin MsgNotAllowed; Exit; end;
  For i1:=0 to pred(ListViewLeft.Items.Count) do If ListViewLeft.Items[i1].Selected then begin
    li1:=ListViewRight.Items.Add;
    li1.Caption:=ListViewLeft.Items[i1].Caption;
    li1.SubItems.Add(ListViewLeft.Items[i1].SubItems[0]);
  end;
end;

procedure TMainForm.ButtonRemoveSel_OnClick(Sender: TObject);
var li1: TListItem;
begin
  If ListViewRight.Selected=nil then Exit;
  If (IsNowProtected)and(NeedPwForRemoveSel) then begin MsgNotAllowed; Exit; end;  
  With ListViewRight do Try
    li1:=Selected;
    If Items[Selected.Index+1]<>nil then Selected:=Items[Selected.Index+1] else
    If Items[Selected.Index-1]<>nil then Selected:=Items[Selected.Index-1];
    If PlayingListItem=li1 then ButtonStop_OnClick(nil);
    li1.Delete;
  Except end;
  ListView_OnChange(nil,nil,ctState);
end;

procedure TMainForm.ButtonAddAll_OnClick(Sender: TObject);
begin
  If ListViewLeft.Items.Count<1 then Exit;
  If (IsNowProtected)and(NeedPwForAddAll) then begin MsgNotAllowed; Exit; end;
  If MessageBox(Handle,'Really add all avaible songs to the list?','Add all?',MB_IconQuestion+MB_OkCancel+MB_SetForegr

⌨️ 快捷键说明

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