📄 uplist.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 + -