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



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.10.2010, 22:27
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию перемотка

как реализовать перемотку музыки тоесть внизу шкала и в ней двигается ну скажем кружок по мере проигрывания музыки, нужно чтобы его можно было перемотать в нужный момент
Ответить с цитированием
  #2  
Старый 10.10.2010, 22:27
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

"передвинуть"
Ответить с цитированием
  #3  
Старый 10.10.2010, 22:33
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Ну это зависит от компонента, или библиотеки, которую ты используешь (медиа плеер, или же басс, например).

Если используешь MediaPlayer, то у него есть свойство Position, его и надо изменять (например в TrackBar1.Change)...
Пример:
Код:
  TrackBar OnChange
   MediaPlayer1.Position := MediaPlayer.Position + 1;
// так же у Media Player есть свойства TrackLength, и Length, которые позволят узнать длину песни (видео)
__________________
Помогаю за Спасибо

Последний раз редактировалось v1s2222, 10.10.2010 в 22:37.
Ответить с цитированием
  #4  
Старый 10.10.2010, 22:49
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

MediaPlayer использую, порпобую
Ответить с цитированием
  #5  
Старый 10.10.2010, 23:01
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Код:
procedure TfrmMyBrowser.TrackBar2Change(Sender: TObject);
begin
TrackBar2.Max := TrackLength;
MediaPlayer1.Position := MediaPlayer.Position + 1;
end;

неопознает выделеенное красным Undeclared identifier
Ответить с цитированием
  #6  
Старый 10.10.2010, 23:30
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Если не опазнает, значит не объявил их. А насчет TrackLength - пиши так:
Код:
MediaPlayer1.TrackLength[i];
// PS добавь на форму сам MediaPlayer1

ЗЫ На статейку, почитай...
http://www.beluch.ru/progr/100comp/4_8_3.htm
А также тута:
http://www.realcoding.net/article/view/1316
__________________
Помогаю за Спасибо
Ответить с цитированием
  #7  
Старый 11.10.2010, 00:19
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

Цитата:
Сообщение от ALexandr555
Код:
procedure TfrmMyBrowser.TrackBar2Change(Sender: TObject);
begin
TrackBar2.Max := TrackLength;
MediaPlayer1.Position := MediaPlayer.Position + 1;
end;
Код:
TrackBar2.Max := MediaPlayer1.TrackLength;
это делается один раз, в начале воспроизведения

а позиция задаётся так:
Код:
TfrmMyBrowser.TrackBar2Change(Sender: TObject);
begin
  MediaPlayer1.Position := TrackBar2.Position;
end;
Ответить с цитированием
  #8  
Старый 17.11.2010, 19:11
Edos Edos вне форума
Прохожий
 
Регистрация: 17.11.2010
Сообщения: 6
Репутация: 10
По умолчанию А как это сделать без использования трекбара???

В общем народ... срочняк надо всё это сделать без трекбара. вместо бегунка у меня компонент image с изображением бегунка, вместо трека у меня компонент image с изображением трека. мне это надо для того чтоб не испортить дизайн. тоесть ясно да что бегунок и трек я нарисовал в фотошопе...
вот я сижу второй час а думать голова устала. вот настрочил маханький код. он вроде работает, и этот бегунок движется на определённое количество пикселей в секунду соответствующих времени видео, и вроде перематывается тоже правильно, но он всё равно местами подглючивает
вот код:

это часть которая отвечает что бегунок двигался в такт с видео ну чтоб прошла секунда видео и он сдвинулся на общее кол-во пикселей деленное на длину видео и множеное на 60. :
i:=mediaplayer1.Length;
a:=i/60000; b:=688/(a*60); c:=c+b;
image24.Left:=round(c);
label31.Caption:=inttostr(round(c));
if m1=true then image24.Left:=Round(m+c);
image25.Width:=image24.left;


это часть отвечающая за перемотку:

image24.Left:=x+image24.Left-10;
o8:=688-image24.Left;
o10:=(o8-688)*(-1);
o11:=o10*(mediaplayer1.Length/1376);
mediaplayer1.Position:=round(o11);
c:=mediaplayer1.Position/1376;
вот это вроде пашет но не фонтан конечно...
так- что если кому не лень разберитесь плиз...
Ответить с цитированием
  #9  
Старый 17.11.2010, 21:16
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

если все же перемещать image:
Код:
var pressed:boolean;
tx:integer;
...
procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Pressed:=true;
  MediaPlayer1.Pause;
  tx:=X;
end;

procedure TForm1.Panel2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Pressed then
    begin
      Panel2.Left:=Panel2.Left+x-tx;
      MediaPlayer1.Position:=Round(MediaPlayer1.Length*(Panel2.Left/Panel1.Width));
      tx:=x;
    end;
end;

procedure TForm1.Panel2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Pressed:=false;
  MediaPlayer1.Play;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var r:single;
begin
  if MediaPlayer1.Length>0 then
    r:=MediaPlayer1.Position/MediaPlayer1.Length
  else
    r:=0;

  Panel2.Left:=Round({Image1.Left +} r*Panel1.Width); //раскомментить для TImage'й
end;
Но этот способ тормозной, особенно с медиаплеером (который ваще лучше не юзать). Лучше вручную рисовать на трекбаре, навроде этого (это без изображений, но на них заменить нетрудно):
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var r:single;
begin
...
      with PaintBox3.Canvas do
        begin
          Pen.Style:=psSolid;
          Brush.Color:=clBtnFace;
          Rectangle(0, 0, PaintBox3.Width, PaintBox3.Height); //контур
          Pen.Style:=psClear;
          if BP.GetLength>0 then
            r:=BP.GetPos/BP.GetLength
          else
            r:=0;
          Brush.Color:=clRed;
          Rectangle(1, 1, Round(PaintBox3.Width*r), PaintBox3.Height); //заливка
        end;
...
end;
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием
  #10  
Старый 17.11.2010, 21:35
Edos Edos вне форума
Прохожий
 
Регистрация: 17.11.2010
Сообщения: 6
Репутация: 10
По умолчанию

Пасибо большое!... завтра опробую и сообщу результат... о, раз уж на то пошло если кто знает как image вращять по трем осям???? ну вот что-что а вот тут я даже не знаю с какой стороны подойти... если не лень мож кто знает, подскажите плз
Ответить с цитированием
Ответ



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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter   Ссылка на Telegram