DSPack 封装 Directshow,让Directshow开发简洁不少,同时也简化了不少功能。长期以来,所有版本的 DSPack 中TDSTrackBar 都缺少点击进度条自动定位时间点的功能。
现在的播放器,没这个点击定位功能差不多就不能叫播放器了吧?通过查阅Win32 API 资料,本人给TDSTrackBar 添加了这一功能。
实现方法:
打开DSPack源代码中的DSTrackBar.pas,定位到
procedure TDSTrackBar.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
增添内容如下
procedure TDSTrackBar.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const TBM_GETCHANNELRECT=1050;
var
FRangeRec:TRect;
p_Position:Single;
begin
inherited MouseDown(Button, Shift, X, Y);
if Button = mbLeft then FMouseDown := true;
if Button = mbLeft then
begin
SendMessage(Self.Handle, TBM_GETCHANNELRECT, 0, LParam(@FRangeRec));
case Self.Orientation of
trHorizontal:
p_Position:=(X-FRangeRec.Left)*1.0/(FRangeRec.Right-FRangeRec.Left);
trVertical:
p_Position:=(Y-FRangeRec.Top )*1.0/(FRangeRec.Bottom-FRangeRec.Top);
end;
if p_Position<0.0 then p_Position:=0.0;
if p_Position>1.0 then p_Position:=1.0;
Position:=Round(Max*p_Position);
end;
end;
你看,大功告成了。