您现在的位置:首页 >> 图形媒体 >> 图形媒体 >> 内容

给DSPack 中 TDSTrackBar 增添点击定位的功能

时间:2012/7/24 10:47:37 点击:

  核心提示:DSPack 封装 Directshow,让Directshow开发简洁不少,同时也简化了不少功能。长期以来,所有版本的 DSPack 中TDSTrackBar 都缺少点击进度条自动定位时间点的功能。现在的播放器,没这个点击定位功能差不多就不能叫播放器了吧?通过查阅Win32 API 资料,本人给T...

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;

你看,大功告成了。

作者:danielhuang 录入:danielhuang 来源:原创
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号