Форум: "Media";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Внизнужен совет по TTrackBar Найти похожие ветки
← →
Mongoose © (2004-05-05 23:37) [0]Люди подскажите(а лучше напишите код) как сделать так чтобы:
- ползунок перемещался в место куда кликнул мышью
- при этом воспроизводимый фильм(так как это часть видео плеера простенького, учусь я просто) тоже переезжал на тоже место(т.е. на туже минуту или кадр)
Заранее благодарен. Помагите плз...
Речь идет о Delphi7.0
технология MediaPlayer
Указанный в одном из сообщений: MediaPlayer1.Position:=TrackBar1.Position*КОЭФФЕЦИЕНТ;
не подходит
← →
Думкин © (2004-05-06 07:40) [1]
> Mongoose © (05.05.04 23:37)
> Указанный в одном из сообщений: MediaPlayer1.Position:=TrackBar1.Position*КОЭФФЕЦИЕНТ;
А что за сообщение и почему? Можно подробнее? Опять же с кодом, который у вас не работает.
← →
Mongoose © (2004-05-06 16:25) [2]Сообщение на ту же тематику, т.е. TTrackBar. Название темы
"изменяя положение TTrackBar... (новичок_из_сыктывкара 04.04.04 20:49)" ответ в начале(1-й или 2-й).
Но я не написал - не работет, я написал не подходит т.к. тот код что там написан действительно перемещает курсор, но не так.
← →
Mihey © (2004-05-06 16:32) [3]>Но я не написал - не работет, я написал не подходит т.к. тот код что там написан действительно перемещает курсор, но не так.
В чём именно различие?
← →
Mongoose © (2004-05-06 17:23) [4]Различие в том, что он выполняет функцию перемещения позиции ползунка в реальном времени не позволяя при этом переносить ползунок мышью(типа захватил - отпустил в другом месте линии прокрутки фильма), а мне нужно именно это.
← →
Mongoose © (2004-05-07 11:04) [5]Люди, что никто не знает как это сделать?
← →
Думкин © (2004-05-07 11:07) [6]> Mongoose © (07.05.04 11:04) [5]
Мне другую ветку смотреть не хочется. Объясни что надо здесь - полностью. Уже 6-й пост впустую.
← →
Mongoose © (2004-05-07 11:14) [7]Вот так я перемещаю ползунок TTrackBarа исходя из длительности фильма:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
if (trackposition>0) and (trackposition<=tracklength) then
begin
TrackBar1.Position:=(trackposition div 10)*1000 div(tracklength div 1000);
end;
end;
Надо сделать так чтобы:
- ползунок перемещался в место куда кликнул мышью
- при этом воспроизводимый фильм(так как это часть видео плеера простенького, учусь я просто) тоже переезжал на тоже место(т.е. на туже минуту или кадр)
← →
Mongoose © (2004-05-07 11:16) [8]забыл сказать что формат *.MP2 у фильма
← →
Думкин © (2004-05-07 11:25) [9]А зачем делать в onChange - изменения? Вас это не пугает?
← →
Думкин © (2004-05-07 11:28) [10]Далее, это что:
TrackBar1.Position:=(trackposition div 10)*1000 div(tracklength div 1000);
А если tracklength=500? Для начала.
← →
Mongoose © (2004-05-07 11:31) [11]А где надо делать изменения? А должно пугать?
← →
Думкин © (2004-05-07 11:37) [12]Это схема, думаю расшифруете и сделаете как надо:
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:45) [13]Если tracklength=500, то все будет нормально, дело в том что у меня за стандартный(реальная длительность фильма) берется tracklength=599
Формула по которой выщитывается позиция((длительность*(кол-во прошедших секунд))/100%) + идет пересчет в секунды
TrackBar1.Position:=(trackposition div 10)*1000 div(tracklength div 1000);
← →
Думкин © (2004-05-07 11:48) [14]> 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 12:11) [15]Я дико извиняюсь, там (каждая секунда = 1000), и таких секунд 599 итого 599*1000=599000
А схема, которую Вы мне предложили работает только с не большими проблемами:
1. При перемотке идут полосы;
2. После завершения перемотки фильм дальше не показывается(может я что-то не так понял и это только часть кода, обеспечивающая всего лишь передвижение ползунка)
← →
Думкин © (2004-05-07 12:20) [16]> Mongoose © (07.05.04 12:11) [15]
Я тоже дико извиняюсь, но
1. tracklength div 1000, А если tracklength=500? Причем тут 599000?
2. Я написал, что это схема. Например, при движении у вас будет работать таймер - это хорошо? и т.п. Это схема. Но она во-всяком случае:
> при этом воспроизводимый фильм тоже переезжал на тоже место
это достигается. Внести небольшие изменения, я думаю, не составит труда.
← →
Mongoose © (2004-05-07 12:31) [17]Я не думаю, что фильмы длительностью = пол секунды будут использоваться в моем случае...
А по поводу таймера - я его использую для показа отсчета времени
Да фильм переезжает, как и было заказано, спасибо.
А как тогда продолжить его движение, ведь сами понимаете, что просто перевод на тоже место никакой полезности не несет.
← →
Думкин © (2004-05-07 12:48) [18]> Mongoose © (07.05.04 12:31) [17]
1. 2 таймера заводить никто не мешает.
2. если фильм до начала перетаскивания проигрывался, то никто не мешает сделать mp1.Play
← →
Mongoose © (2004-05-07 17:13) [19]Спасибо за помощь.
Вот сталкнулся с проблемой такой, что при перетаскивании происходит очень длительная задержка ~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 и проделать тоже самое, что и в предыдущем случае(с фильмом) или же есть другие способы?
Заранее благодарен.
← →
Mongoose © (2004-05-07 17:14) [20]Забыл спросить а зачем 2 таймера?
← →
Думкин © (2004-05-07 18:46) [21]1. Я изменяю позицию, возникает событие изменения которое обрабатывая я изменяю позицию. Про белого бычка слышали?
2. Ну один у вас отвечает за время, второй у меня отвечает за изменение позиции трэкбара.
← →
Думкин © (2004-05-07 18:54) [22]> [19] Mongoose © (07.05.04 17:13)
>У меня, в плеере, используется аудио поток формата *.wav; он воспроизводится одновременно с фильмом. Использую так же TMediaPlayer. Так вот - как осуществить его переход на тоже место где находится фильм? Создать invisible TTrackBar и проделать тоже самое, что и в предыдущем случае(с фильмом) или же есть другие способы?
1. А звук в фильм?
2. Можно. второй трэкбар не нужен. Совсем. Достаточно одного - все данные в приведенном коде. При условии, что позиции синхронизованы.
← →
Mongoose © (2004-05-07 18:59) [23]
> 1. Я изменяю позицию, возникает событие изменения которое
> обрабатывая я изменяю позицию. Про белого бычка слышали?
Честно говоря я не понимаю о чем Вы...
> 2. Ну один у вас отвечает за время, второй у меня отвечает
> за изменение позиции трэкбара.
Я так делаю как Вы написали, просто я наверно не понятно написал.
Итак, вернемся к моему посту 07.05.04 17:13 [19]
← →
Mongoose © (2004-05-07 19:02) [24]Нет звук и фильм скомпоновать нельзя, таков заказ.
А что конкретно из данных в коде надо?
← →
Думкин © (2004-05-07 19:11) [25]> [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 21:14) [26]
> 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-08 06:39) [27]> [26] Mongoose © (07.05.04 21:14)
1. Вот именно это и происходит у вас когда вы в onChange меняете позицию.
2. А тут думайте. Сказано кажется вполне достаточно - простоо поймите чтоо для чего написано - разберитесь для чего нужна каждая строчка и что она делает.
← →
Mongoose © (2004-05-08 13:25) [28]Спасибо за помощь. Теперь буду думать ведь все заново писать надо.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.037 c