|
#1
|
|||
|
|||
*.m3u
Как работать с плейлистами в Delphi&
|
#2
|
||||
|
||||
Можно загрузить в ListBox. У меня работает.
|
#3
|
|||
|
|||
Я имел ввиду как работать с плейлистами *.m3u! То есть сохранять их из listbox? загружать их в listbox...
|
#4
|
||||
|
||||
Сохранять:
Код:
ListBox1.Items.SaveToFile('C:\playlist.m3u'); Код:
ListBox1.Items.LoadFromFile('C:\playlist.m3u'); |
#5
|
||||
|
||||
Плейлист m3u - простой текстовый файл со списком файлов (точнее полного пути до этих файлов). И всё! Ничего по моему мнению особенного.
|
#6
|
||||
|
||||
Winny, m3u это не просто список файлов, ты его хоть блокнотом открывал-то? А вообще его довольно просто самому обработать, при помощи TextFile.
Не профи, но и не чайник . D6 - лучше не придумали. Пока. |
#7
|
||||
|
||||
Цитата:
|
#8
|
||||
|
||||
Код:
procedure TForm1.Button1Click(Sender: TObject); var i: integer; p: integer; SL: TStringList; begin if OpenDialog1.Execute then begin SL := TStringList.Create; try SL.LoadFromFile(OpenDialog1.FileName); for i := 0 to SL.Count - 1 do begin if (Pos('#EXTM3U', SL[i]) > 0) then Continue else begin p := pos('#EXTINF', SL[i]); if p > 0 then p := Pos(',', SL[i]) + 1; (FindComponent(Format('ListBox%d', [2 - byte(p > 0)])) as TListBox).AddItem( Copy(SL[i], p, length(SL[i])), nil ); end; end; finally SL.Destroy; end; end; end; Код:
По дабл-клику на ListBox1 (по названию песни) - делать так: procedure TForm1.ListBox1DblClick(Sender: TObject); begin ShowMessage(ListBox2.Items[ListBox1.ItemIndex]); end; (вместо ShowMessage запускай на проигрывание файл) Программирование - это искусство и наш смысл жизни. Последний раз редактировалось moo2k, 27.10.2007 в 13:51. |
#9
|
|||
|
|||
Спасибки! А как теперь можно из ListBox сохранять *.m3u gktqqkbcns& Чтобы их мог использовать и я и сторонние программы?
|
#10
|
||||
|
||||
Код:
//Открытие файла .m3u function NotFullPathToFullPath(FM3U, FM: string): string; var Ress: string; begin Ress := ''; Result := ''; if FM[1] = '\' then begin Result := ExtractFileDrive(FM3U) + FM; exit; end else begin if FileExists(ExtractFilePath(FM3U) + FM) then begin Result := ExtractFilePath(FM3U) + FM; exit; end; if FileExists(FM) then begin Result := FM; exit; end; end; end; procedure ReadM3U(files: string); var List: TStringList; i, n: integer; s, a: string; ListItem: TListItem; begin Form1.ListView1.Clear; List := TStringList.Create; try List.LoadFromFile(files); for i := 0 to List.Count - 1 do begin if List.Strings[0] = '#EXTM3U' then begin s := List.Strings[i]; if s[1] <> '#' then begin ListItem.SubItems.Add(''); s := NotFullPathToFullPath(Files, s); ListItem.SubItems[1] := s; end else begin if s <> '#EXTM3U' then begin Delete(S, 1, 8); a := ''; n := 1; repeat a := a + s[n]; Inc(n); until s[n] = ','; Delete(S, 1, Length(a) + 1); ListItem := Form1.ListView1.Items.Add; ListItem.Caption := s; ListItem.SubItems.Add(Format('%d:%.2d', [StrToInt(a) div 60, StrToInt(a) mod 60])); end; end; end; end; finally List.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if OpenDialog1.Execute then ReadM3U(OpenDialog1.FileName) else exit; end; Код:
//Сохранение в формат .m3u function ExtNotFullPath(FM3U, FM: string): string; var i: integer; Ress: string; begin Ress := ''; Result := ''; for i := 1 to Length(FM3U) do begin if FM3U[i] = FM[i] then begin Ress := Ress + FM3U[i]; if FM3U[i] = '\' then Result := Ress; end else exit; end; end; function MinToSec(tim: string): string; var n: integer; a: string; begin n := 1; a := ''; repeat a := a + tim[n]; Inc(n); until tim[n] = ':'; Delete(tim, 1, Length(a) + 1); result := IntToStr((StrToInt(a) * 60) + StrToInt(tim)); end; procedure SaveList(SaveFile: string); var List: TStringList; i: integer; b, s: string; begin List := TStringList.Create; List.Add('#EXTM3U'); for i := 0 to Form1.ListView1.Items.Count - 1 do begin s := ''; List.Add('#EXTINF:' + MinToSec(Form1.ListView1.Items.Item[i].SubItems.Strings[0]) + ',' + Form1.ListView1.Items.Item[i].Caption); b := ExtNotFullPath(SaveFile, Form1.ListView1.Items.Item[i].SubItems.Strings[1]); if Length(b) < Length(ExtractFilePath(SaveFile)) then begin s := Form1.ListView1.Items.Item[i].SubItems.Strings[1]; if b<>`` then Delete(s, 1, 2); end else s := AnsiReplaceText(Form1.ListView1.Items.Item[i].SubItems.Strings[1], b, ''); List.Add(s); end; List.SaveToFile(SaveFile); List.Free; end; procedure TForm1.Button2Click(Sender: TObject); begin if SaveDialog1.Execute then begin if ExtractFileExt(SaveDialog1.FileName) = '.m3u' then SaveList(SaveDialog1.FileName) else SaveList(SaveDialog1.FileName + '.m3u'); end; end; Надеюсь на твой отзыв. Программирование - это искусство и наш смысл жизни. Последний раз редактировалось moo2k, 28.10.2007 в 14:07. |
#11
|
|||
|
|||
Спасибо ОГРОМНОЕ!
|
#12
|
|||
|
|||
А как отзыв оставить???
|
#13
|
||||
|
||||
Напротив с моим сообщением есть значок с весами. Вот там то и можно оставить отзыв.
Программирование - это искусство и наш смысл жизни. |
#14
|
|||
|
|||
А теперь подскжите как то же самое только чтобы выводились ПОЛНЫЕ пути треков из *.m3u в LISTBOX1! И как сохранять оттудаже
|
#15
|
||||
|
||||
Используй ExtractFileName.
Программирование - это искусство и наш смысл жизни. |