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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.08.2012, 00:43
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию Оптимизация MediaPlayer

Вот я сделал свой MediaPlayer1. В нем есть несколько недочетов: изменение громкости - при начале воспроизведения громкость все равно 100 %, хотя шкала показывает 50%. Все стает нормально, если подвигать этот ползунок. Как это исправить? Второе: при открытии файла, имя его записывается в ListBox1, во-первых: при двойном клике файл открывается, проигрывается, при открытии нового файла, все-равно остается прошлый файл в ListBox1. При повторном открытии происходит непонятное с TrackBar1(полоса прогресса музыки) и 2(Изменение громкости). Эта непонятность станет вам видна, при тестировании exe ниже приложенного. А во-вторых: как можно реализовать удаление объекта из ListBox1 кнопкой del? Третье: при проигрывании Mp3 остаток времени показывает правильно, при проигрывании wav - пишет огромное кол. минут. Как это исправить. Вроде все, если найдете в exe еще ошибки при тестировании, прошу так же исправить. Вот код, касающийся только проигрывания:
Код:
Const
  MCI_SETAUDIO = $0873;
  MCI_DGV_SETAUDIO_VOLUME = $4002;
  MCI_DGV_SETAUDIO_ITEM = $00800000;
  MCI_DGV_SETAUDIO_VALUE = $01000000;
  MCI_DGV_STATUS_VOLUME = $4019;

type  
   MCI_DGV_SETAUDIO_PARMS = record  
     dwCallback: DWORD;   
     dwItem: DWORD;   
     dwValue: DWORD;   
     dwOver: DWORD;   
     lpstrAlgorithm: PChar;   
     lpstrQuality: PChar;   
   end;
type  
   MCI_STATUS_PARMS = record  
     dwCallback: DWORD;   
     dwReturn: DWORD;   
     dwItem: DWORD;   
     dwTrack: DWORD;   
   end;

procedure SetMPVolume(MP: TMediaPlayer; Volume: Integer);
   { Volume: 0 - 1000 }  
 var  
   p: MCI_DGV_SETAUDIO_PARMS;
 begin  
   { Volume: 0 - 1000 }  
   p.dwCallback := 0;   
   p.dwItem := MCI_DGV_SETAUDIO_VOLUME;
   p.dwValue := Volume;
   p.dwOver := 0;   
   p.lpstrAlgorithm := nil;   
   p.lpstrQuality := nil;   
   mciSendCommand(MP.DeviceID, MCI_SETAUDIO,
     MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM, Cardinal(@p));   
 end;   

 function GetMPVolume(MP: TMediaPlayer): Integer;
 var
    p: MCI_STATUS_PARMS;
 begin
   p.dwCallback := 0;
   p.dwItem := MCI_DGV_STATUS_VOLUME;
   mciSendCommand(MP.DeviceID, MCI_STATUS, MCI_STATUS_ITEM, Cardinal(@p));
   Result := p.dwReturn;
   { Volume: 0 - 1000 }
 end;

procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.Shareable:=False;

MediaPlayer1.AutoRewind:=True;

MediaPlayer1.Wait:=True;
end;



procedure TForm1.Button7Click(Sender: TObject);
begin
OpenDialog1.Options:=[ofAllowMultiSelect];
MediaPlayer1.FileName:=' ';

With OpenDialog1 do

Begin

If not Execute then Exit;

MediaPlayer1.FileName:=FileName;

MediaPlayer1.Open;

TrackBar1.Max:=MediaPlayer1.Length;

TrackBar1.Min:=MediaPlayer1.StartPos;

Timer1.Enabled:=True;

if ListBox1.Count>0 then
    begin
      mediaplayer1.FileName:=listbox1.Items.Strings[listbox1.itemindex];
      mediaplayer1.Open;
      TrackBar2.Max:=mediaplayer1.Length;
      Timer1.Enabled:=true;
      //***устанавливаем начальную громкость
      SetMPVolume(MediaPlayer1, 1000-TrackBar1.Position*50);
      mediaplayer1.Play;
    end
  else {ShowMessage('Playlist is empty');  }

  begin
    ListBox1.Clear;
    listbox1.Items.AddStrings(opendialog1.Files);
    //***автоматически выделяем первый файл в списке
    ListBox1.Selected[0]:=true;
    //***автоматически воспроизводим выделенный
    if CheckBox1.Checked then MediaPlayer1.Play;
  end;
  
end;
end;
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
Mediaplayer1.FileName:=listbox1.items.Strings[listbox1.itemindex];//добавляем строки
mediaplayer1.Open; //открываем
TrackBar1.Max:=mediaplayer1.Length;// приравниваеммаксимальную длину прогрессбара к текущей длине трэка
Timer1.Enabled:=true; //запускаем таймер для отсчёта времени
//***устанавливаем начальную громкость
SetMPVolume(MediaPlayer1, 1000-TrackBar1.Position*50);
mediaplayer1.Play; //воспроизводим
end;


procedure TForm1.Button8Click(Sender: TObject);
begin
With SaveDialog3 do
Begin
If not Execute then Exit;
MediaPlayer1.FileName:=FileName;
MediaPlayer1.Save;
end;
end;
procedure TForm1.Button9Click(Sender: TObject);
begin
MediaPlayer1.Close;
TrackBar2.Max:=TrackBar2.Min;
Application.Terminate;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
Var
 Len,Pos,MinLeft,SecLeft,Min,Sec: Integer;
begin
 if TrackBar1.Max<>0 then
  begin
TrackBar1.Position:=MediaPlayer1.Position;
Len:=Mediaplayer1.TrackLength[ListBox1.ItemIndex];
//***вычесление времени
    Pos := Mediaplayer1.Position;
    MinLeft := ((Len - Pos) div 1000) div 60;//осталось мин
    SecLeft := ((Len - Pos) div 1000) mod 60;//осталось сек
    Min := (Pos div 1000) div 60;
    Sec := (Pos div 1000) mod 60;
//***осталось
    if SecLeft < 10 then
      label9.Caption := '0' + IntToStr(SecLeft)
    else
      label9.Caption := IntToStr(SecLeft);
    if MinLeft < 10 then
      label8.Caption := '0' + IntToStr(MinLeft)+':'
    else
      label8.Caption := IntToStr(MinLeft)+':';
//***прошло
    if Sec < 10 then
      label7.Caption := '0' + IntToStr(Sec)
    else
      label7.Caption := IntToStr(Sec);
    if Min < 10 then
      label6.Caption := '0' + IntToStr(Min)+':'
    else
      label6.Caption := IntToStr(Min)+':';

  end;
end;
//***изменение громкости
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
  SetMPVolume(MediaPlayer1, 1000-TrackBar2.Position*50);
  Label5.Caption:=IntToStr(100-TrackBar2.Position*5)+'%';
end;

//***навигация по треку
procedure TForm1.TrackBar1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  pos:integer;
begin
  pos:=round((100 / TrackBar1.Width)*x);//***позиция клика
  MediaPlayer1.Position:=(MediaPlayer1.Length div 100)*pos;
  MediaPlayer1.Play;
end;


procedure TForm1.Button10Click(Sender: TObject);
var
  chosenDir:string;
  f: tSearchRec;
begin
  //***вместо '' можно указать путь по умолчанию, напр. 'c:\music\'
  //***если оставить '' то будет предложен стандартный диалог выбора каталога
  if SelectDirectory('Выберите каталог','', chosenDir)
  then
    begin
      ListBox1.Clear;
      if (FindFirst(chosenDir+'\*.mp3', faAnyFile, f)=0) or
         (FindFirst(chosenDir+'\*.wma', faAnyFile, f)=0) or
         (FindFirst(chosenDir+'\*.wav', faAnyFile, f)=0)
      then
      repeat
        ListBox1.Items.Add(chosenDir+'\'+f.Name);
        FindNext(f);
        ListBox1.Items.Add(chosenDir+'\'+f.Name);
      until FindNext(f)<>0;
    if ListBox1.Items.Count<>0 then
      begin
        //***автоматически выделяем первый файл в списке
        ListBox1.Selected[0]:=true;
        //***автоматически воспроизводим выделенный
        if (CheckBox1.Checked) then MediaPlayer1.Play;
      end;
    end;
 end;
Буду благодарен за помощь! Отнеситесь с пониманием и протестируйте программу. Примеры wav прилагаю, mp3 возьмите свои.
Вложения
Тип файла: rar Media.rar (903.5 Кбайт, 35 просмотров)

Последний раз редактировалось Dmitry_DM, 26.08.2012 в 00:45.
Ответить с цитированием
  #2  
Старый 26.08.2012, 00:47
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Самое правильное, выбрось MediaPlayer на помойку истории и используй bass.dll.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 26.08.2012, 00:58
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от angvelem
Самое правильное, выбрось MediaPlayer на помойку истории и используй bass.dll.
Я уже думал об этом, но мне более нравится такой вид, тем более с новыми кнопками, сделанными по вашей помощи. К тому же программа полностью работает, но с этими недочётами. Просто просмотрите код и скажите где, что поправить. Иначе мне придется оставить как есть, так как эта функция в моем проекте не самая главная, но все же хочется, что бы было все нормально.
Ответить с цитированием
  #4  
Старый 26.08.2012, 01:05
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Правильно думал, выбрось. Тем более при замене движка внешний вид программы не изменится, а плюсов будет гораздо больше. Вот набросок такого проигрывателя без излишеств.
Player

Ах да, требуется для работы Bass.dll.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 26.08.2012, 01:13
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от angvelem
Правильно думал, выбрось. Тем более при замене движка внешний вид программы не изменится, а плюсов будет гораздо больше. Вот набросок такого проигрывателя без излишеств.
Player

Ах да, требуется для работы Bass.dll.
Ладно. Переделаю. Может лучше получится. Спасибо за совет. Хоть посмотрите программу, скажите как вам стиль.
Ответить с цитированием
  #6  
Старый 26.08.2012, 01:19
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Я последний раз пользовался MediaPlayer-ом лет 10 назад, и у меня нет никакого желания к нему возвращаться. С Bass, при проблемах, помогу с удовольствием.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 26.08.2012, 01:23
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от angvelem
Я последний раз пользовался MediaPlayer-ом лет 10 назад, и у меня нет никакого желания к нему возвращаться. С Bass, при проблемах, помогу с удовольствием.
Хорошо, договорились! В какую тему будет лучше обратится?
Ответить с цитированием
  #8  
Старый 26.08.2012, 01:28
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Не нашёл где загрузить mp3, предлагает только wav. При открытие файла из меню и последующем отказе выскакивает ошибка о не нахождении файла. При попытке смены языка, меню пропадает.

Цитата:
В какую тему будет лучше обратится?
Как удобнее.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 26.08.2012 в 01:30.
Ответить с цитированием
  #9  
Старый 26.08.2012, 01:32
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от angvelem
Не нашёл где загрузить mp3, предлагает только wav. При открытие файла из меню и последующем отказе выскакивает ошибка о не нахождении файла.
Там надо выбрать "все файлы". Тогда и мп3 откроет. Про ту ошибку я вспомнил. Имеется такая.
Ответить с цитированием
  #10  
Старый 26.08.2012, 01:34
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Да затупил, обрати внимание на смену языка.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 26.08.2012, 01:38
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от angvelem
Да затупил, обрати внимание на смену языка.
она работает, просто нету ини файла, процедуры и т.д и т.п. Я вырезал только медиа процедуры.
Ответить с цитированием
  #12  
Старый 26.08.2012, 04:14
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Ладно. Переделаю. Может лучше получится. Спасибо за совет. Хоть посмотрите программу, скажите как вам стиль.
Программу не запускал, а вот стиль исходника плохенький...
Форматирование хромает. Компоненты не переименованы (всякие там Button7, Label5, TrackBar2).

Почему в Button7Click дважды открывается MediaPlayer1?:
Код:
procedure TForm1.Button7Click(Sender: TObject);
begin
...
MediaPlayer1.FileName:=FileName;
MediaPlayer1.Open;
... 
      mediaplayer1.FileName:=listbox1.Items.Strings[listbox1.itemindex];
      mediaplayer1.Open;
...
И почему происходит такое присваивание?:
Код:
      TrackBar2.Max:=mediaplayer1.Length;
Ведь TrackBar2 вроде отвечает за громкость? А ему дают продолжительность... Не это ли твои непонятки с прыжками громкости?

Обработчик Timer1Timer вообще руки чешутся подсократить...

В Button10Click вижу FindFirst и FindNext, а где FindClose?

Цитата:
Сообщение от Dmitry_DM
во-первых: при двойном клике файл открывается, проигрывается, при открытии нового файла, все-равно остается прошлый файл в ListBox1
Конечно остаются прошлые файлы. А виной всему загадочная проверка при открытии файлов:
Код:
if ListBox1.Count>0 then
Если при открытии список пустой, то в него добавляются открываемые файлы, если же список уже заполнен, то открываемые файлы игнорируются и вместо них ставится на воспроизведение текущий выбранный в списке.

Ещё в двух местах у тебя есть такой код:
Код:
    //***автоматически выделяем первый файл в списке
    ListBox1.Selected[0]:=true;
    //***автоматически воспроизводим выделенный
    if CheckBox1.Checked then MediaPlayer1.Play;
А почему ты думаешь, что если выделить в списке первый элемент, то медиаплеер будет именно его воспроизводить?

И ещё объясни мне смысл вот этой строчки:
Код:
Len:=Mediaplayer1.TrackLength[ListBox1.ItemIndex];
Ответить с цитированием
  #13  
Старый 26.08.2012, 12:41
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
Программу не запускал, а вот стиль исходника плохенький...
Форматирование хромает. Компоненты не переименованы (всякие там Button7, Label5, TrackBar2).

Почему в Button7Click дважды открывается MediaPlayer1?:
Код:
procedure TForm1.Button7Click(Sender: TObject);
begin
...
MediaPlayer1.FileName:=FileName;
MediaPlayer1.Open;
... 
      mediaplayer1.FileName:=listbox1.Items.Strings[listbox1.itemindex];
      mediaplayer1.Open;
...
Поправил.
Цитата:
Сообщение от poli-smen
И почему происходит такое присваивание?:
Код:
TrackBar2.Max:=mediaplayer1.Length;
Ведь TrackBar2 вроде отвечает за громкость? А ему дают продолжительность... Не это ли твои непонятки с прыжками громкости?
Поправил, исправилось только правильное показания процентов громкости при втором и далее проигрываемом файле, с первым и раньше было нормально. Но начальная громкость на 50% так и не стала, сразу на 100%, подвигаешь ползунок - все норм.

Цитата:
Сообщение от poli-smen
Обработчик Timer1Timer вообще руки чешутся подсократить...
Зачем? По-моему там все нормально.
Цитата:
Сообщение от poli-smen
В Button10Click вижу FindFirst и FindNext, а где FindClose?
Процедура Add to list работает и без этого. Мне кажется, смысла в FindClose нету. Или я ошибаюсь?
Цитата:
Сообщение от poli-smen
Конечно остаются прошлые файлы. А виной всему загадочная проверка при открытии файлов:
Код:
if ListBox1.Count>0 then
Если при открытии список пустой, то в него добавляются открываемые файлы, если же список уже заполнен, то открываемые файлы игнорируются и вместо них ставится на воспроизведение текущий выбранный в списке.
Исправил так:
Код:
if ListBox1.Count>1 then
Цитата:
Сообщение от poli-smen
А почему ты думаешь, что если выделить в списке первый элемент, то медиаплеер будет именно его воспроизводить?
Потому что если нажать на галочку Autoplay, так и будет.

Цитата:
Сообщение от poli-smen
И ещё объясни мне смысл вот этой строчки:
Код:
Len:=Mediaplayer1.TrackLength[ListBox1.ItemIndex];
Она служит для вычисления времени. Вот:
Код:
Pos := Mediaplayer1.Position;
    MinLeft := ((Len - Pos) div 1000) div 60;//осталось мин
    SecLeft := ((Len - Pos) div 1000) mod 60;//осталось сек
Ответить с цитированием
  #14  
Старый 26.08.2012, 16:34
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Поправил, исправилось только правильное показания процентов громкости при втором и далее проигрываемом файле, с первым и раньше было нормально. Но начальная громкость на 50% так и не стала, сразу на 100%, подвигаешь ползунок - все норм.
Ну так а как ты устанавливаешь громкость? А вот так:
Код:
  SetMPVolume(MediaPlayer1, 1000 - TrackBar1.Position * 50);
А теперь внимание вопрос: За что отвечает TrackBar1? Может всё-же стоит переименовать TrackBar1 и TrackBar2 в более человеческие имена, чтобы самому-же и не путаться?

Цитата:
Сообщение от Dmitry_DM
Цитата:
Сообщение от poli-smen
Обработчик Timer1Timer вообще руки чешутся подсократить...
Зачем? По-моему там все нормально.
Да мне-то тоже этот обработчик не мешает - он же не в моей программе.

Цитата:
Сообщение от Dmitry_DM
Процедура Add to list работает и без этого. Мне кажется, смысла в FindClose нету. Или я ошибаюсь?
То есть раз работает, значит работает правильно? И зачем только эту бесполезнейшую FindClose придумали?..
Вот когда происходят катастрофы и у ответственных лиц спрашивают "Почему у вас был заварен предохранительный клапан?", на что они отвечают: "Установка работала и без этого. Мне кажется, смысла в предохранительном клапане нету. Или я ошибался?"

И ещё. Зачем там 2 раза подряд используется FindNext?

Цитата:
Сообщение от Dmitry_DM
Исправил так:
Код:
if ListBox1.Count>1 then
И что от этого сильно изменилось? Вот открываю я одновременно 2 файла, после этого открываю другие файлы, но они в список не добавляются, а остаются те первые 2, да ещё и начинают играть, хотя Autoplay у меня отключен.

Цитата:
Сообщение от Dmitry_DM
Цитата:
Сообщение от poli-smen
Ещё в двух местах у тебя есть такой код:
Код:
    //***автоматически выделяем первый файл в списке
    ListBox1.Selected[0]:=true;
    //***автоматически воспроизводим выделенный
    if CheckBox1.Checked then MediaPlayer1.Play;
А почему ты думаешь, что если выделить в списке первый элемент, то медиаплеер будет именно его воспроизводить?
Потому что если нажать на галочку Autoplay, так и будет.
Что так и будет? Будет воспроизводиться файл который последним воспроизводился (который не обязательно первый). А вопрос был: Почему ты уверен, что будет воспроизводиться первый файл из списка?

Цитата:
Сообщение от Dmitry_DM
Цитата:
Сообщение от poli-smen
И ещё объясни мне смысл вот этой строчки:
Код:
Len:=Mediaplayer1.TrackLength[ListBox1.ItemIndex];
Она служит для вычисления времени. Вот:
Код:
Pos := Mediaplayer1.Position;
    MinLeft := ((Len - Pos) div 1000) div 60;//осталось мин
    SecLeft := ((Len - Pos) div 1000) mod 60;//осталось сек
То куда пойдёт значение Len я вижу. Я хотел, чтобы ты мне объяснил загадочную связь между свойством "Mediaplayer1.TrackLength" и свойством "ListBox1.ItemIndex".

Последний раз редактировалось poli-smen, 26.08.2012 в 16:43.
Ответить с цитированием
  #15  
Старый 26.08.2012, 18:14
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
Ну так а как ты устанавливаешь громкость? А вот так:
Код:
  SetMPVolume(MediaPlayer1, 1000 - TrackBar1.Position * 50);
А теперь внимание вопрос: За что отвечает TrackBar1? Может всё-же стоит переименовать TrackBar1 и TrackBar2 в более человеческие имена, чтобы самому-же и не путаться?
Задал всем имена, поправил эту ошибку и все-равно проблема осталась.
Цитата:
Сообщение от poli-smen
Да мне-то тоже этот обработчик не мешает - он же не в моей программе.
Ну а все же что вы посоветуете сделать, что бы сократить? Меньше объем - лучше.
Цитата:
Сообщение от poli-smen
То есть раз работает, значит работает правильно? И зачем только эту бесполезнейшую FindClose придумали?..
Вот когда происходят катастрофы и у ответственных лиц спрашивают "Почему у вас был заварен предохранительный клапан?", на что они отвечают: "Установка работала и без этого. Мне кажется, смысла в предохранительном клапане нету. Или я ошибался?"

И ещё. Зачем там 2 раза подряд используется FindNext?
Та добавил я уже FindClose и убрал лишний FindNext.

Цитата:
Сообщение от poli-smen
И что от этого сильно изменилось? Вот открываю я одновременно 2 файла, после этого открываю другие файлы, но они в список не добавляются, а остаются те первые 2, да ещё и начинают играть, хотя Autoplay у меня отключен.
Да, я заметил эту ошибку. Это происходит, если открывать по несколько файлов. И что можно предпринять? По-моему это главная ошибка.

Цитата:
Сообщение от poli-smen
Что так и будет? Будет воспроизводиться файл который последним воспроизводился (который не обязательно первый). А вопрос был: Почему ты уверен, что будет воспроизводиться первый файл из списка?
Действительно. Только заметил..

Цитата:
Сообщение от poli-smen
То куда пойдёт значение Len я вижу. Я хотел, чтобы ты мне объяснил загадочную связь между свойством "Mediaplayer1.TrackLength" и свойством "ListBox1.ItemIndex".
Я так и не понял что здесь не так?
На всякий случай исходный весь код я передаю вам в ЛС. А exe с некоторыми исправленными ошибками внизу.
Вложения
Тип файла: rar Project2.rar (559.5 Кбайт, 16 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter