|  | 
 
 | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
| Возможно ли сделать прокрутку с помощью 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; |