Помощь - Поиск - Пользователи - Календарь
Полная версия: M3u файлы
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Артемий
Народ помогите! Как мне с помощью ListBox открыть m3u файл. blink.gif Че-то никак не получается.. заранее благодарен! smile.gif
volvo
Что именно не получается? Просто запихнуть в ListBox названия песен и имена файлов, хранящиеся в M3U файле?
blink.gif

ListBox1.Items.LoadFromFile(OpenDialog1.FileName);
, и потом проходи по всем строкам и удаляй ненужную информацию: #EXTM3U и #EXTINF с помощью StringReplace ...

Или ты имеешь в виду что-то другое?
Артемий
Цитата
Просто запихнуть в ListBox названия песен и имена файлов, хранящиеся в M3U файле?

И ещё добавить в массив строк путь к каждой песне, которая есть в M3u файле..не совсем пойму как это можно сделать.в принципе хотелось узнать как считать из m3u файла все данные, типа путь, название. А потом при шелчке по песне медиаплеер читает из массива путь к песне, и играет..че-то короче я намутил.
volvo
  if OpenDialog1.Execute then begin
ListBox1.Items.LoadFromFile(OpenDialog1.FileName);

for i := 0 to ListBox1.Items.Count - 1 do
if (Pos('#EXTM3U', ListBox1.Items[i]) = 0)
and
(pos('#EXTINF', ListBox1.Items[i]) = 0)
then begin
SetLength(s, length(s) + 1);
s[pred(length(s))] := ListBox1.Items[i];
end;
end;


?

Только вот я не пойму, зачем тебе еще массив надо? Есть же ListBox.Items, которые хранят все, что нужно...
Артемий
спасибо за код.Массив нужен так - допустим в items только имена, а путь при щелчке по имени к файлам как получить? я подумал что все пути к файлу добавить в массив, и при щелчке по item,у Листбокса в filename плеера добавляется нужный путь из массива и все добро играется..
volvo
На форме - 2 ListBox-а: один хранит названия песен (ListBox1, именно так должен называться), второй (возможно - скрытый, ListBox2) - пути к ним... Заполнять так:

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 запускай на проигрывание файл)

Так лучше?
Артемий
Да, замечательно! smile.gif Смысл в принципе теперь понятен!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.