Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 在列表框中显示文件_File_Delphi_Combobox_Listbox_Mp3 - Fatal编程技术网

File 在列表框中显示文件

File 在列表框中显示文件,file,delphi,combobox,listbox,mp3,File,Delphi,Combobox,Listbox,Mp3,我正在尝试创建一个mp3播放器,稍后我可能会将其用作创建卡拉OK的基础。到目前为止,唯一的问题是,我希望显示用户在列表框中选择的目录的*.mp3文件,而不必手动添加,然后逐1手动添加,并且它只显示歌曲名称而不是当前路径。我找到了一些方法,比如使用大型函数或使用组合框代替列表框,但这不是一种更简单的方法,也不是将文件从组合框传输到列表框?如果您只想列出特定文件夹中的所有文件,而不显示其图标,那么您可能需要使用Win 3.1中的文件列表框组件标签 通过设置目录属性,您可以轻松定义目录中显示的目录内容

我正在尝试创建一个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帮助中介绍了这些函数。如果你在细节上遇到困难,欢迎你提出具体问题,展示你的尝试(代码),并清楚地说明你的问题。