File 在列表框中显示文件
我正在尝试创建一个mp3播放器,稍后我可能会将其用作创建卡拉OK的基础。到目前为止,唯一的问题是,我希望显示用户在列表框中选择的目录的*.mp3文件,而不必手动添加,然后逐1手动添加,并且它只显示歌曲名称而不是当前路径。我找到了一些方法,比如使用大型函数或使用组合框代替列表框,但这不是一种更简单的方法,也不是将文件从组合框传输到列表框?如果您只想列出特定文件夹中的所有文件,而不显示其图标,那么您可能需要使用Win 3.1中的File 在列表框中显示文件,file,delphi,combobox,listbox,mp3,File,Delphi,Combobox,Listbox,Mp3,我正在尝试创建一个mp3播放器,稍后我可能会将其用作创建卡拉OK的基础。到目前为止,唯一的问题是,我希望显示用户在列表框中选择的目录的*.mp3文件,而不必手动添加,然后逐1手动添加,并且它只显示歌曲名称而不是当前路径。我找到了一些方法,比如使用大型函数或使用组合框代替列表框,但这不是一种更简单的方法,也不是将文件从组合框传输到列表框?如果您只想列出特定文件夹中的所有文件,而不显示其图标,那么您可能需要使用Win 3.1中的文件列表框组件标签 通过设置目录属性,您可以轻松定义目录中显示的目录内容
文件列表框
组件标签
通过设置目录
属性,您可以轻松定义目录中显示的目录内容。注意:此属性未向设计时使用的对象检查器公开,但在运行时完全可以访问
上述组件还允许定义过滤器甚至文件属性,以便仅显示所需的文件
提到的组件的唯一限制是,它不允许您显示子文件夹中的文件,这可能是很多最终用户都希望看到的
为此,您必须自己搜索这些文件,并将它们逐个添加到所需的组件中
如果您只想显示文件名而不是整个文件路径,您可以使用
ExtractFileName
过程,但请记住,您仍必须以某种方式将完整路径保留在某个位置,以便在所需组件上选择某个文件时知道要打开哪个文件
还有一些组件可以模拟类似于Windows资源管理器的文件浏览行为,如旧版本Delphi附带的TShellTreeView或TShellListView
谷歌上的快速搜索显示,还有更多类似的组件可用。试试这段代码,它会将文件名添加到
列表框
,并用相同的索引将其路径保存到TStringList
,这样你就可以在代码中的任何地方都使用get
var
Form1: TForm1;
FilePath: TStringList;
implementation
{$R *.dfm}
procedure FindFiles(FilesList: TStrings; FilesPath: TStrings;
StartDir, FileMask: string);
var
SR: TSearchRec;
DirList: TStringList;
IsFound: Boolean;
i: integer;
begin
if StartDir[length(StartDir)] <> '\' then
StartDir := StartDir + '\';
IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0;
while IsFound do
begin
FilesPath.Add(StartDir + SR.Name);
FilesList.Add(SR.Name);
IsFound := FindNext(SR) = 0;
end;
FindClose(SR);
DirList := TStringList.Create;
IsFound := FindFirst(StartDir + '*.*', faAnyFile, SR) = 0;
while IsFound do
begin
if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
DirList.Add(StartDir + SR.Name);
IsFound := FindNext(SR) = 0;
end;
FindClose(SR);
for i := 0 to DirList.Count - 1 do
FindFiles(FilesList, FilePath, DirList[i], FileMask);
DirList.Free;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FilePath.Free;
end;
procedure TForm1.sButton1Click(Sender: TObject);
begin
FilePath := TStringList.Create;
FindFiles(sListBox1.Items, FilePath, EditStartDir.Text, '*.mp3');
{FilePath is where full file path saved, EditStartDir is where to search}
end;
procedure TForm1.sListBox1Click(Sender: TObject);
begin
If sListBox1.ItemIndex > -1 then
sEdit2.Text := FilePath.Strings[sListBox1.ItemIndex];
end;
end.
var
表1:TForm1;
文件路径:TStringList;
实施
{$R*.dfm}
过程findFile(文件列表:TStrings;文件路径:TStrings;
StartDir,文件掩码:字符串);
变量
SR:TSearchRec;
目录:TStringList;
IsFound:布尔型;
i:整数;
开始
如果StartDir[长度(StartDir)]“\”则
StartDir:=StartDir+'\';
IsFound:=FindFirst(StartDir+FileMask,faAnyFile-faDirectory,SR)=0;
当我发现你在做什么的时候
开始
添加(StartDir+SR.Name);
FilesList.Add(SR.Name);
IsFound:=FindNext(SR)=0;
结束;
FindClose(SR);
DirList:=TStringList.Create;
IsFound:=FindFirst(StartDir+'*.*',faAnyFile,SR)=0;
当我发现你在做什么的时候
开始
如果((SR.Attr和faDirectory)0)和(SR.Name[1]'.'),则
目录列表添加(StartDir+SR.Name);
IsFound:=FindNext(SR)=0;
结束;
FindClose(SR);
对于i:=0到DirList.Count-1 do
FindFile(文件列表、文件路径、目录列表[i]、文件掩码);
DirList.Free;
结束;
过程TForm1.FormClose(发送方:TObject;var操作:TCloseAction);
开始
免费的;
结束;
程序TForm1.sButton1Click(发送方:TObject);
开始
FilePath:=TStringList.Create;
FindFile(sListBox1.Items、文件路径、EditStartDir.Text、*.mp3');
{FilePath是保存完整文件路径的位置,EditStartDir是搜索位置}
结束;
程序TForm1.sListBox1Click(发送方:ToObject);
开始
如果sListBox1.ItemIndex>-1,则
sEdit2.Text:=FilePath.Strings[sListBox1.ItemIndex];
结束;
结束。
推荐阅读:尤其是关于提问。您的问题不清楚,内容太广泛,但是您可以使用SelectDirectory()
让用户选择一个目录,FindFirst、FindNext和FindClose
在目录中搜索要列出的所有.mp3
文件。Delphi帮助中介绍了这些函数。如果你在细节上遇到困难,欢迎你提出具体问题,展示你的尝试(代码),并清楚地说明你的问题。