2016-01-31 74 views
-1

我試圖創建一個MP3播放器,以後我可以用作基地來創建卡拉OK,目前唯一的問題是我想顯示用戶選擇的目錄的* .mp3文件上,而無需手動1 1,它僅示出歌曲名稱不是當前路徑,則添加的列表框。我發現像使用大功能或代替列表框使用組合框一些方法,但它不是一個簡單的方法或將文件從組合框列表框轉移?在列表框中顯示文件Delphi

+0

推薦閱讀:[**歡迎SO ** (http://stackoverflow.com/tour)以及[**幫助中心**](http://stackoverflow.com/help)特別是關於問問題。 –

+1

你的問題不明確,範圍太廣,不過話說回來,你可以用'SelectDirectory()'讓用戶選擇一個目錄,'的FindFirst,FindNext中和FindClose'搜索目錄中的所有'.mp3'文件是上市。這些功能均包含在Delphi幫助。如果您遇到問題的詳細信息,歡迎您問的具體問題,顯示你的嘗試(代碼)SOFAR和明確說明你的問題。 –

回答

0

如果您只想列出特定文件夾中沒有圖標的所有文件,則可能需要使用Win 3.1標籤中的FileListBox組件。

通過設置Directory屬性,可以輕鬆地定義從中顯示目錄的內容。注意:這個屬性不會暴露目標管理器在設計時使用,但它是在運行時非常接近。

上述組件還允許定義過濾器甚至文件屬性,以僅顯示您所需的文件。

上述組件的唯一限制是它不允許您顯示子文件夾中的文件,這是很多最終用戶可能會喜歡的。

爲此,您必須自行搜索文件,並將它們逐個添加到所需組件。


如果你想只顯示文件名,而不是整個文件的路徑,你可以使用ExtractFileName程序,但請記住,你仍然會有讓你知道要打開的文件以某種方式保存的完整路徑某處當您想要的組分選擇特定文件。


還有一些模仿類似Windows Explorer像TShellTreeView或TShellListView與舊版本的Delphi附帶的文件瀏覽行爲提供一些組件。在谷歌

而且快速搜索顯示,甚至有更多的可用類似的組件。

0

試試這個代碼將添加文件名ListBox,並保存其路徑TStringList與同Index所以你可以使用同時獲得無處不在你的代碼

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.