Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.03.2009, 19:03
ilsur ilsur вне форума
Прохожий
 
Регистрация: 04.03.2009
Сообщения: 17
Репутация: 10
Радость 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  
Старый 04.03.2009, 19:38
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Естественно, исчезают. Ты ведь в начале процедуры очищаешь список (ListBox1.Clear). Однако, при добавлении файлов из нескольких папок у тебя возникнет еще одна проблема. А именно, файлы у тебя в список добавляются без пути, т.о. неизвестно из какой папки добавлен конкретный файл. Тебе надо их хранить с полным путем, а для отображения выводить только короткое имя (или вообще, название, если оно есть, например, в ID3-тегах).

Я бы к каждому итему в ListBox'е "подвешивал" бы объектик, в котором хранил бы полный путь и разную дополнительную информацию.

И еще, я бы переписал добавление файлов. У тебя несколько абсолютно одинаковых кусков кода, что уже говорит о том, что этот участок надо отрефакторить. Это раз. Два. при добавлении файлов у тебя они будут сгруппированы по типу, а не по имени или как они лежат на диске. поэтому поиск надо делать по маске *.*, а проверять соответсвие по типам с помощью функции MatchesMask (модуль Masks).
Ответить с цитированием
  #3  
Старый 04.03.2009, 19:50
ilsur ilsur вне форума
Прохожий
 
Регистрация: 04.03.2009
Сообщения: 17
Репутация: 10
По умолчанию Уточните пожайлуста !!!

Скажите пожайлуста, как это можно реализовать !. Можете ли дать пример кода, что такое MatchesMask (модуль Masks). Пожайлуста подробнее, я же чайник !
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter