Недавно начал писать простенький медиапеер в Delphi. Что-то взял из исходников, что-то из головы, тут вопрос такой:
На форме есть два осн. компонента: Озор папок (название моё) и List box1
Когда выбираешь папку, в List Box - е появляются вайлы для проигрывания, их можно проиграть двойным кликом на имени файла. но если дадо добавить в List box файлы из нескольких папок ? допустим я добавил файлы с Рабочего стола, дальше выбираю "мой комп., диск С, музыка", то файлы из папки "Рабочий стол" исчезают !!!!!. Как сделать чтобы в List box можно была добавлять файлы с разных папок ? (вариант стереть сторку ListBox1.Clear; не работает, т.к. ранее добавленные файлы не воспроизводятся).
Заранее спасибо !!!
Участок кода плеера:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, MPlayer, StdCtrls, ExtCtrls, ComCtrls, ShellCtrls,
Menus, mmsystem;
type
TForm1 = class(TForm)
ListBox1: TListBox;
MediaPlayer1: TMediaPlayer;
SpeedButton1: TSpeedButton;
Label1: TLabel;
Label2: TLabel;
Timer1: TTimer;
CheckBox1: TCheckBox;
ShellTreeView1: TShellTreeView;
Label3: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
Label4: TLabel;
TrackBar1: TTrackBar;
Label5: TLabel;
OpenDialog1: TOpenDialog;
N7: TMenuItem;
OpenDialog2: TOpenDialog;
Button1: TButton;
SaveDialog1: TSaveDialog;
Timer2: TTimer;
TrackBar2: TTrackBar;
Button2: TButton;
Button3: TButton;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
Button4: TButton;
Button5: TButton;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure PlayList(Path:String);
procedure Play;
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure ShellTreeView1Change(Sender: TObject; Node: TTreeNode);
procedure TrackBar1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure TrackBar2ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);
procedure ListBox1DblClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure N7Click(Sender: TObject); //воспроизведение
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
cDir: String;
min, sec: Integer; //время воспроизведения
implementation
uses Unit2, Unit3;
{$R *.dfm}
//формируем список файлов
procedure TForm1.PlayList(Path:String);
var
LpBuf: PChar;
sWinDir: String;
SearchRec: TSearchRec; //структура SearchRec содержит
//информацию о файле, удостоверяющем
//условию поиска
begin
Label3.Visible:=false;
ListBox1.Clear;
//сформировать список файлов
if FindFirst(Path + '*.mp3', faAnyFile, SearchRec) = 0 then
begin
ListBox1.Items.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
ListBox1.Items.Add(SearchRec.Name);
end;
if FindFirst(Path + '*.ogg', faAnyFile, SearchRec) = 0 then
begin
ListBox1.Items.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
ListBox1.Items.Add(SearchRec.Name);
end;
if FindFirst(Path + '*.wma', faAnyFile, SearchRec) = 0 then
begin
ListBox1.Items.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
ListBox1.Items.Add(SearchRec.Name);
end;
if FindFirst(Path + '*.avi', faAnyFile, SearchRec) = 0 then
begin
ListBox1.Items.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
ListBox1.Items.Add(SearchRec.Name);
end;
if FindFirst(Path + '*.wav', faAnyFile, SearchRec) = 0 then
begin
ListBox1.Items.Add(SearchRec.Name);
while (FindNext(SearchRec) = 0) do
ListBox1.Items.Add(SearchRec.Name);
end;
If ListBox1.Items.Count > 0 Then
ListBox1.ItemIndex := 0; //установить указатель на первую строку
end;
//воспроизвести композицию, название котрой выделено в списке
procedure TForm1.Play;
begin
Label1.Caption := ListBox1.Items[ListBox1.ItemIndex];
form1.Caption := 'lost player -- ' + ListBox1.Items[ListBox1.ItemIndex];
MediaPlayer1.FileName := cDir + '\' + ListBox1.Items[ListBox1.ItemIndex];
try
MediaPlayer1.Open;
Label3.visible:=true;
TrackBar2.Max:=MediaPlayer1.length;
trackbar2.min:=MediaPlayer1.StartPos;
Timer2.Enabled:=true;
except
on EMCIDeviceError do
begin
ShowMessage('Ошибка обращения к файлу');
Exit;
end;
end;
MediaPlayer1.Display:=form3.Panel1;
MediaPlayer1.DisplayRect:=rect(0,0, form3.Panel1.Width, form3.Panel1.Height);
MediaPlayer1.Play;
min := 0;
sec := 0;
Timer1.Enabled := True;
SpeedButton1.Caption := 'Стоп';
end;
lmikle: Пользуемся тегами!
и.т.д