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

📄 uplist.pas

📁 目前有许多MP3手机自动产生的播放列表只能播放固定目录中的MP3文件
💻 PAS
字号:
unit UPList;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, StrGrid, ExtCtrls, ComCtrls, StatusBarMy;
  
type
PList=Record
 FullName:Array[0..521] of Char;//南方高科S6683播放列表文件数据结构
End;

type
  TForm1 = class(TForm)
    OpenDlg: TOpenDialog;
    SaveDlg: TSaveDialog;
    GBox1: TGroupBox;
    Panel1: TPanel;
    StrGrid1: TStrGrid;
    Panel2: TPanel;
    Brow: TButton;
    Panel3: TPanel;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    EdPF1: TEdit;
    EdPF2: TEdit;
    B1: TButton;
    GroupBox2: TGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    EdLJ1: TEdit;
    EdLJ2: TEdit;
    B2: TButton;
    Save: TButton;
    Button1: TButton;
    BDel: TButton;
    BEdit: TButton;
    StBar: TStatusBarMy;
    procedure BrowClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure B1Click(Sender: TObject);
    procedure B2Click(Sender: TObject);
    procedure EdPF1Change(Sender: TObject);
    procedure EdLJ1Change(Sender: TObject);
    procedure Panel2Resize(Sender: TObject);
    procedure SaveClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure BDelClick(Sender: TObject);
    procedure BEditClick(Sender: TObject);
    procedure BEditMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure StBarMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure BrowMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure SaveMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure BDelMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private

  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
Function GetFileSize(FileName:String):Int64;StdCall;//取文件长度
Var FileInf:_WIN32_FIND_DATAA;
begin
FindFirstFile(PChar(FileName),FileInf);
Result:=FileInf.nFileSizeHigh*$80000000+FileInf.nFileSizeLow;
end;

procedure TForm1.BrowClick(Sender: TObject);
Var Cnt,RCnt,I:Integer;
    Fn:String;
    Drv,Path:String;
begin
OpenDlg.Filter:='MP3音乐文件|*.MP3|Amr录音文件|*.Amr|Wav声波文件|*.Wav|Midi迷笛文件|*.Mid|所有文件|*.*';
OpenDlg.Title:='添加音乐文件';
OpenDlg.FileName:='';
OpenDlg.Options:=[ofHideReadOnly,ofAllowMultiSelect,ofEnableSizing];
if OpenDlg.Execute Then
Begin

RCnt:=StrGrid1.RowCount-1;
Cnt:=OpenDlg.Files.Count;
StrGrid1.RowCount:=Cnt+RCnt+1;
For I:=0 To Cnt-1 do
 Begin
   Fn:=ExtractFileName(OpenDlg.Files.Strings[I]);
  Drv:=ExtractFileDrive(OpenDlg.Files.Strings[I]);
 Path:=ExtractFilePath(OpenDlg.Files.Strings[I]);
StrGrid1.Rows[RCnt+I].Add(IntToStr(RCnt+I));
StrGrid1.Rows[RCnt+I].Add(Drv);
Delete(Path,1,2);
StrGrid1.Rows[RCnt+I].Add(Path);
StrGrid1.Rows[RCnt+I].Add(Fn);
 End;
GBox1.Caption:='文件列表 (共 '+IntToStr(StrGrid1.RowCount-2)+' 个文件)'
End;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
StrGrid1.RowCount:=2;
StrGrid1.FixedRows:=1;
StrGrid1.Rows[0].Add('序号');
StrGrid1.Rows[0].Add('盘符');
StrGrid1.Rows[0].Add('路径');
StrGrid1.Rows[0].Add('文件名');
StrGrid1.ColWidths[1]:=30;
StrGrid1.ColWidths[2]:=120;
StrGrid1.ColWidths[3]:=150;
end;


procedure TForm1.B1Click(Sender: TObject);
Var Cnt,I:Integer;
begin
 Cnt:=StrGrid1.RowCount;
 if Cnt<2 Then Exit;
For I:=1 To Cnt do
 Begin
  if UpperCase(StrGrid1.Cells[1,I])=UpperCase(EdPF1.Text) Then StrGrid1.Cells[1,I]:=UpperCase(EdPF2.Text);
 End;
end;

procedure TForm1.B2Click(Sender: TObject);
Var Cnt,I:Integer;
begin
 Cnt:=StrGrid1.RowCount;
 if Cnt<2 Then Exit;
For I:=1 To Cnt do
 Begin
  if UpperCase(StrGrid1.Cells[2,I])=UpperCase(EdLJ1.Text) Then StrGrid1.Cells[2,I]:=UpperCase(EdLJ2.Text);
 End;
end;

procedure TForm1.EdPF1Change(Sender: TObject);
begin
B1.Enabled:=EdPF1.Text<>'';
end;

procedure TForm1.EdLJ1Change(Sender: TObject);
begin
B2.Enabled:=EdPF1.Text<>'';
end;

procedure TForm1.Panel2Resize(Sender: TObject);
Var W:Integer;
begin
W:=Panel2.Width;
if W>390 Then
Begin
W:=W-StrGrid1.ColWidths[0]-StrGrid1.ColWidths[1]-10;
StrGrid1.ColWidths[2]:=W Div 3;
StrGrid1.ColWidths[3]:=(W Div 3)*2;
End Else
Begin
StrGrid1.ColWidths[1]:=30;
StrGrid1.ColWidths[2]:=120;
StrGrid1.ColWidths[3]:=150;
End;
end;

procedure TForm1.SaveClick(Sender: TObject);
Var F:file of PList;
    PL:PList;
    I,RCnt:Integer;
    S,Fn:String;
begin
 RCnt:=StrGrid1.RowCount;
 if RCnt<2 Then Exit;
if (RCnt=2)and(StrGrid1.Cells[0,1]='') Then Exit;
if SaveDlg.Execute Then
Begin
Fn:=SaveDlg.FileName;
if FileExists(Fn) Then
 SetFileAttributes(PChar(Fn),FILE_ATTRIBUTE_NORMAL);
AssignFile(F,Fn);
Rewrite(F);

For I:=1 To RCnt-2 do
Begin
 S:=StrGrid1.Cells[1,I]+StrGrid1.Cells[2,I]+StrGrid1.Cells[3,I];
 FillChar(PL.FullName,522,#0);

//将ASCII转为UniCode
MultiByteToWideChar(0,MB_PRECOMPOSED,PChar(S),Length(S),@PL.FullName,Length(S));

Write(F,PL);

End;
CloseFile(F);
 SetFileAttributes(PChar(Fn),FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_READONLY);
End;

end;

procedure TForm1.Button1Click(Sender: TObject);
Var R,I:Integer;
begin
R:=StrGrid1.RowCount;
For I:=1 To R-1 do
 StrGrid1.Rows[I].Clear;

StrGrid1.RowCount:=2;
GBox1.Caption:='文件列表';
end;

procedure TForm1.BDelClick(Sender: TObject);
Var Cnt,R,I:Integer;
begin
R:=StrGrid1.Row;
Cnt:=StrGrid1.RowCount;
if R<1 Then Exit;
if StrGrid1.Cells[0,R]='' Then Exit;
StrGrid1.Rows[R].Clear;
For I:=R To Cnt-2 do
 Begin
  StrGrid1.Cells[0,I]:=IntToStr(I);
  StrGrid1.Cells[1,I]:=StrGrid1.Cells[1,I+1];
  StrGrid1.Cells[2,I]:=StrGrid1.Cells[2,I+1];
  StrGrid1.Cells[3,I]:=StrGrid1.Cells[3,I+1];
 End;
StrGrid1.Cells[0,Cnt-2]:='';
StrGrid1.RowCount:=Cnt-1;
GBox1.Caption:='文件列表 (共 '+IntToStr(StrGrid1.RowCount-2)+' 个文件)'
end;

procedure TForm1.BEditClick(Sender: TObject);
Var PLF:File of PList;
    Buf:PList;
    Drv,Path,Fn:String;
    S:Array[0..521] of Char;
    Cnt,I,Len:Integer;
begin
if StrGrid1.Cells[0,1]<>'' Then
Begin
 ShowMessage('表中有数据');
 Exit;
End;
OpenDlg.Filter:='播放列表文件|*.Txt|所有文件|*.*';
OpenDlg.Title:='打开播放列表文件';
OpenDlg.FileName:='';
OpenDlg.Options:=[ofHideReadOnly,ofEnableSizing];
Len:=Sizeof(PList);
if OpenDlg.Execute Then
Begin
 Fn:=OPenDlg.FileName;
Cnt:=GetFileSize(Fn);
  if Cnt Mod Len<>0 Then
    Begin
     ShowMessage('这不是一个有效的手机MP3播放列表文件!');
     Exit;
    End;
Cnt:=Cnt div Len;//乐曲数
StrGrid1.RowCount:=Cnt+2;
SetFileAttributes(PChar(Fn),FILE_ATTRIBUTE_NORMAL);
AssignFile(PLF,Fn);
Reset(PLF);

For I:=0 To Cnt-1 do
Begin
Seek(PLF,I);
 Read(PLF,Buf);
//将UnCode码转为ASCII码
FillChar(S,Len,#0);
WideCharToMultibyte(0,0,@Buf.FullName,Len,@S,Len,nil,nil);

   Fn:=ExtractFileName(StrPas(@S));
  Drv:=ExtractFileDrive(StrPas(@S));
 Path:=ExtractFilePath(StrPas(@S));
 
StrGrid1.Rows[I+1].Add(IntToStr(I+1));
StrGrid1.Rows[I+1].Add(Drv);
Delete(Path,1,2);
StrGrid1.Rows[I+1].Add(Path);
StrGrid1.Rows[I+1].Add(Fn);
End;
GBox1.Caption:='文件列表 (共 '+IntToStr(StrGrid1.RowCount-2)+' 个文件)'
End;

end;


procedure TForm1.BEditMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
StBar.SimpleText:='打开已存在的播放列表进行编辑';
end;

procedure TForm1.StBarMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
StBar.SimpleText:='';
end;

procedure TForm1.BrowMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
StBar.SimpleText:='向列表中添加一个或多个音乐文件';
end;

procedure TForm1.SaveMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
StBar.SimpleText:='将列表中的内容保存为播放列表文件';
end;

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
StBar.SimpleText:='删除列表中的所有内容';
end;

procedure TForm1.BDelMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
StBar.SimpleText:='删除列表中的一行';
end;

end.

⌨️ 快捷键说明

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