先检测鼠标滚轮是否响应,然后就向发送下面的消息
用SendMessage(TreeView->Handle,WM_VSCROLL,SB_LINEDOWN,0)来实现向下滚动一行
SB_LINEDOWN 下移一行
SB_LINEUP 上移一行
SB_PAGEDOWN 下移一页
SB_PAGEUP 上移一页
Top
10 楼stanely(俺是邢她汉子)回复于 2004-08-05 11:17:13 得分 0
Re:
先检测鼠标滚轮是否响应,然后就向发送下面的消息
用SendMessage(TreeView->Handle,WM_VSCROLL,SB_LINEDOWN,0)来实现向下滚动一行
SB_LINEDOWN 下移一行
SB_LINEUP 上移一行
SB_PAGEDOWN 下移一页
SB_PAGEUP 上移一页
谢谢,但是如何知道鼠标滚轮滚动了多少呢?Top
11 楼prophet2004(泡菜)回复于 2004-08-05 11:58:22 得分 10
处理消息 WM_MBUTTONDOWN
如果等于MK_MBUTTON就是中键按下了
怎么处理不同我再说了吧Top
12 楼capoatguitar(菠萝蜜汁红塔山)回复于 2004-08-05 14:03:08 得分 10
具体方法查看DELPHI帮助 WM_VSCROLL 里面有全部介绍。Top
13 楼stanely(俺是邢她汉子)回复于 2004-08-05 15:03:29 得分 0
谢谢各位的热心帮助!
我知道了那些OnMouseWheelXXX无相应的原因就是scrollbox没有焦点,而令其得到焦点的办法除了调用setfocus之外,还有就是让其内部控件得到焦点,而单纯的鼠标点击其本身无法使其得到焦点。但是如果内部是一对无法通过鼠标点击得到焦点的东西怎么办呢?比如tpanel和tspeedbutton
我想捕捉scrollbox的鼠标按下消息,但是我用重载wndproc的办法,WM_LBUTTONDOWN似乎永远收不到。难道鼠标按下不是这个消息么?
另外,请问pageup和pagedown的vkCode分别是什么?
谢谢!Top
14 楼stanely(俺是邢她汉子)回复于 2004-08-05 15:04:33 得分 0
对了,还有一点,我不想用onmousedown这个事件得到鼠标按下,因为子类还要使用它。Top
15 楼xufenglong(天天向上)回复于 2004-08-05 15:13:37 得分 10
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
if WheelDelta < 0 then
SendMessage(sbxBL.Handle,WM_VSCROLL, SB_LINEDOWN, 0)
else
SendMessage(sbxBL.Handle,WM_VSCROLL, SB_LINEUP, 0);
end;