我如何知道何时停止滚动aT ScrollBar?

时间:2009-10-01 00:48:26

标签: delphi events scrollbar

我已经使用了一些带滚动条的程序,当你还在拖动“拇指”时更新链接的内容,而其他程序在你释放鼠标之前就没有了。这意味着此处涉及不同类型的Windows消息。但是我从TScrollBar中找到的只是一个OnScroll事件,在你拖动的时候不断激活。它也没有OnMouseDown或OnMouseUp事件。有没有办法为TScrollBar设置“OnEndDragging”通知?

2 个答案:

答案 0 :(得分:5)

尝试此代码(使用Delphi 2009测试),当您跟踪拇指时,它将使用随机颜色填充表单客户端区域,并在拇指释放时将其填充为黄色:

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
  Randomize;
  if ScrollCode = scTrack then
    Color := RGB(Random(256), Random(256), Random(256));
  if ScrollCode = scEndScroll then
    Color := clYellow;
end;

TScrollCode值会映射到WM_HSCROLLWPARAM所记录的WM_VSCROLL值。

答案 1 :(得分:2)

当用户拖动拇指时,“实时”更新其滚动区域的程序正在处理wm_HScrollwm_VScroll消息的sb_ThumbTrack代码。那些仅在用户松开拇指时更新的内容正在处理sb_ThumbPosition代码。

在这两个选项上存在折衷,即在用户没有稍微移动拇指之后进行更新,即使用户尚未实际发布它。处理sb_ThumbTrack,然后设置计时器。如果计时器触发,请更新显示。如果另一个sb_ThumbTrack到达,请重置计时器。