Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TrackBar [D7, WinXP]


Nizam ©   (2008-05-07 22:20:00) 

Доброго времени суток форумчане!!Пишу плеер на fmod нужно сделать навигацию по файлу как в winamp чтоб щелкаешь по линии и менялась позиция,используя trackbar,проблема в различении изменения позиции таймером(отображение позиции ежесекундно) и пользователем(перемотка). Есть у кого соображения по этому поводу???


{RASkov}   (2008-05-08 11:44:00) [1]

> [3] Nizam   (07.05.08 23:09)

TrackBar - в таком виде какой он есть в Д7 - не пойдет.
Как вариант можно "отнаследоваться" от TrackBar и "поднять" обработку мыши(MouseDown/Up) от TControl'а...
Затем в MouseDown "отключить" обработчик изменения положения ползунка по таймеру, а на MouseUp вернуть все назад...
Вот нечто так:
unit Unit1;
interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ExtCtrls;

type
 TMyTrBar = class(TTrackBar)
 public
   property OnMouseDown;
   property OnMouseUp;
 end;

 TForm1 = class(TForm)
   Timer1: TTimer;
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
 private
   Tr: TMyTrBar;
   procedure TrBarChange(Sender: TObject);
   procedure TrMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
   procedure TrMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
   { Private declarations }
 public
   { Public declarations }
 end;

var Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Width:=450;
 Height:=100;
 Tr:=TMyTrBar.Create(Self);
 with Tr do begin
  Left:=10; Top:=10;
  Width:=self.ClientWidth-20;
  Max:=100;
  Parent:=Self;
  OnChange:=TrBarChange;
  OnMouseDown:=TrMouseDown;
  OnMouseUp:=TrMouseUp;
 end;
end;

procedure TForm1.TrMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 Timer1.OnTimer:=nil;
end;

procedure TForm1.TrMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 Timer1.OnTimer:=Timer1Timer;
end;

procedure TForm1.TrBarChange(Sender: TObject);
begin
 Tag:=Tr.Position; //Tag - текущее "положение" в песни....
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Tag:=Tag mod 100 + 1; //Tag - текущее "положение" в песни....
 Tr.Position:=Tag;
 Caption:=IntToStr(Tag);
end;

end.


Nizam   (2008-05-07 23:09:00) [2]

может можно перехватить нажатие на ползунок трекбара


Nizam   (2008-05-07 23:03:00) [3]

проблема в том что каждую секунду timer изменяет положение trackbar на текущую позицию в файле и если в то же время пользователь попытается сменить позицию то вылазит ошибка,нужно реализовать различение действий timer и пользователя


Renegat   (2008-05-07 22:57:00) [4]

Соображений, простите, дофига и далее :) Только вот проблема изложена неясно. Поясняйте, в чём конкретно состоит трудность.


Наверх

Титульная страница Поиск, карта сайта Написать письмо