|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Help с медиаплеером !!!
Недавно начал писать простенький медиапеер в 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: Пользуемся тегами! и.т.д |
#2
|
|||
|
|||
Естественно, исчезают. Ты ведь в начале процедуры очищаешь список (ListBox1.Clear). Однако, при добавлении файлов из нескольких папок у тебя возникнет еще одна проблема. А именно, файлы у тебя в список добавляются без пути, т.о. неизвестно из какой папки добавлен конкретный файл. Тебе надо их хранить с полным путем, а для отображения выводить только короткое имя (или вообще, название, если оно есть, например, в ID3-тегах).
Я бы к каждому итему в ListBox'е "подвешивал" бы объектик, в котором хранил бы полный путь и разную дополнительную информацию. И еще, я бы переписал добавление файлов. У тебя несколько абсолютно одинаковых кусков кода, что уже говорит о том, что этот участок надо отрефакторить. Это раз. Два. при добавлении файлов у тебя они будут сгруппированы по типу, а не по имени или как они лежат на диске. поэтому поиск надо делать по маске *.*, а проверять соответсвие по типам с помощью функции MatchesMask (модуль Masks). |
#3
|
|||
|
|||
Уточните пожайлуста !!!
Скажите пожайлуста, как это можно реализовать !. Можете ли дать пример кода, что такое MatchesMask (модуль Masks). Пожайлуста подробнее, я же чайник !
|