procedure TForm1.Trackbar1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var ChannelRect, SliderRect: TRect; SliderWidth: Word; Pt: TPoint;begin FillChar(SliderRect, SizeOf(SliderRect), 0); FillChar(ChannelRect, SizeOf(ChannelRect), 0); SendMessage(Trackbar1.Handle, TBM_GETTHUMBRECT, 0, DWord(@SliderRect)); SendMessage(Trackbar1.Handle, TBM_GETCHANNELRECT, 0, DWord(@ChannelRect)); if Trackbar1.Orientation = trHorizontal then begin Pt:= Classes.Point(X, Y); SliderWidth := (SliderRect.Right - SliderRect.Left) div 2; ChannelRect.Top := SliderRect.Top; ChannelRect.Bottom := SliderRect.Bottom; end else begin Pt:= Classes.Point(X, Y); SliderWidth := (SliderRect.Bottom - SliderRect.Top) div 2; ChannelRect.Top := SliderRect.Left; ChannelRect.Bottom := SliderRect.Right; end; if PtInRect(SliderRect, Classes.Point(X, Y)) then inherited else if Windows.PtInRect(ChannelRect, Pt) then begin inc(ChannelRect.Left, SliderWidth); dec(ChannelRect.Right, SliderWidth); Trackbar1.Position := round((Pt.X - ChannelRect.Left) * Trackbar1.Max / (ChannelRect.Right - ChannelRect.Left)); end; inherited;end;
procedure TForm1.TrackBar1Click(Sender:TObject);beginTrackBar1.Position:=((ScreenToClient(Mouse.CursorPos).X-TrackBar1.Left+4)*TrackBar1.Max) div TrackBar1.ClientWidth;end;