VB6中对MSHFlexGrid控件编程模拟实现滚动条与鼠标滚轮动作

2010-10-26 01:18:34郝西成
卫生职业教育 2010年24期
关键词:窗体滚轮指针

郝西成

(兰州资源环境职业学院,甘肃 兰州 730000)

VB6中对MSHFlexGrid控件编程模拟实现滚动条与鼠标滚轮动作

郝西成

(兰州资源环境职业学院,甘肃 兰州 730000)

MSHFlexGrid控件;美化效果;模拟鼠标动作;VB编程

MSHFlexGrid控件用于对表格数据进行显示和操作,可以将文本或图片,或者文本和图片放在MSHFlexGrid的任意单元中。程序员可以在代码中指定当前单元,也可以在运行时使用鼠标或者方向键对其进行修改。在对包含字符串和图片的表格进行分类、合并以及格式化时,使用MSHFlexGrid控件具有很大的灵活性。

然而MSHFlexGrid控件不能响应鼠标滚轮动作(即就是为VB6打上支持鼠标滚轮的补丁后),这就给使用者在操作时造成了不便,与此同时,该控件的滚动条颜色也未提供属性进行设置,这也给使用者在考虑程序界面的美观与统一时造成了影响。虽然可以使用标准Windows滚动条FlatScrollBar控件加上一些自编代码代替MSHFlexGrid控件自身的滚动条使效果有所改善,亦或在VB“部件”下选择Microsoft Forms Object Library来使用它提供的可以设置颜色的滚动条加上一些自编代码来代替MSHFlexGrid控件自身的滚动条,但效果仍差强人意。针对上述问题,在不借助第三方控件的前提下完全可以通过编程来模拟实现。

1 建立工程

在窗体上先放置一个PictureBox控件(Picture1),再在其中放置1个MSHFlexGrid和1个PictureBox控件(Picture2),最后在Picture2中放置4个Image控件(见图1,其中Picture2内从左到右依次为Image1、Image2、Image3和Image4。为保证显示效果,在用工具制作这4个图像时,应让其水平、宽度、像素保持一致,并注意Image1、Image2和Image3图像的大小即高度、像素比例保持协调)。

图1 Picture2中放置4个Image控件示意图

2 添加模块

输入以下代码(截取发送到窗体的Windows消息,实现鼠标滚轮的事件检测)。

3 为窗体输入以下代码

4 效果验证

运行程序后单击Image3、Image2、Image4或拖动Image2,将发现此时与滚动条操作效果完全一致,不论鼠标指针位置在何处,在当窗体处于活动状态时,只要滚动鼠标滚轮,MSHFlex-Grid中数据与Image2都会同步移动,看看是否与“千千静听”的播放列表窗口操作很相似。

如果对MSHFlexGrid控件的选中行配合使用其CellPicture属性,则可以将图片放在MSHFlexGrid的对应单元格中,同时,也只需要再增加几行简单的代码,便可以使模拟的滚动条在需要的时候出现,而在不需要的时候就隐藏起来,当然,我们还可以为Image1、Image2和Image3再分别制作一个图像,并调用API函数(GetCursorPos)继续编程,来获取鼠标指针在屏幕像素坐标中的位置,从而测算出鼠标指针是否移入或移出Image1、Image2和Image3对象,进而实现Image1、Image2和Image3对象图像的即时更换(在VB中,虽然Image控件支持鼠标的移入事件,但却未提供移出事件,尽管在当其他对象发生鼠标的移入事件时,事实上也就是鼠标指针从Image控件上移出,但基于这样一个思路的编程实际效果有相当的局限性),这样就可以使我们模拟的滚动条显示效果更加美观、生动,当然,也别忘记给窗体“化妆”(此时即与“千千静听”的播放列表窗口操作效果完全一致了。见图2。这是自编的影音播放程序中在使用MSHFlexGrid控件显示播放列表时,代码中常数p2取值6并且在鼠标指针指向Image2对象时的显示效果情况)。

图2 自编影音播放程序的显示效果

上述代码中,MSHFlexGrid控件的ScrollBars属性值被设置为FlexScrollBarNone,此时,改变其TopRow属性值就不能实现数据行的滚动,虽然可以将MSHFlexGrid控件的ScrollBars属性值设置为FlexScrollBarBoth或FlexScrollBarVertical,并利用PictureBox控件的容器特性将MSHFlexGrid控件的Width属性设置超过PictureBox控件的Width属性值后,使MSHFlexGrid控件自身的滚动条不被看到,但由于Windows外观设置的不同,MSHFlexGrid控件的滚动条显示宽度也随之变化。当然,我们可以将MSHFlexGrid控件的Width属性值设置的足够大,并且测算出其存放数据的最右一列的宽度,使其达到模拟滚动条所用的PictureBox控件(Picture2对象)的左侧边界来解决,而如果要求精确设置MSHFlexGrid控件的Width属性,就需要额外编程检测Windows的版本及外观设置,为简化代码,并多一种解决问题的思路,同时又使代码更具有通用性(其实利用上述代码的架构也可以实现Picture1对象内其他内容的滚动显示),笔者没有使用MSHFlexGrid控件的TopRow属性值去实现数据行滚动。在程序中,由于对MSHFlexGrid控件设置了RowHeight(0)= 0,并且VB系统中又默认MSHFlexGrid控件的Row属性是从0开始计数的,故在尚未增加检测模拟滚动条是否根据MSHFlexGrid控件中数据行数是显示或隐藏的代码之前,应保证常数p3的值比p2至少大2。

G420

A

1671-1246(2010)24-0155-04

猜你喜欢
窗体滚轮指针
滚轮滑雪运动多元价值与推广策略研究
冰雪运动(2019年2期)2019-09-02 01:41:22
偷指针的人
娃娃画报(2019年5期)2019-06-17 16:58:10
试谈Access 2007数据库在林业档案管理中的应用
档案天地(2019年5期)2019-06-12 05:12:02
为什么表的指针都按照顺时针方向转动
1+1=150
滚轮移动式铸铁机改滚轮固定式铸铁机设计改造
基于改进Hough变换和BP网络的指针仪表识别
电测与仪表(2015年5期)2015-04-09 11:30:42
光电传感器的新功能拓展——滚轮式光电测距原理演示仪
ARM Cortex—MO/MO+单片机的指针变量替换方法
基于LayeredWindow的异形窗体局部刷新
中文信息(2014年2期)2014-03-06 23:49:14