Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.52 MB
Время: 0.042 c
1-1089640336
sergeii
2004-07-12 17:52
2004.07.25
Округление чисел


1-1089538115
sashok
2004-07-11 13:28
2004.07.25
Подключение DLL по ходу выполнения програмы.


8-1084035716
$tranger
2004-05-08 21:01
2004.07.25
Меню как в OFFICE XP


14-1089253960
Ozone
2004-07-08 06:32
2004.07.25
Верить или нет?


1-1089320167
bloodman
2004-07-09 00:56
2004.07.25
Плагин на Delphi.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский