доброго времени суток. помогите новичку, как сделать плей лист в delphi для media player'a. Хотя бы алгоритм, или лучше пример. Листом является ListBox, файлы добавлюятся в список из OpenDialog. Пытался делать, у меня воспроизводит первый по списку файл, а потом сразу последний и все. Вообщем, help plz
» Playlist для MediaPlayer в Delphi
vovanzp
В общем удали первую и последнюю строку своей программы и все будет работать.
ЗЫ, а по сути, здесь нет телепатов - давай код, будем копать.
В общем удали первую и последнюю строку своей программы и все будет работать.
ЗЫ, а по сути, здесь нет телепатов - давай код, будем копать.
ShIvADeSt
У меня получилось как бы из 3 звеньев состоит проигрывание из спика: добавление в список, процедура проигрывания и событие в плеере. При добавлении в список, начинается проигрывание первой позиции, но сразу после этого - прогигрывает последнюю и останавливается...
Процедура:
Код:
procedure TForm2.PlayMass(Ind:integer);
begin
if ListBox2.Items.Count>=Ind then
with Form1.MediaPlayer1 do begin
Notify:=false;
if ind<ListBox2.Items.Count then Filename:=ListBox2.Items.Strings[Ind];
Open;Play;Notify:=true;
end;
Form1.Caption:=ExtractFileName(Form1.MediaPlayer1.FileName)+' - Media Player';
Application.Title:=ExtractFileName(Form1.MediaPlayer1.FileName)+' - Media Player';
Form1.StatusBar1.Panels[0].Text:='Playing';
end;
У меня получилось как бы из 3 звеньев состоит проигрывание из спика: добавление в список, процедура проигрывания и событие в плеере. При добавлении в список, начинается проигрывание первой позиции, но сразу после этого - прогигрывает последнюю и останавливается...
Процедура:
Код:
procedure TForm2.PlayMass(Ind:integer);
begin
if ListBox2.Items.Count>=Ind then
with Form1.MediaPlayer1 do begin
Notify:=false;
if ind<ListBox2.Items.Count then Filename:=ListBox2.Items.Strings[Ind];
Open;Play;Notify:=true;
end;
Form1.Caption:=ExtractFileName(Form1.MediaPlayer1.FileName)+' - Media Player';
Application.Title:=ExtractFileName(Form1.MediaPlayer1.FileName)+' - Media Player';
Form1.StatusBar1.Panels[0].Text:='Playing';
end;
Цитата:
if MediaPlayer1.Mode=mpPlaying then
begin
Inc(pls.i);
Form2.PlayMass(pls.i);
end;
есть подозрение что вот здесь глюк.
в общем ломало разбираться что там глючит, вот рабочий пример
[more]
private
{ Private declarations }
I:INTEGER;
procedure PlayMass(Ind:integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.PlayMass(Ind:integer);
begin
if ListBox1.Items.Count>=Ind then
with Form1.MediaPlayer1 do begin
Notify:=false;
if ind<ListBox1.Items.Count then Filename:=ListBox1.Items.Strings[Ind];
Open;Play;Notify:=true;
end;
Form1.Caption:=ExtractFileName(Form1.MediaPlayer1.FileName)+' - Media Player';
Application.Title:=ExtractFileName(Form1.MediaPlayer1.FileName)+' - Media Player';
end;
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
koldir, kols, kolss, j: integer;
nam, str, cDir: string;
begin
if OpenDialog1.Execute then
begin
GetDir(0, cDir);
koldir := length(cdir);
for j:=0 to OpenDialog1.Files.Count-1 do
begin
kols := length(OpenDialog1.Files.Strings[j]);
ListBox1.Items.Add(OpenDialog1.Files.Strings[j]);
nam := Copy(OpenDialog1.Files.Strings[j], koldir+2, kols-koldir);
end;
end;
i:=0;
PlayMass(i);
end;
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.Mode=mpPlaying then
begin
Inc(i);
Form1.PlayMass(i);
end;
end;
[/more]
играют по очереди как в списке (добавляются только полные пути файлов, сами имена файлов нет). Проверь и потом от этого отталкивайся
ShIvADeSt
спасибо, все работает
Цитата:
ну у меня были два списка взаимосвязанных: в одном полные пути к файлам (из которого все воспроизводилось, он невидимый), а второй для пользователя, чтоб красиво было, только имена файлов
спасибо, все работает
Цитата:
играют по очереди как в списке (добавляются только полные пути файлов, сами имена файлов нет)
ну у меня были два списка взаимосвязанных: в одном полные пути к файлам (из которого все воспроизводилось, он невидимый), а второй для пользователя, чтоб красиво было, только имена файлов
vovanzp
Цитата:
Код: str := ChangeFileExt(ExtractFileName(OpenDialog1.Files[i]),'');
Цитата:
nam := Copy(OpenDialog1.Files.Strings[i], koldir+2, kols-koldir);Вот так меньше гемора и яснее:
kolss := length(nam);
str := copy(nam, 0, kolss-4);
Код: str := ChangeFileExt(ExtractFileName(OpenDialog1.Files[i]),'');
FireZone
попробую
ShIvADeSt
рано поторопился с выводами, тот пример что ты привел прекрасно работате при компиляции из Delphi, а вот если закрыть delphi и попробывать запустить приложение, то воспроизводит с такой же ошибкой - первый и сразу последний...
попробую
ShIvADeSt
рано поторопился с выводами, тот пример что ты привел прекрасно работате при компиляции из Delphi, а вот если закрыть delphi и попробывать запустить приложение, то воспроизводит с такой же ошибкой - первый и сразу последний...
vovanzp
фиг знает че там у тебя происходит, у меня дельфи 5.5 и все отлично работает как при компиляции из под дельфи, так и при запуске отдельно, когда дельфя закрыта.
Немного код модернизировал, проверь как там у тебя что прыгает
[more]
procedure TForm1.PlayMass(Ind:integer);
begin
if ListBox1.Items.Count>=Ind then
with Form1.MediaPlayer1 do begin
Notify:=false;
if ind<ListBox1.Items.Count then Filename:=ListBox1.Items.Strings[Ind];
Open;Play;Notify:=true;
end;
Form1.Caption:=ExtractFileName(Form1.MediaPlayer1.FileName)+' - Media Player';
Application.Title:=ExtractFileName(Form1.MediaPlayer1.FileName)+' - Media Player';
end;
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
koldir, kols, kolss, j: integer;
nam, str, cDir: string;
begin
if OpenDialog1.Execute then
begin
GetDir(0, cDir);
koldir := length(cdir);
for j:=0 to OpenDialog1.Files.Count-1 do
begin
kols := length(OpenDialog1.Files.Strings[j]);
ListBox1.Items.Add(OpenDialog1.Files.Strings[j]);
nam := Copy(OpenDialog1.Files.Strings[j], koldir+2, kols-koldir);
end;
end;
i:=0;
PlayMass(i)
end;
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.Mode=mpPlaying then
begin
Inc(i);
Showmessage('Now Playing - '+ListBox1.Items[i]);
ListBox1.ItemIndex:=i;
Form1.PlayMass(i);
end;
end;
[/more]
при переходе на след песню появляется мессага что будет петь дальше.
фиг знает че там у тебя происходит, у меня дельфи 5.5 и все отлично работает как при компиляции из под дельфи, так и при запуске отдельно, когда дельфя закрыта.
Немного код модернизировал, проверь как там у тебя что прыгает
[more]
procedure TForm1.PlayMass(Ind:integer);
begin
if ListBox1.Items.Count>=Ind then
with Form1.MediaPlayer1 do begin
Notify:=false;
if ind<ListBox1.Items.Count then Filename:=ListBox1.Items.Strings[Ind];
Open;Play;Notify:=true;
end;
Form1.Caption:=ExtractFileName(Form1.MediaPlayer1.FileName)+' - Media Player';
Application.Title:=ExtractFileName(Form1.MediaPlayer1.FileName)+' - Media Player';
end;
procedure TForm1.Button1Click(Sender: TObject);
var s: string;
koldir, kols, kolss, j: integer;
nam, str, cDir: string;
begin
if OpenDialog1.Execute then
begin
GetDir(0, cDir);
koldir := length(cdir);
for j:=0 to OpenDialog1.Files.Count-1 do
begin
kols := length(OpenDialog1.Files.Strings[j]);
ListBox1.Items.Add(OpenDialog1.Files.Strings[j]);
nam := Copy(OpenDialog1.Files.Strings[j], koldir+2, kols-koldir);
end;
end;
i:=0;
PlayMass(i)
end;
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
if MediaPlayer1.Mode=mpPlaying then
begin
Inc(i);
Showmessage('Now Playing - '+ListBox1.Items[i]);
ListBox1.ItemIndex:=i;
Form1.PlayMass(i);
end;
end;
[/more]
при переходе на след песню появляется мессага что будет петь дальше.
ShIvADeSt
все разобрался, код работает. большой фенкс.
Правда возник попутный вопрос, когда в приложении TrackBar изменяешь позицию, он в рамке какой-то получается тонкой, её можно как нибудь убрать?
все разобрался, код работает. большой фенкс.
Правда возник попутный вопрос, когда в приложении TrackBar изменяешь позицию, он в рамке какой-то получается тонкой, её можно как нибудь убрать?
vovanzp
Цитата:
это рамка фокуса, попробуй его перекидывать на другой контрол, либо юзай какой нить другой трэк бар.
Цитата:
Правда возник попутный вопрос, когда в приложении TrackBar изменяешь позицию, он в рамке какой-то получается тонкой, её можно как нибудь убрать?
это рамка фокуса, попробуй его перекидывать на другой контрол, либо юзай какой нить другой трэк бар.
Страницы: 1
Предыдущая тема: Как занести в буфер обмена ссылку
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.