![]() |
|
|
#1
|
|||
|
|||
|
Как работать с плейлистами в 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.
|
|
#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.
|