![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
нужен совет по TTrackBar [D7, WinXP]
Mongoose © (2004-05-05 23:37:00)Люди подскажите(а лучше напишите код) как сделать так чтобы:
- ползунок перемещался в место куда кликнул мышью
- при этом воспроизводимый фильм(так как это часть видео плеера простенького, учусь я просто) тоже переезжал на тоже место(т.е. на туже минуту или кадр)
Заранее благодарен. Помагите плз...
Речь идет о Delphi7.0
технология MediaPlayer
Указанный в одном из сообщений: MediaPlayer1.Position:=TrackBar1.Position*КОЭФФЕЦИЕНТ;
не подходит
Mongoose (2004-05-08 13:25:00) [1]Спасибо за помощь. Теперь буду думать ведь все заново писать надо.
Думкин (2004-05-08 06:39:00) [2]> [26] Mongoose © (07.05.04 21:14)
1. Вот именно это и происходит у вас когда вы в onChange меняете позицию.
2. А тут думайте. Сказано кажется вполне достаточно - простоо поймите чтоо для чего написано - разберитесь для чего нужна каждая строчка и что она делает.
Mongoose (2004-05-07 21:14:00) [3]
> function a(x : integer) : integer;
> begin
> Result := b(x) + 1
> end;
> function b(x : integer) : integer;
> begin
> Result := a(x) + 1
> end;
>
> begin
> write(a(1));
> end.
>
> Что будет напечатано?
если я не ошибаюсь, то ничего не будет напечатано(это не рабочий код, хотя очень похож на бесконечный цикл(сугубо мое мнение)), может здесь надо что-то добавить 8).
?
> Ну, у вас есть одно мульти и второе. Их различие для вас
> только в имени плееров. Замените 1 на 2. Или скопируйте
> рядом код - один для одного - второй для второго. Не спешите,
> почитайте написанное и подумайте.
А вот замена 1 на 2 должна происходить только в OnChange и TTimer или еще где-нибудь? Просто если заменить только в этих двух процедурах то ничего кроме скакакния звука не происходит =/
Думкин (2004-05-07 19:11:00) [4]> [24] Mongoose © (07.05.04 19:02)
Ну, у вас есть одно мульти и второе. Их различие для вас только в имени плееров. Замените 1 на 2. Или скопируйте рядом код - один для одного - второй для второго. Не спешите, почитайте написанное и подумайте.
> [23] Mongoose © (07.05.04 18:59)> Честно говоря я не понимаю о чем Вы...
хорошо
function a(x : integer) : integer;
begin
Result := b(x) + 1
end;
function b(x : integer) : integer;
begin
Result := a(x) + 1
end;
begin
write(a(1));
end.
Что будет напечатано?
А про белого бычка? Это позже. %)
Mongoose (2004-05-07 19:02:00) [5]Нет звук и фильм скомпоновать нельзя, таков заказ.
А что конкретно из данных в коде надо?
Mongoose (2004-05-07 18:59:00) [6]
> 1. Я изменяю позицию, возникает событие изменения которое
> обрабатывая я изменяю позицию. Про белого бычка слышали?
Честно говоря я не понимаю о чем Вы...
> 2. Ну один у вас отвечает за время, второй у меня отвечает
> за изменение позиции трэкбара.
Я так делаю как Вы написали, просто я наверно не понятно написал.
Итак, вернемся к моему посту 07.05.04 17:13 [19]
Думкин (2004-05-07 18:54:00) [7]> [19] Mongoose © (07.05.04 17:13)
>У меня, в плеере, используется аудио поток формата *.wav; он воспроизводится одновременно с фильмом. Использую так же TMediaPlayer. Так вот - как осуществить его переход на тоже место где находится фильм? Создать invisible TTrackBar и проделать тоже самое, что и в предыдущем случае(с фильмом) или же есть другие способы?
1. А звук в фильм?
2. Можно. второй трэкбар не нужен. Совсем. Достаточно одного - все данные в приведенном коде. При условии, что позиции синхронизованы.
Думкин (2004-05-07 18:46:00) [8]1. Я изменяю позицию, возникает событие изменения которое обрабатывая я изменяю позицию. Про белого бычка слышали?
2. Ну один у вас отвечает за время, второй у меня отвечает за изменение позиции трэкбара.
Mongoose (2004-05-07 17:14:00) [9]Забыл спросить а зачем 2 таймера?
Mongoose (2004-05-07 17:13:00) [10]Спасибо за помощь.
Вот сталкнулся с проблемой такой, что при перетаскивании происходит очень длительная задержка ~5-10 секунд, а иногда вообще зависает, и приходится снимать задачу с помощью ctrl+alt+del...
Воспользовался кодом, преобразовав его предварительно "по месту", вот что получилось:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
MediaPlayer1.Pause;
MediaPlayer1.Position:= MulDiv(TrackBar1.Position, tracklength, TrackBar1.Max);
MediaPlayer1.Play;
end;
И еще одно не документированное ранее здесь. У меня, в плеере, используется аудио поток формата *.wav; он воспроизводится одновременно с фильмом. Использую так же TMediaPlayer.
Так вот - как осуществить его переход на тоже место где находится фильм? Создать invisible TTrackBar и проделать тоже самое, что и в предыдущем случае(с фильмом) или же есть другие способы?
Заранее благодарен.
Думкин (2004-05-07 12:48:00) [11]> Mongoose © (07.05.04 12:31) [17]
1. 2 таймера заводить никто не мешает.
2. если фильм до начала перетаскивания проигрывался, то никто не мешает сделать mp1.Play
Mongoose (2004-05-07 12:31:00) [12]Я не думаю, что фильмы длительностью = пол секунды будут использоваться в моем случае...
А по поводу таймера - я его использую для показа отсчета времени
Да фильм переезжает, как и было заказано, спасибо.
А как тогда продолжить его движение, ведь сами понимаете, что просто перевод на тоже место никакой полезности не несет.
Думкин (2004-05-07 12:20:00) [13]> Mongoose © (07.05.04 12:11) [15]
Я тоже дико извиняюсь, но
1. tracklength div 1000, А если tracklength=500? Причем тут 599000?
2. Я написал, что это схема. Например, при движении у вас будет работать таймер - это хорошо? и т.п. Это схема. Но она во-всяком случае:
> при этом воспроизводимый фильм тоже переезжал на тоже место
это достигается. Внести небольшие изменения, я думаю, не составит труда.
Mongoose (2004-05-07 12:11:00) [14]Я дико извиняюсь, там (каждая секунда = 1000), и таких секунд 599 итого 599*1000=599000
А схема, которую Вы мне предложили работает только с не большими проблемами:
1. При перемотке идут полосы;
2. После завершения перемотки фильм дальше не показывается(может я что-то не так понял и это только часть кода, обеспечивающая всего лишь передвижение ползунка)
Думкин (2004-05-07 11:48:00) [15]> Mongoose © (07.05.04 11:45) [13]
1. 599 div 1000 =0
2. 5000 div (599 div 1000)= 5000 div 0
Mongoose (2004-05-07 11:45:00) [16]Если tracklength=500, то все будет нормально, дело в том что у меня за стандартный(реальная длительность фильма) берется tracklength=599
Формула по которой выщитывается позиция((длительность*(кол-во прошедших секунд))/100%) + идет пересчет в секунды
TrackBar1.Position:=(trackposition div 10)*1000 div(tracklength div 1000);
Думкин (2004-05-07 11:37:00) [17]Это схема, думаю расшифруете и сделаете как надо:
procedure TForm1.Button1Click(Sender: TObject);
begin
trackposition := 0;
tracklength := mp1.Length;
mp1.Play;
Timer1.Enabled := true
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
trackposition := mp1.Position;
TrackBar1.OnChange := nil;
if (trackposition>0) and (trackposition<=tracklength) then
begin
TrackBar1.Position:= MulDiv(TrackBar1.Max, trackposition, tracklength)
end;
TrackBar1.OnChange := TrackBar1Change
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
mp1.Position:= MulDiv(TrackBar1.Position, tracklength, TrackBar1.Max)
end;
Mongoose (2004-05-07 11:31:00) [18]А где надо делать изменения? А должно пугать?
Думкин (2004-05-07 11:28:00) [19]Далее, это что:
TrackBar1.Position:=(trackposition div 10)*1000 div(tracklength div 1000);
А если tracklength=500? Для начала.
Думкин (2004-05-07 11:25:00) [20]А зачем делать в onChange - изменения? Вас это не пугает?