Показать сообщение отдельно
  #10  
Старый 13.10.2010, 20:03
Аватар для ryderx34
ryderx34 ryderx34 вне форума
Активный
 
Регистрация: 22.01.2010
Сообщения: 211
Версия Delphi: 7, 2010
Репутация: 1349
По умолчанию

вот тут я когда-то переделывал TrackBar для плеера
добавил событие OnUserChange, которое вызывается только если положение слайдера вручную меняется юзером
Код:
unit MediaTrackBar;

interface

uses
  SysUtils, Classes, Controls, ComCtrls;

type
  TMediaTrackBar = class(TTrackBar)
  private
    FMouseDown: Boolean;
    FOnUserChange: TNotifyEvent;
  protected
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure Changed;override;  
  public
    constructor Create(AOwner: TComponent);override;
  published
    property OnUserChange: TNotifyEvent read FOnUserChange write FOnUserChange;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TMediaTrackBar]);
end;

{ TMediaTrackBar }

procedure TMediaTrackBar.Changed;
begin
  if FMouseDown then
  begin
    if Assigned(FOnUserChange) then
      FOnUserChange(Self);
  end;
  inherited Changed;
end;

constructor TMediaTrackBar.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FMouseDown:=False;
end;

procedure TMediaTrackBar.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  FMouseDown:=True;
  inherited MouseDown(Button,Shift,X,Y);
end;

procedure TMediaTrackBar.MouseUp(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  FMouseDown:=False;
  inherited MouseUp(Button,Shift,X,Y);
end;

end.
P.S готовый компонент для Delphi 7
Ответить с цитированием