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

Вниз

TTrackBar   Найти похожие ветки 

 
anod ©   (2002-07-28 16:32) [0]

Здраствуйте, у меня такой вопрос:
На форме лежит TTrackBar, проигрывается музыка. Как мне реализвать прокрутку песни? Событие onChange не подходит, так как в OnTimer ему присваевывается нужная позиция, вызывая тем самым это событие. Подкинте идейку.


 
TTCustomDelphiMaster ©   (2002-07-28 16:58) [1]

Введите переменную - флаг.
При изменении позиции в OnTimer включайте флаг.
В обработчике onChange проверяйте если флаг включен значит изменение произошло от таймера, если нет - то по другим причинам. После этого флаг следует сбросить.


 
Юрий Зотов ©   (2002-07-28 17:05) [2]

Именно событие OnChange как раз для этого и подходит. А чтобы не было рекурсии, сделайте так:

procedure Timer1OnTimer(Sender: TObject);
begin
TrackBar1.OnChange := nil;
try
TrackBar1.Position := MediaPlayer1.Position
finally
TrackBar1.OnChange := TrackBar1Change
end
end;

procedure TrackBar1Change(Sender: TObject);
begin
MediaPlayer1.Position := TrackBar1.Position
end;


 
anod ©   (2002-07-28 17:36) [3]

Спасибо, попробую.


 
anod ©   (2002-07-28 17:45) [4]

2Юрий Зотов
Ваш пример не заработал:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
pos:=BASS_ChannelGetPosition(stream);
Gauge.OnChange := nil;
try
Gauge.Position:=Trunc(BASS_ChannelBytes2Seconds(stream,pos));
finally
Gauge.OnChange := gaugeChange;
end;
end;

procedure TForm1.gaugeChange(Sender: TObject);
begin
BASS_ChannelSetPosition(stream, Gauge.Position);
end;


2TTCustomDelphiMaster
А когда влаг должен выключатся???


 
Юрий Зотов ©   (2002-07-28 17:57) [5]

Этот пример может не работать только в том случае, если не работает ВАШ код или не назначены обработчики событий. Других вариантов нет.

И если он не работает, то не заработает и способ с флагом.


 
TTCustomDelphiMaster ©   (2002-07-28 18:10) [6]

Юрий Зотов © (28.07.02 17:05)
Не должно работать, т.к. событие будет обрабатываться после выхода из onTimer.


> anod © (28.07.02 17:45)
> 2Юрий Зотов
> Ваш пример не заработал:


Попробуй так
procedure TForm1.Timer1Timer(Sender: TObject);
begin
pos:=BASS_ChannelGetPosition(stream);
Gauge.OnChange := nil;
try
Gauge.Position:=Trunc(BASS_ChannelBytes2Seconds(stream,pos));
finally
Application.ProcessMessages;
Gauge.OnChange := gaugeChange;
end;
end;
может что нибудь получиться.


> 2TTCustomDelphiMaster
> А когда влаг должен выключатся???


В последней строчке procedure TForm1.gaugeChange(Sender: TObject);


 
anod ©   (2002-07-28 18:22) [7]

Извините, и то и тот способ работает - все дело в коде

Gauge.Position:=Trunc( BASS_ChannelBytes2Seconds(stream,pos));

BASS_ChannelSetPosition(stream, Gauge.Position);


 
TTCustomDelphiMaster ©   (2002-07-28 18:56) [8]


> TTCustomDelphiMaster © (28.07.02 18:10)
> Юрий Зотов © (28.07.02 17:05)
> Не должно работать, т.к. событие будет обрабатываться после
> выхода из onTimer.


Да... что-то я не то ляпнул. Прошу написанное считать "бредом сивой кобылы".


 
Юрий Зотов ©   (2002-07-28 19:10) [9]

Ну, слава Богу, все разобрались. Всегда бы так...



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.019 c
1-24053
DjecII
2002-07-25 12:38
2002.08.08
Вопрос про компоненты


4-24270
Stranger
2002-05-30 18:15
2002.08.08
Написание текста по вертикали в Image


1-24051
Folk
2002-07-25 14:54
2002.08.08
Где в Интернете можно скачать звуки?


3-23866
BJValentine
2002-07-18 15:48
2002.08.08
ADO ADO ADO


1-23986
Nostradamus
2002-07-26 23:48
2002.08.08
Интерестно