Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.09.2007, 22:17
aleksnine aleksnine вне форума
Начинающий
 
Регистрация: 08.03.2007
Сообщения: 151
Репутация: 12
По умолчанию Listbox+Trackbar

Возможно ли сделать прокрутку с помощью Trackbar ?
Ответить с цитированием
  #2  
Старый 04.09.2007, 04:08
Аватар для 4erep_88
4erep_88 4erep_88 вне форума
Новичок
 
Регистрация: 18.07.2007
Сообщения: 51
Репутация: 15
По умолчанию Можно

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
ListBox1.Selected[TrackBar1.Position]:=true;
end;

Последний раз редактировалось 4erep_88, 04.09.2007 в 04:10.
Ответить с цитированием
  #3  
Старый 04.09.2007, 15:26
aleksnine aleksnine вне форума
Начинающий
 
Регистрация: 08.03.2007
Сообщения: 151
Репутация: 12
По умолчанию

Спасибо
Ответить с цитированием
  #4  
Старый 25.05.2009, 22:14
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию

А как сделать прокрутку трека если у нас есть MediaPlayer1 и TrackBar1?
Ответить с цитированием
  #5  
Старый 25.05.2009, 22:37
Аватар для Klassenas
Klassenas Klassenas вне форума
Новичок
 
Регистрация: 25.05.2009
Адрес: Казахстан, Павлодар
Сообщения: 87
Версия Delphi: Rad Studio 2010
Репутация: 1570
По умолчанию

Меня тоже этот вопрос интересует. Собственно, если использовать TrackBar только для прокрутки или только для отображения позиции трека, то тут ничего сложного нет. А вот как эти функции объединить на одном TrackBar'е - непонятно.
Ответить с цитированием
  #6  
Старый 25.05.2009, 23:52
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию

Цитата:
Сообщение от Klassenas
... Собственно, если использовать TrackBar только для прокрутки или только для отображения позиции трека, то тут ничего сложного нет.
А как именно это сделать для прокрутки трека?
Ответить с цитированием
  #7  
Старый 26.05.2009, 00:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да просто отключай один из обработчиков, пока работает второй.
Ответить с цитированием
  #8  
Старый 26.05.2009, 00:09
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию

Цитата:
Сообщение от lmikle
Да просто отключай один из обработчиков, пока работает второй.
А можна выложить код? Просто я не настолько велик в делфи.
Ответить с цитированием
  #9  
Старый 26.05.2009, 00:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну хорошо. Предположим, что во время проигрывания у нас позиция трекбара обновляется по таймеру... Вот обработчик таймера:
Код:
procedure TForm1.Timer1Timer(Sender :TObject);
begin
  // Отключаем обработчик
  TrackBar1.OnChange := Nil;

  // Далее делаем свои действия
  TrackBar1.Position := Random(100); // ну или что там у него

  // возвращаем обработчик
  TrackBar1.OnChange := TrackBar1Change;
end;
Ответить с цитированием
  #10  
Старый 26.05.2009, 02:43
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию

Вот сделал следующее:
Код:
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;
решает эту проблему, но видео тормозит (идет преривание при каждом увеливении TrackBar1.Position и Mediaplayer1.Position).

Последний раз редактировалось vah-smile, 26.05.2009 в 02:46.
Ответить с цитированием
  #11  
Старый 26.05.2009, 07:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Так меняйте позицию в тракбаре по отпусканию левой кнопки мыши в пределах трэкбара.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 26.05.2009 в 08:19.
Ответить с цитированием
  #12  
Старый 26.05.2009, 21:13
Аватар для Klassenas
Klassenas Klassenas вне форума
Новичок
 
Регистрация: 25.05.2009
Адрес: Казахстан, Павлодар
Сообщения: 87
Версия Delphi: Rad Studio 2010
Репутация: 1570
По умолчанию

Цитата:
Сообщение от Страдалецъ
Так меняйте позицию в тракбаре по отпусканию левой кнопки мыши в пределах трэкбара.

Я вот уже целый день голову ломаю, как задать условие для того, чтобы процедура TrackBar1Change работала только при условии нажатой кнопки мыши.
Ответить с цитированием
  #13  
Старый 26.05.2009, 21:19
Аватар для Klassenas
Klassenas Klassenas вне форума
Новичок
 
Регистрация: 25.05.2009
Адрес: Казахстан, Павлодар
Сообщения: 87
Версия Delphi: Rad Studio 2010
Репутация: 1570
По умолчанию

Цитата:
Сообщение от vah-smile
Вот сделал следующее:
Код:
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.Timer1Timer;
begin
  with MediaPlayer1 do
    if FileName<>'' then
      TrackBar1.Position:=Round(200*Position/Length);
end;
В моём случае 200 - число делений в тракбаре (max=200).
При этом в ListBox никаких манипуляций с таймером и тракбаром делать не надо.
Аналогично организуется и процесс перемотки:
Код:
with MediaPlayer1 do
  if FileName<>'' then
    Position:=Round(TrackBar1.Position*Length/200);
Но вопрос о условии нажатой кнопки мыши при этом всё равно остаётся открытым.

Последний раз редактировалось Klassenas, 26.05.2009 в 22:21.
Ответить с цитированием
  #14  
Старый 27.05.2009, 22:04
Аватар для Klassenas
Klassenas Klassenas вне форума
Новичок
 
Регистрация: 25.05.2009
Адрес: Казахстан, Павлодар
Сообщения: 87
Версия Delphi: Rad Studio 2010
Репутация: 1570
По умолчанию

Я думаю, надо сделать примерно так:
Код:
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;
Но как же всё-таки указать ему условие о нажатой кнопке мыши?
Ответить с цитированием
  #15  
Старый 31.05.2009, 21:11
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Вот тут всплывал вопрос

Плеер
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:25.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter