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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.03.2012, 05:40
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию создание таймера длительности mp3 плеера в проигрывателе

Здравствуйте. Не могу до думматься как реализовать длительность трека при его проигрывании, то есть по мере возрастания, от 0 секунд до к примеру 4 мин. Мешают милисекунды, когда я пытаюсь вывести в label длительность трека media.position он показывает к примеру 12995, т.е. 12 секунд и эти присловутые милисекунды. Есть способ от них избавиться?
Ответить с цитированием
  #2  
Старый 27.03.2012, 06:10
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от sandysman
Здравствуйте. Не могу до думматься как реализовать длительность трека при его проигрывании, то есть по мере возрастания, от 0 секунд до к примеру 4 мин. Мешают милисекунды, когда я пытаюсь вывести в label длительность трека media.position он показывает к примеру 12995, т.е. 12 секунд и эти присловутые милисекунды. Есть способ от них избавиться?

Код:
var
  mp3Length : Integer;
begin
  mp3Length := ...
  label1.Caption := IntToStr(Round(mp3Length/1000));
Ответить с цитированием
  #3  
Старый 27.03.2012, 12:33
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
Хорошо

Цитата:
Сообщение от lmikle
Код:
var
  mp3Length : Integer;
begin
  mp3Length := ...
  label1.Caption := IntToStr(Round(mp3Length/1000));
Спасибо все работает
Ответить с цитированием
  #4  
Старый 27.03.2012, 14:08
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию

Вопрос на счет объекта trackbar. Он у меня передвигается, по мере проигрывания песни, все хорошо, но перемотка у меня работает, только если я непосредственно перенесу прямоугольник куда-нибудь по линии, а вот если я щелкаю по линии ничего не происходит. Вопрос: как заставить прогу определять щелчок по линии и соответственно передвигать туда бегунок?
Ответить с цитированием
  #5  
Старый 27.03.2012, 22:05
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

проводить расчет по событию OnClick на тракбаре (переводить мышиную координату в позицию), т.к. просто по клику на полосе ползунок передвигается на одну страницу (Page) в сторону клика
Ответить с цитированием
  #6  
Старый 28.03.2012, 16:22
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию

Дак в trackbar нету события onclick, при помощи чего тогда заставить реагировать прогу но это событие?
Ответить с цитированием
  #7  
Старый 28.03.2012, 16:55
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Тогда просто добавь это свойство ему. Или создай аналогичный сласс:
Код:
type
 TTrackBar=class(ComCtrls.TTrackBar)
 private
 public
    property OnMouseDown;
    property OnMouseUp;
 end;
Правда, возможно, процедуру TrackBar1MouseDown придется создавать вручную, и в конструкторе формы прописывать
Код:
TrackBar1.OnMouseDown:=TrackBar1MouseDown;
Или внести соответствующие коррективы в файл .dfm
Ответить с цитированием
  #8  
Старый 28.03.2012, 17:18
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

событие onChange есть
Ответить с цитированием
  #9  
Старый 28.03.2012, 17:36
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Цитата:
событие onChange есть
Как вариант.
Код:
procedure TForm1.TrackBar1Change(Sender: TObject);
var GlobalPos,LocalPos:TPoint;
begin
  GetCursorPos(GlobalPos);
  LocalPos:=TrackBar1.ScreenToClient(GlobalPos);
  TrackBar1.Position:=round((trackBar1.Max/(trackBar1.Width-28))*(LocalPos.X-14));
end;
Ответить с цитированием
  #10  
Старый 28.03.2012, 17:50
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
Радость

Цитата:
Сообщение от YVitaliy
Как вариант.
Код:
procedure TForm1.TrackBar1Change(Sender: TObject);
var GlobalPos,LocalPos:TPoint;
begin
  GetCursorPos(GlobalPos);
  LocalPos:=TrackBar1.ScreenToClient(GlobalPos);
  TrackBar1.Position:=round((trackBar1.Max/(trackBar1.Width-28))*(LocalPos.X-14));
end;
Спасибо огромное!) а если можно, можно коменты добавить, чтобы долго не сидеть разбираться в логике решения)
Ответить с цитированием
  #11  
Старый 28.03.2012, 18:23
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Пожалуйста. Типа так? :
Код:
procedure TForm1.TrackBar1Change(Sender: TObject);
var GlobalPos,LocalPos:TPoint;
begin
 //для доступа к процедуре  GetCursorPos нужно подключить модуль QControls
  GetCursorPos(GlobalPos);//Получаем глобальные координаты курсора(на весь экран)
  LocalPos:=TrackBar1.ScreenToClient(GlobalPos);//переводим глобальные координаты в область компонента
  TrackBar1.Position:=round((trackBar1.Max/(trackBar1.Width-28))*(LocalPos.X-14));//
//trackBar1.Max/trackBar1.Width - значение, соответствующее сдвигу  "позиции" трэкбара при сдвиге на 1 пиксель
//(trackBar1.Max/trackBar1.Width)*LocalPos.X - умножаем это значение на количество пикселей сдвига (позиция X мыши)
// значения 28, 12 - взяты из потолка, это компенсация отступов от края трэкбара до начала отсчета)
end;
Ответить с цитированием
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение:
sandysman (29.03.2012)
  #12  
Старый 28.03.2012, 20:52
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

еще как вариант в дочернем от TTrackBar классе обрабатывать мышиные клики (в том числе сделать нотификации опускания кнопки мыши, ее поднятие и проч так "необходимые" события)
Код:
...
    procedure MouseLBtDown (var Message: TMessage); message WM_LBUTTONDOWN;// опускание левой кнокпи мыши
    procedure MouseLBtUp(var Message: TMessage); message WM_LBUTTONUP;//поднятие левой кнопки мыши
..
по аналогии другие мышиные кнопки
как то так....
Ответить с цитированием
Этот пользователь сказал Спасибо cotseec за это полезное сообщение:
sandysman (29.03.2012)
  #13  
Старый 29.03.2012, 11:13
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
Хорошо

Спасибо за коментарии, примерно так и предполагал) Не знал, что есть функция получения глобальных координат курсора, и спасибо за процедуры нажатия и отпуска мыши, я как раз хотел задать вопрос про отпускание правой кнопки мыши, но теперь думаю справлюсь)
Ответить с цитированием
  #14  
Старый 29.03.2012, 11:48
sandysman sandysman вне форума
Новичок
 
Регистрация: 27.03.2012
Сообщения: 60
Репутация: 10
По умолчанию

Цитата:
Сообщение от cotseec
еще как вариант в дочернем от TTrackBar классе обрабатывать мышиные клики (в том числе сделать нотификации опускания кнопки мыши, ее поднятие и проч так "необходимые" события)
Код:
...
    procedure MouseLBtDown (var Message: TMessage); message WM_LBUTTONDOWN;// опускание левой кнокпи мыши
    procedure MouseLBtUp(var Message: TMessage); message WM_LBUTTONUP;//поднятие левой кнопки мыши
..
по аналогии другие мышиные кнопки
как то так....
А эти процедуры выводят сообщение о нажатии или отжатии кнопки мыши?
Ответить с цитированием
  #15  
Старый 29.03.2012, 11:59
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Цитата:
Сообщение от sandysman
А эти процедуры выводят сообщение о нажатии или отжатии кнопки мыши?
эти процедуры перехватывают сообщения нажатия и отпускания левой кнопки мыши.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter