![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TTrackBar [D6, WinXP]
anod © (2002-07-28 16:32:00)Здраствуйте, у меня такой вопрос:
На форме лежит TTrackBar, проигрывается музыка. Как мне реализвать прокрутку песни? Событие onChange не подходит, так как в OnTimer ему присваевывается нужная позиция, вызывая тем самым это событие. Подкинте идейку.
Юрий Зотов (2002-07-28 19:10:00) [1]Ну, слава Богу, все разобрались. Всегда бы так...
TTCustomDelphiMaster (2002-07-28 18:56:00) [2]
> TTCustomDelphiMaster © (28.07.02 18:10)
> Юрий Зотов © (28.07.02 17:05)
> Не должно работать, т.к. событие будет обрабатываться после
> выхода из onTimer.
Да... что-то я не то ляпнул. Прошу написанное считать "бредом сивой кобылы".
anod (2002-07-28 18:22:00) [3]Извините, и то и тот способ работает - все дело в коде
Gauge.Position:=Trunc(BASS_ChannelBytes2Seconds(stream,pos));
BASS_ChannelSetPosition(stream, Gauge.Position);
TTCustomDelphiMaster (2002-07-28 18:10:00) [4]Юрий Зотов © (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);
Юрий Зотов (2002-07-28 17:57:00) [5]Этот пример может не работать только в том случае, если не работает ВАШ код или не назначены обработчики событий. Других вариантов нет.
И если он не работает, то не заработает и способ с флагом.
anod (2002-07-28 17:45:00) [6]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
А когда влаг должен выключатся???
anod (2002-07-28 17:36:00) [7]Спасибо, попробую.
Юрий Зотов (2002-07-28 17:05:00) [8]Именно событие 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;
TTCustomDelphiMaster (2002-07-28 16:58:00) [9]Введите переменную - флаг.
При изменении позиции в OnTimer включайте флаг.
В обработчике onChange проверяйте если флаг включен значит изменение произошло от таймера, если нет - то по другим причинам. После этого флаг следует сбросить.