main.pas

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

PAS
1,262
字号
{###############################################################################
# Dipesh-MP3yk                                               Delphi-Sourcecode #
################################################################################
# by Sebastian Sauer (Dipesh)                                                  #
#   email:   mail@dipesh.de                                                    #
#   url:     www.dipesh.de                                                     #
# (C) 1999 - freeware, see the licenceagreements in readme.txt                 #
################################################################################
# MAIN.PAS - TMainForm                                                         #
# the mainform and -unit                                                       #
###############################################################################}

UNIT Main;

INTERFACE

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
     StdCtrls, ExtCtrls, ComCtrls, FileCtrl, Buttons, Menus,
     Gauges, IniFiles, ShellApi,
     MpegPlay, MpgTools, Vumeter; // Vcl-Components & Units

type
  TMainForm = class(TForm)
    PanelRight: TPanel;
    PanelLeft: TPanel;
    Splitter: TSplitter;
    MPEGPlayer: TMPEGPlayer;
    ButtonPanel: TPanel;
    OpenDialog: TOpenDialog;
    Splitter1: TSplitter;
    PanelLeftCaption: TPanel;
    PanelRightCaption: TPanel;
    ItemsPanel: TPanel;
    SaveDialog: TSaveDialog;
    ImageListBtn: TImageList;
    ListViewLeftPanel: TPanel;
    ListViewRightPanel: TPanel;
    ListViewRight: TListView;
    ItemsPanel2: TPanel;
    ButtonSelAll: TSpeedButton;
    ButtonSelNone: TSpeedButton;
    PopupMenuLeft: TPopupMenu;
    PopupMenuRight: TPopupMenu;
    PMlAddSel: TMenuItem;
    PMlAddAll: TMenuItem;
    PMlRemN: TMenuItem;
    PMlSelNone: TMenuItem;
    PMlSelGroup: TMenuItem;
    PMlSelAll: TMenuItem;
    PMrRemoveSel: TMenuItem;
    PMrRemoveAll: TMenuItem;
    N4: TMenuItem;
    PMrPlay: TMenuItem;
    PMrPause: TMenuItem;
    PMrStop: TMenuItem;
    PMrBack: TMenuItem;
    PMrNext: TMenuItem;
    ItemsPanelFlatButton: TSpeedButton;
    ItemsPanel1: TPanel;
    ButtonAddSel: TSpeedButton;
    ButtonRemoveSel: TSpeedButton;
    ButtonAddAll: TSpeedButton;
    ButtonRemoveAll: TSpeedButton;
    LeftTitleFlatButton: TSpeedButton;
    RightTitleFlatButton: TSpeedButton;
    ButtonPanelFlatButton: TSpeedButton;
    ButtonPanel1: TPanel;
    ButtonExit: TSpeedButton;
    ButtonOpen: TSpeedButton;
    ButtonPassword: TSpeedButton;
    ButtonOptions: TSpeedButton;
    ButtonAbout: TSpeedButton;
    ButtonSave: TSpeedButton;
    ButtonAddDir: TSpeedButton;
    ButtonID3Tag: TSpeedButton;
    ButtonAdd: TSpeedButton;
    GaugePanel: TPanel;
    Gauge: TGauge;
    ButtonSelInvert: TSpeedButton;
    PMlInvert: TMenuItem;
    N1: TMenuItem;
    PMlRemSel: TMenuItem;
    PMlRemAll: TMenuItem;
    MemoPanel: TPanel;
    Memo: TMemo;
    MemoFlatButton: TSpeedButton;
    AddDialog: TOpenDialog;
    ButtonSelect: TSpeedButton;
    ButtonSelGroup: TSpeedButton;
    SelectPopupMenu: TPopupMenu;
    selectnone1: TMenuItem;
    selectinvert1: TMenuItem;
    selectall1: TMenuItem;
    N2: TMenuItem;
    selectgroup1: TMenuItem;
    Vumeter: TVumeter;
    PeakTimer: TTimer;
    PlayerMainPanel: TPanel;
    SongPanel: TPanel;
    ButtonSong: TSpeedButton;
    SongFlatButton: TSpeedButton;
    PosPanel: TPanel;
    PlayerPanel: TPanel;
    PlayerPanel2: TPanel;
    ButtonBack: TSpeedButton;
    ButtonNext: TSpeedButton;
    ButtonPause: TSpeedButton;
    ButtonPlay: TSpeedButton;
    ButtonStop: TSpeedButton;
    Panel2: TPanel;
    PlayerFlutButton: TSpeedButton;
    PosFlatButton: TSpeedButton;
    ScrollBar1: TScrollBar;
    PeakPanel: TPanel;
    PeakFlatButton: TSpeedButton;
    PeakPanel2: TPanel;
    PeakButtonClear: TSpeedButton;
    PeakPanel3: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    PeakRight: TProgressBar;
    PeakLeft: TProgressBar;
    PosPanel2: TPanel;
    LabelInfo: TLabel;
    LabelNow: TLabel;
    LabelTotal: TLabel;
    ScrollBar: TScrollBar;
    ButtonRandom: TSpeedButton;
    LabelRem: TLabel;
    Panel1: TPanel;
    ListViewLeft: TListView;
    SearchPanelLeft: TPanel;
    SearchPanelRight: TPanel;
    SearchEditLeft: TEdit;
    SearchEditRight: TEdit;
    ScrollPosLabel: TLabel;
    procedure OnClose(Sender: TObject; var Action: TCloseAction);
    procedure OnCreate(Sender: TObject);
    procedure OnShow(Sender: TObject);
    procedure OnActivate(Sender: TObject);
    procedure ButtonPanel_OnResize(Sender: TObject);
    procedure PlayerPanel_OnResize(Sender: TObject);
    procedure MemoPanel_OnResize(Sender: TObject);
    procedure SearchPanelLeft_OnResize(Sender: TObject);
    procedure SearchPanelRight_OnResize(Sender: TObject);
    procedure ButtonExit_OnClick(Sender: TObject);
    procedure ButtonOpen_OnClick(Sender: TObject);
    procedure ButtonAdd_OnClick(Sender: TObject);
    procedure ButtonSave_OnClick(Sender: TObject);
    procedure SaveDialog_OnTypeChange(Sender: TObject);
    procedure ButtonAddDir_OnClick(Sender: TObject);
    procedure ButtonSelect_OnClick(Sender: TObject);
    procedure ButtonID3Tag_OnClick(Sender: TObject);
    procedure ButtonPassword_OnClick(Sender: TObject);
    procedure ButtonOptions_OnClick(Sender: TObject);
    procedure ButtonAbout_OnClick(Sender: TObject);
    procedure ListViewLeft_OnDblClick(Sender: TObject);
    procedure ListViewLeft_OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure ListView_OnColumnClick(Sender: TObject; Column: TListColumn);
    procedure ListViewRight_OnDblClick(Sender: TObject);
    procedure ListViewRight_OnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure ListView_OnDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
    procedure ListView_OnDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ListView_OnChange(Sender: TObject; Item: TListItem; Change: TItemChange);
    procedure PopupMenuLeft_OnPopup(Sender: TObject);
    procedure PopupMenuRight_OnPopup(Sender: TObject);
    procedure SearchEditLeft_OnExit(Sender: TObject);
    procedure SearchEditRight_OnExit(Sender: TObject);
    procedure SearchEdit_OnChange(Sender: TObject);
    procedure ButtonPanelFlatButton_OnClick(Sender: TObject);
    procedure LeftTitleFlatButton_OnClick(Sender: TObject);
    procedure RightTitleFlatButton_OnClick(Sender: TObject);
    procedure ItemsPanelFlatButton_OnClick(Sender: TObject);
    procedure MemoFlatButton_OnClick(Sender: TObject);
    procedure SongFlatButton_OnClick(Sender: TObject);
    procedure PeakFlatButton_OnClick(Sender: TObject);
    procedure PosFlatButton_OnClick(Sender: TObject);
    procedure PlayerFlatButton_OnClick(Sender: TObject);
    procedure ButtonAddSel_OnClick(Sender: TObject);
    procedure ButtonRemoveSel_OnClick(Sender: TObject);
    procedure ButtonAddAll_OnClick(Sender: TObject);
    procedure ButtonRemoveAll_OnClick(Sender: TObject);
    procedure ButtonSelNone_OnClick(Sender: TObject);
    procedure ButtonSelInvert_OnClick(Sender: TObject);
    procedure ButtonSelAll_OnClick(Sender: TObject);
    procedure ButtonSelGroup_OnClick(Sender: TObject);
    procedure PMlRemSel_OnClick(Sender: TObject);
    procedure PMlRemAll_OnClick(Sender: TObject);
    procedure ButtonSong_OnClick(Sender: TObject);
    procedure ButtonPlay_OnClick(Sender: TObject);
    procedure ButtonPause_OnClick(Sender: TObject);
    procedure ButtonStop_OnClick(Sender: TObject);
    procedure ButtonBack_OnClick(Sender: TObject);
    procedure ButtonNext_OnClick(Sender: TObject);
    procedure MPEGPlayer_OnPosUpdate(Pos, Len: Integer);
    procedure MPEGPlayer_OnPlayEnd(Sender: TObject);
    procedure PeakTimer_OnTimer(Sender: TObject);
    procedure PeakButtonClear_OnClick(Sender: TObject);
    procedure ScrollBar_OnScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer);
    procedure ScrollBar_OnChange(Sender: TObject);
  public
    function FontToString(ThisFont: TFont): string;
    function StringToFont(ThisString: string; var ToThisFont: TFont): boolean;
    function AddToSongList(ToListKind: integer; Mp3file: string; GetSongnameFromID3Tag: boolean; UseThisSongname: string): TListItem;
    procedure SetFontOrColor(SetNr: integer; SetThisFont: TFont; SetThisColor: TColor);
    procedure ExecuteCom(ExecuteStr: string; ShowState: integer; ShowErrorMsg: boolean);
    procedure ReadPlaylistfile(ThisPlaylistFileCom: string; ClearListBeforeAdding: boolean);
  protected
    procedure WndProc(var Message: TMessage); 
    procedure AppMessage(var Msg: TMsg; var Erledigt: Boolean);
    procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
    procedure ZoomMinimized;
    procedure ZoomRestore;
    procedure TrayMinimized;
    procedure TrayRestore(MakeVisibleTrue: boolean);
    procedure MsgNotAllowed;
  private
    TrayIconHandle: hWnd;
    FNotifyIconData: TNotifyIconData;
  end;

var flatButtonPanel, flatPanelLeftCaption, flatPanelRightCaption, flatItemsPanel, flatmemo,
    flatsongpanel, flatpeakpanel, flatpospanel, flatplayerpanel, PosIsChangingNow: boolean;
    mainleft, maintop, mainwidth, mainheight, mainsplitter1, mainsplitter2: integer;
    StartDir, PasswordStr: string;
    LastSongs: TStringList;
    MpgAudio: TMPEGAudio;
    MainForm: TMainForm;

const WM_SYSTRAY = WM_USER+$400;

      IniFileCom: string = 'DMP3yk.ini';
      // Player
      PlaylistFileCom: string = '';
      PlayingListItem: TListItem = nil;
      PlayRandom: boolean = true;
      PlayAutoStart: boolean = true;
      PlayAutoRemove: boolean = true;
      PlayAutoRandom: boolean = true;
      PlayUseID3Tags: boolean = true;
      PlayRemoveAfterBack: boolean = true;
      PlayThisPlaylistfileOnStart: string = '';
      SaveLastOpenPlaylistfile: boolean = false;
      PosUpdateTime: integer = 1000;
      PeakLevelUpdateTime: integer = 100;
      // Password
      IsNowProtected: boolean = false;
      NeedPwForExit: boolean = true;
      NeedPwForOpenPlaylist: boolean = true;
      NeedPwForSavePlaylist: boolean = true;
      NeedPwForAddDir: boolean = true;

⌨️ 快捷键说明

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