回 帖 发 新 帖 刷新版面

主题:有滚动条的表单问题

表单设置成有垂直滚动条,里面有容器、标签、文本框等许多控件,超过了表单下方。
1.在这些控件外滚动鼠标时,表单垂直滚动条有用,表单下方遮住的控件能显示
2.但一旦鼠标在这些控件内时,鼠标滚轮不起作用了!!
请问各位老师,怎么解决这个呀

回复列表 (共6个回复)

沙发

鼠标在这些控件内时,是因为你用鼠标点击了某控件,只要用鼠标点击一下表单,再拨动鼠标滚轮就行了。

板凳

谢谢sywzs
即使没有用鼠标点击这些控件,即鼠标一到这控件区域时,拨动鼠标滚轮根本不起作用!
如果把鼠标移出这些控件外,是可行的,好不方便!我是想让鼠标即使在这些控件区域内时也同样让鼠标滚轮起作用!
各位大师,有解决的方法吗?

3 楼

启动控件的滚动鼠标轮事件即可!

4 楼

lzguang一定是喜欢像IE浏览器那样的操作,页面上可以随意滚动鼠标。对于表单,这有点难度,当鼠标指针位于控件上方时,可以认为滚轮消息由控件处理,将产生控件的MouseWheel事件,并不滚动表单。

俺不建议试图用表单展现浏览器窗口滚动操作的想法,要滚动的话直接在表单的垂直滚动条上滚动就行。不过这里可以就此问题探讨探讨,Fox自身可以做到,不过效果嘛,可以试试看,呵呵。

事实上,当表单设置成有滚动条,并且有控件放至的位置超出表单范围,这时有4个属性与当前窗口显示的窗口表面范围有关,分别是:
ViewPortLeft、ViewPortTop、ViewPortWidth、ViewPortHeight
它们决定显示表单表面的哪部分。
不过它们是只读的,无法直接设置,但是所好的是表单提供了SetViewPort方法,可以通过它设置ViewPortLeft、ViewPortTop,这就够了。

试试在某个控件(比如Label)的MouseWheel事件中写入如下代码:
LPARAMETERS nDirection, nShift, nXCoord, nYCoord
WITH ThisForm
IF nDirection>0
    IF .ViewPortTop>0
        .SetViewPort(.ViewPortLeft,.ViewPortTop-10)
    ENDIF
ELSE
    .SetViewPort(.ViewPortLeft,.ViewPortTop+10)
ENDIF
ENDWITH

5 楼

Ilikefox,大师也!
效果非常好!!感谢!!
只是好几十个控件,要一个一个写,但也只能这样了!
[color=FF0000][b]再次请教:表单SetViewPort方法怎么用?望详解!![/b][/color]

6 楼

Visual FoxPro 9.0 语言参考 
SetViewPort 方法 
请参阅 
 全部折叠 全部展开 
设置表单的 ViewportLeft 和 ViewportTop 属性的值。

 
Object.SetViewPort(nLeft, nTop)
 

参数
nLeft 
指定表单的 ViewportLeft 属性的值。 
nTop 
指定表单的 ViewportTop 属性的值。 
说明
应用于:Form

如果成功设置了 ViewportLeft 和 ViewportTop 属性的值,则 SETVIEWPORT 方法返回“真” (.T.);否则返回“假” (.F.)。对于不包含滚动条的表单,将忽略 SetViewport方法。

ViewportLeft 和 ViewportTop 属性的度量单位由表单的 ScaleMode 属性设置决定——像素(默认值)或 foxels。

我来回复

您尚未登录,请登录后再回复。点此登录或注册