вот тут я когда-то переделывал 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