📄 playlist.pas
字号:
end;
procedure TForm3.LbNameKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
KeyDown(Lbname,LbPath,key,shift);
end;
procedure TForm3.MoreFilNameLbKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
KeyDown(MoreFilNameLb,MoreFilPathLb,key,Shift)
end;
procedure TForm3.AddFolderDef(InsertPos1:word;DragLbName,DragLbPath:Tlistbox;FolderSel:string;msg:Tmessage);//;FoldLbPath,FoldLbName
var
SeaRec:Tsearchrec;
oldDir:string;
begin
if directoryExists(Foldersel) then
begin//进入该目录,进入其中的子目录和文件
oldDir:=GetCurrentDir;
chDir(FolderSel);
if FindFirst(FolderSel+'\*.*',faAnyFile,SeaRec)=0 then
begin
repeat
if (searec.Attr and fadirectory )>0 then
begin//如果不是目录 且 不是'.' 且 '..'则递归调用
if (SeaRec.Name[1]<>'.') then
AddFolderDef(InsertPos1,LbName,LbPath,SeaRec.Name,msg);//进入子目录
end//递归调用结束
else //若是文件 则直接添加该文件
if pos(lowercase(ExtractFileExt(SeaRec.Name)),'*.*.mp3.wav.asf.dat.avi.mpeg*.wma.mid')>=4 then
begin
DragLbPath.Items.Add(FolderSel+'\'+SeaRec.Name);
DragLbName.Items.Add(GetFileName(FolderSel+'\'+SeaRec.Name));
end;
until FindNext(SeaRec)<>0;
end;//结束查找
end
else//为递归调用设置标志,否则进入
end;
procedure TForm3.DelSpbClick(Sender: TObject);
begin
try
if dragPos=LbName1 then
DeleteDefine(LbName,LbPath)
Else
DeleteDefine(MoreFilNameLb,MoreFilPathLb);
except
exit;
end;
end;
procedure TForm3.ClearSpbClick(Sender: TObject); //清空文件列表
begin
case ComboBox1.ItemIndex of
1:
begin
if MessageDlg('确认要清空'+' "所有音乐" '+'下的文件列表 ? ',mtConfirmation,
[mbYes,MbNo],0)=MrYes then//确认要清空文件列表
begin
LbName.Clear; //清空文件列表
LbPath.Clear;
end;
end;
0:
begin
if MessageDlg('确认要清空'+' "正在播放" '+'下的文件列表 ? ',mtConfirmation,
[mbYes,MbNo],0)=MrYes then
begin
MoreFilNameLb.Clear; //清空文件列表
MoreFilpathLb.Clear;
end;
end;
end;
end;
procedure TForm3.CloseSpbClick(Sender: TObject); //隐藏播放列表
begin
Form3.Hide; //用Hide 比close更好
end;
procedure TForm3.AddFolderSpbClick(Sender: TObject);
var
SelDir:string;
message:Tmessage;
begin //别忘了加上FileCtrl在 uses 中
ComboBox1.ItemIndex:=1;//显示'所有音乐'列表
if SelectDirectory(SelDir,[sdAllowCreate],0) then
AddFolderDef(LbName.Items.Count,LbName,LbPath,SelDir,message);//添加到播放列表中
end;
procedure TForm3.AddFilePopPopup(Sender: TObject);
begin
AddFolderSpb.Visible:=true;
AddFilesSpb.Visible:=true;
end;
procedure TForm3.AddFilesSpbClick(Sender: TObject);
var
CurrentFiles,Files,i:word;
SelFile:string;//所选文件
begin
try
if (LbName.ItemIndex<>-1) then //如果选中了文件
SelFile:=ExtractFileDir(Lbpath.Items.Strings[LbName.ItemIndex])
else
if (MoreFilNameLb.ItemIndex<>-1) then
SelFile:=ExtractFileDir(MoreFilPathLb.Items.Strings[MoreFilNameLb.ItemIndex]);
Form1.OpenDialog1.InitialDir:=SelFile;
//CurrentFiles:=Lbname.Items.Count;不需判断,因为添加在Listbox 后面
Form1.OpenDialog1.Options:=[ofEnableSizing,ofAllowMultiSelect];//设置多选
Form1.Opendialog1.Title:='添加一个或多个文件';
if Form1.OpenDialog1.Execute then
begin
for i:=0 to (Form1.OpenDialog1.Files.Count-1) do
begin
CurrentFile:=Form1.OpenDialog1.Files.strings[i];
if not DirectoryExists(CurrentFile) then//如果不是文件夹则添加
begin
LbName.Items.Add(GetFileName(currentFile));
LbPath.Items.Add(currentFile);
end;
end;
end;
ComboBox1.ItemIndex:=1;//显示'所有音乐'列表
except
exit;
end;
end;
procedure TForm3.AddFileSpbClick(Sender: TObject);
begin
if not AddFilesSpb.Visible then
begin
AddFilesSpb.Top:=AddFileSpb.Top+AddFilesSpb.Height;//添加文件的按扭位置
AddFolderSpb.Top:=AddFileSpb.Top+2*AddFilesSpb.Height;
end;
AddFolderSpb.Show;//显示添加文件的两个按钮
AddFilesSpb.Show;
end;
procedure TForm3.ReNameedMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//ReNameEdExit(sender);//调用改名过程
end;
procedure TForm3.CopyClick(Sender: TObject);
//const SaveDlg:TFileSaveAs.Dialog;
begin
if LbName.ItemIndex<>-1 then //确定是哪个列表
SaveFile(LbName,LbPath);
if MoreFilNameLb.ItemIndex<>-1 then
SaveFile(MoreFilNameLb,MoreFilPathLb);
end;
procedure TForm3.SaveFile(SaveLbName,SaveLbPath:Tlistbox);//自定义保存文件过程
var
FromFIle,ToFile,FileFilter:string;
SaveIndex:longInt;
begin
SaveIndex:=SaveLbName.ItemIndex;
FromFile:=SaveLbPath.Items.Strings[SaveIndex];//得到要复制的文件名
if not FileFind(FromFile) then//查找文件是否存在
exit;
with FileSaveAs1.Dialog do
begin
FileName:=SaveLbPath.Items.Strings[SaveIndex];
Filter:=ExtractFileExt(FromFile);//设置过滤器
options:=[ofAllowMultiSelect];
if not execute then exit;//若按取消键,则退出
if FileExists(FileName) then //
if messageDlg('文件已经存在在,是否替换?'
,mtConfirmation,[mbCancel,mbYes],0)<>mrYes then
exit;//退出
with TMemorystream.Create do//相当于创建了TMemorystream的一个实例AMemorystream
try
LoadFromFIle(FromFile);
Application.ProcessMessages;
SaveToFile(FileName+Filter);
showmessage('文件复制完成!');
except
showmessage('文件复制出错!目标磁盘可能已满!');
free;
end;
end;
end;
procedure TForm3.MoreFilNameLbMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
MouDnPos:=x;//记下鼠标按下时的位置
MouDn:=True;
MouDnIndex:=Tlistbox(sender).ItemAtPos(Point(x,y),True);//参数为true时,MouDnIndex为-1
case dragpos of //取得鼠标的位置
LbName1:
begin
if MoudnIndex<>-1 then
MoudnFile:=LbPath.items.Strings[MoudnIndex];
end;
MoreFilNameLb1:
begin
if MoudnIndex<>-1 then
MoudnFile:=MoreFilPathLb.items.Strings[MouDnIndex];
end;
end;
if Button=mbright then //这比在mouseup中处理好上些
if (MouDnIndex<>-1) then
begin
Tlistbox(sender).Selected[MouDnIndex]:=true;
PopupMenu1.AutoPopup:=true;
copy.Enabled:=true;
end
else
begin
PopupMenu1.AutoPopup:=false;
copy.Enabled:=false;
end;
end;
procedure TForm3.ScanFileClick(Sender: TObject);//浏览文件所在目录
var
Return:integer;
begin
if not FileFind(MoudnFile) then//判断文件是否存在
exit;
Return:=winexec(Pchar('explorer.exe /e,/select,'+MoudnFile),Sw_showNormal);
case Return of //MoudnFile时选择的文件
Error_Bad_format: showmessage('不是一个Win32 合法的程序 ');
Error_File_Not_Found: showmessage('指定文件未找到');
end;
end;
procedure TForm3.FormShow(Sender: TObject);
begin
Form3.top:=Form1.top+Form1.Height;//初始化播放列表的位置
Form3.Left:=Form1.Left+Form1.Width-Form3.Width;
end;
procedure TForm3.SpeedButton1Click(Sender: TObject);
begin
Form3.hide;
end;
procedure TForm3.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button=mbleft then
begin//该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理
ReleaseCapture;
Perform(WM_SYSCOMMAND,$F012,0);
end;
end;
procedure TForm3.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if AddFolderSpb.Visible or AddFilesSpb.Visible then
begin
AddFolderSpb.Hide;//隐藏添加文件的两个按钮
AddFilesSpb.Hide;
end;
if ClearSpb.Visible then
begin
DelSpb.hide;
ClearSpb.Hide;
end;
end;
procedure TForm3.FormResize(Sender: TObject);
begin
if Form3.width<>WidthFrm then //判断窗体的宽度改变
begin
ComboBox1.Width:=form3.Width-10;
LbName.Width:=form3.Width-10;
MoreFilNameLb.Width:=form3.Width-10;
end;
if Form3.height<>HeightFrm then // 判断窗体的高度改变
begin
LbName.height:=LbName.height+abs(Form3.height-HeightFrm+10);
MoreFilNameLb.height:=LbName.height+abs(Form3.height-HeightFrm+10);
end;
HeightFrm:=form3.height;
WidthFrm:=form3.width;
end;
procedure TForm3.ShowDelSpbClick(Sender: TObject);
begin
if not ClearSpb.Visible then
begin
DelSpb.Top:=ShowDelspb.Top-DelSpb.Height;//添加删除文件的按扭位置
ClearSpb.Top:=ShowDelspb.Top-2*ClearSpb.Height;
end;
DelSpb.Show;
ClearSpb.Show;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -