|
#1
|
|||
|
|||
Listbox+Trackbar
Возможно ли сделать прокрутку с помощью Trackbar ?
|
#2
|
||||
|
||||
Можно
procedure TForm1.TrackBar1Change(Sender: TObject);
begin ListBox1.Selected[TrackBar1.Position]:=true; end; Последний раз редактировалось 4erep_88, 04.09.2007 в 04:10. |
#3
|
|||
|
|||
Спасибо
|
#4
|
||||
|
||||
А как сделать прокрутку трека если у нас есть MediaPlayer1 и TrackBar1?
|
#5
|
||||
|
||||
Меня тоже этот вопрос интересует. Собственно, если использовать TrackBar только для прокрутки или только для отображения позиции трека, то тут ничего сложного нет. А вот как эти функции объединить на одном TrackBar'е - непонятно.
|
#6
|
||||
|
||||
Цитата:
|
#7
|
|||
|
|||
Да просто отключай один из обработчиков, пока работает второй.
|
#8
|
||||
|
||||
Цитата:
|
#9
|
|||
|
|||
Ну хорошо. Предположим, что во время проигрывания у нас позиция трекбара обновляется по таймеру... Вот обработчик таймера:
Код:
procedure TForm1.Timer1Timer(Sender :TObject); begin // Отключаем обработчик TrackBar1.OnChange := Nil; // Далее делаем свои действия TrackBar1.Position := Random(100); // ну или что там у него // возвращаем обработчик TrackBar1.OnChange := TrackBar1Change; end; |
#10
|
||||
|
||||
Вот сделал следующее:
Код:
procedure TForm1.ListBox1DblClick(Sender: TObject); begin with MediaPlayer1 do begin Filename := Listbox1.items.strings[listbox1.itemindex]; Open; Display := Panel2; DisplayRect := Panel2.ClientRect; Play; end; TrackBar1.Max := MediaPlayer1.Length; Timer1.Enabled := True; end; procedure TForm1.Timer1Timer(Sender: TObject); begin TrackBar1.Position := Mediaplayer1.Position; MediaPlayer1.Play; end; В итоге TrackBar1 "следит" за воспроизведением. А как сделать так, чтобы можна было бы перематывать воспроизведение (например, при помощи мыши)? Так как код: Код:
procedure TForm1.TrackBar1Change(Sender: TObject); begin Mediaplayer1.Position := TrackBar1.Position; end; Последний раз редактировалось vah-smile, 26.05.2009 в 02:46. |
#11
|
||||
|
||||
Так меняйте позицию в тракбаре по отпусканию левой кнопки мыши в пределах трэкбара.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 26.05.2009 в 08:19. |
#12
|
||||
|
||||
Цитата:
Я вот уже целый день голову ломаю, как задать условие для того, чтобы процедура TrackBar1Change работала только при условии нажатой кнопки мыши. |
#13
|
||||
|
||||
Цитата:
Эта задача решается проще: Код:
procedure TForm1.Timer1Timer; begin with MediaPlayer1 do if FileName<>'' then TrackBar1.Position:=Round(200*Position/Length); end; При этом в ListBox никаких манипуляций с таймером и тракбаром делать не надо. Аналогично организуется и процесс перемотки: Код:
with MediaPlayer1 do if FileName<>'' then Position:=Round(TrackBar1.Position*Length/200); Последний раз редактировалось Klassenas, 26.05.2009 в 22:21. |
#14
|
||||
|
||||
Я думаю, надо сделать примерно так:
Код:
procedure TForm1.TrackBar1Change(Sender: TObject); begin if Trackbar1.MouseInClient and {нажата левая кнопка мыши} then Begin with MediaPlayer1 do if FileName<>'' then Position:=Round(TrackBar1.Position*Length/200); end else exit; end; |