Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

нужен совет по 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 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.027 c
14-1088752863
МТС-ник
2004-07-02 11:21
2004.07.25
unlimited GPRS


3-1088494421
souLLamer
2004-06-29 11:33
2004.07.25
SQL - игнорирование регистра букв.


14-1089123073
VEG
2004-07-06 18:11
2004.07.25
Дайте, пожалуйста, совет насчет доменов и хостинга


14-1089057420
miwa
2004-07-05 23:57
2004.07.25
Где найти драйвера под linux для soft-modem а Conexant?


9-1081937690
V@LER@N
2004-04-14 14:14
2004.07.25
АльфаБленд