Конференция "Media" » TrackBar [D7, WinXP]
 
  • Nizam (07.05.08 22:20) [0]
    Доброго времени суток форумчане!!Пишу плеер на fmod нужно сделать навигацию по файлу как в winamp чтоб щелкаешь по линии и менялась позиция,используя trackbar,проблема в различении изменения позиции таймером(отображение позиции ежесекундно) и пользователем(перемотка). Есть у кого соображения по этому поводу???
  • Renegat (07.05.08 22:57) [1]
    Соображений, простите, дофига и далее :) Только вот проблема изложена неясно. Поясняйте, в чём конкретно состоит трудность.
  • Nizam (07.05.08 23:03) [2]
    проблема в том что каждую секунду timer изменяет положение trackbar на текущую позицию в файле и если в то же время пользователь попытается сменить позицию то вылазит ошибка,нужно реализовать различение действий timer и пользователя
  • Nizam (07.05.08 23:09) [3]
    может можно перехватить нажатие на ползунок трекбара
  • {RASkov} © (08.05.08 11:44) [4]
    > [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.

 
Конференция "Media" » TrackBar [D7, WinXP]
Есть новые Нет новых   [133928   +471][b:0][p:0.001]