Форум: "Основная";
Текущий архив: 2002.08.08;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c