我已经使用了一些带滚动条的程序,当你还在拖动“拇指”时更新链接的内容,而其他程序在你释放鼠标之前就没有了。这意味着此处涉及不同类型的Windows消息。但是我从TScrollBar中找到的只是一个OnScroll事件,在你拖动的时候不断激活。它也没有OnMouseDown或OnMouseUp事件。有没有办法为TScrollBar设置“OnEndDragging”通知?
答案 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_HSCROLL
和WPARAM
所记录的WM_VSCROLL
值。
答案 1 :(得分:2)
当用户拖动拇指时,“实时”更新其滚动区域的程序正在处理wm_HScroll
和wm_VScroll
消息的sb_ThumbTrack
代码。那些仅在用户松开拇指时更新的内容正在处理sb_ThumbPosition
代码。
在这两个选项上存在折衷,即在用户没有稍微移动拇指之后进行更新,即使用户尚未实际发布它。处理sb_ThumbTrack
,然后设置计时器。如果计时器触发,请更新显示。如果另一个sb_ThumbTrack
到达,请重置计时器。