怎样让TScrollBox响应鼠标滚轮操作?
rt 问题点数:100、回复次数:26Top
1 楼longtusoft(神灯之主)回复于 2004-08-03 21:12:10 得分 10
TSCROLLBOX有几个事件:
ONMOUSEWHEEL
ONMOUSEWHEELDOWN
ONMOUSEWHEELUP专门用来响应鼠标滚轮操作.Top
2 楼ghchen()回复于 2004-08-04 08:52:29 得分 0
先顶一下Top
3 楼liuqifeiyu(liuqi)回复于 2004-08-04 09:07:43 得分 0
我不知道,帮你顶Top
4 楼waini12(魔刀王子)回复于 2004-08-04 09:19:27 得分 0
你应该演示一下呀 说几个事情谁明白呢Top
5 楼GoldShield(李柏岑)回复于 2004-08-04 09:21:24 得分 0
记得不是是D7才有那几个事件哦.搞忘了.Top
6 楼GoldShield(李柏岑)回复于 2004-08-04 09:22:02 得分 0
参透DELPHI那本书上讲了,比较详细Top
7 楼stanely(俺是邢她汉子)回复于 2004-08-05 10:38:16 得分 0
Re:
TSCROLLBOX有几个事件:
ONMOUSEWHEEL
ONMOUSEWHEELDOWN
ONMOUSEWHEELUP专门用来响应鼠标滚轮操作.
我也看到了这几个事件,但是根本就形同虚设,无论滚轮怎么滚,都不会触发阿?
Top
8 楼GoldShield(李柏岑)回复于 2004-08-05 10:54:10 得分 0
如果楼主今天不结贴,那我晚上回去帮你翻一下.Top
9 楼prophet2004(泡菜)回复于 2004-08-05 11:03:09 得分 50
先检测鼠标滚轮是否响应,然后就向发送下面的消息
用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;Top
16 楼xufenglong(天天向上)回复于 2004-08-05 15:15:17 得分 0
補充
sbxbl為ScrollBox的名字Top
17 楼prophet2004(泡菜)回复于 2004-08-05 15:18:12 得分 0
另外,请问pageup和pagedown的vkCode分别是什么?
我也不知道怎么得到!这个不能帮你了
不过你可以发消息啊
向SB_PAGEDOWN 下移一页
和SB_PAGEUP 上移一页
Top
18 楼xufenglong(天天向上)回复于 2004-08-05 15:26:34 得分 0
pageup VK_UP = 38;
pagedown VK_DOWN = 40;Top
19 楼stanely(俺是邢她汉子)回复于 2004-08-05 15:41:13 得分 0
谢谢各位的帮助,可是我一直不明白为什么其他控件的WM_LBUTTONDOWN消息能够收到,而scrollbox收不到这个消息?Top
20 楼stanely(俺是邢她汉子)回复于 2004-08-05 15:44:11 得分 0
Re:
pageup VK_UP = 38;
pagedown VK_DOWN = 40;
如果这样,那么上下方向键的又是多少呢?Top
21 楼prophet2004(泡菜)回复于 2004-08-05 15:46:29 得分 0
错了,上下键是38、40Top
22 楼capoatguitar(菠萝蜜汁红塔山)回复于 2004-08-05 16:03:01 得分 10
查哪个键的键值,就找一个控件,在ONMOUSEDOWN事件中写:showmessage(inttostr(key));Top
23 楼stanely(俺是邢她汉子)回复于 2004-08-05 16:35:31 得分 0
我不想用onmousedown这个事件得到鼠标按下,因为子类还要使用它Top
24 楼stanely(俺是邢她汉子)回复于 2004-08-05 21:07:45 得分 0
?Top
25 楼GoldShield(李柏岑)回复于 2004-08-06 18:15:56 得分 0
老大.回去翻了所有的资料.自己也试了N次.但我的机子上它可以响应啊.
我的机子为:WINXP+D6.USB接口鼠标.Top
26 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2004-08-07 02:34:14 得分 0
回复人: stanely(俺是邢她汉子) ( ) 信誉:108 2004-08-05 15:44:00 得分: 0
Re:
pageup VK_UP = 38;
pagedown VK_DOWN = 40;
如果这样,那么上下方向键的又是多少呢?
自己打开 DELPHI 输入VK_UP 然后再上面按 ctrl+鼠标左键 然后打开得文件里面有所有得键值
Top




