Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Playlist для MediaPlayer в Delphi

Автор: vovanzp
Дата сообщения: 28.10.2006 08:46
доброго времени суток. помогите новичку, как сделать плей лист в delphi для media player'a. Хотя бы алгоритм, или лучше пример. Листом является ListBox, файлы добавлюятся в список из OpenDialog. Пытался делать, у меня воспроизводит первый по списку файл, а потом сразу последний и все. Вообщем, help plz
Автор: ShIvADeSt
Дата сообщения: 30.10.2006 00:49
vovanzp
В общем удали первую и последнюю строку своей программы и все будет работать.
ЗЫ, а по сути, здесь нет телепатов - давай код, будем копать.
Автор: vovanzp
Дата сообщения: 30.10.2006 08:20
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;
Автор: ShIvADeSt
Дата сообщения: 30.10.2006 09:38

Цитата:
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]

играют по очереди как в списке (добавляются только полные пути файлов, сами имена файлов нет). Проверь и потом от этого отталкивайся
Автор: vovanzp
Дата сообщения: 30.10.2006 10:21
ShIvADeSt
спасибо, все работает


Цитата:
играют по очереди как в списке (добавляются только полные пути файлов, сами имена файлов нет)

ну у меня были два списка взаимосвязанных: в одном полные пути к файлам (из которого все воспроизводилось, он невидимый), а второй для пользователя, чтоб красиво было, только имена файлов
Автор: FireZone
Дата сообщения: 30.10.2006 11:27
vovanzp

Цитата:
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]),'');
Автор: vovanzp
Дата сообщения: 30.10.2006 11:30
FireZone
попробую

ShIvADeSt
рано поторопился с выводами, тот пример что ты привел прекрасно работате при компиляции из Delphi, а вот если закрыть delphi и попробывать запустить приложение, то воспроизводит с такой же ошибкой - первый и сразу последний...
Автор: ShIvADeSt
Дата сообщения: 31.10.2006 01:00
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]
при переходе на след песню появляется мессага что будет петь дальше.
Автор: vovanzp
Дата сообщения: 31.10.2006 10:24
ShIvADeSt
все разобрался, код работает. большой фенкс.

Правда возник попутный вопрос, когда в приложении TrackBar изменяешь позицию, он в рамке какой-то получается тонкой, её можно как нибудь убрать?
Автор: ShIvADeSt
Дата сообщения: 01.11.2006 01:02
vovanzp

Цитата:
Правда возник попутный вопрос, когда в приложении TrackBar изменяешь позицию, он в рамке какой-то получается тонкой, её можно как нибудь убрать?

это рамка фокуса, попробуй его перекидывать на другой контрол, либо юзай какой нить другой трэк бар.

Страницы: 1

Предыдущая тема: Как занести в буфер обмена ссылку


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.