MS Flex Grid控件是微软的一个网格控件,可以用于显示数据库中的信息,对于
一些比较简单的显示方式,还是比较方便的。
一些比较简单的显示方式,还是比较方便的。
加入MS Flex Grid控件控件的方法:
在VC中选择Project|Add to Project|Conpenments and Controls 在弹出的对话框中
选择Registered ActiveX Controls然后选择Microsoft FlexGrid Control, version 6.0。
系统会提示你加入几个类进入你的工程。包括四个类:
CMSFlexGrid,CRowCursor,COleFont,CPicture;
同时在VC的Control面板上会显示出MS Flex Grid控件的图标,可以同其他普通
控件一样操作这个控件。
选择Registered ActiveX Controls然后选择Microsoft FlexGrid Control, version 6.0。
系统会提示你加入几个类进入你的工程。包括四个类:
CMSFlexGrid,CRowCursor,COleFont,CPicture;
同时在VC的Control面板上会显示出MS Flex Grid控件的图标,可以同其他普通
控件一样操作这个控件。
一、引言
MSFlexGrid控件是Visual C++中提供的已注册ActiveX控件,它常被用于显示和操作表格式数据,特别是数据库文件的显示及交互操作。在其他程序的交互界面中,对于不确定数目的同
类大批量数据的输入而言,MSFlexGrid是十分有效的。利用MSFlexGrid可以将输入文件中的数据显示出来并作交互修改,通过功能扩展可将表格数据直接copy到Excel、Word及Origin中的表格内,利用右键菜单实现此功能。本文编程实现了上述类似功能,并将MSFlexGrid控件的一些调整操作(如行高、列宽、Cell内容的对齐方式等)加以外部按钮化,使其更为方便易用。
二、先行者对MSFlexGrid控件功能的扩充
王勇、李延平[1]提出在MSFlexGrid的当前网格单元(Cell)内创建同样尺寸的编辑框(CEdit)覆盖该Cell,并将Cell内的Text传给编辑框,通过此编辑框以实现MSFlexGrid的网格编辑功能。秦胜[2]提出用信息预解释(PreTranslate)方法,截留编辑框(CEdit)内的ESC键与回车键(Enter)按下消息,以防止在编辑框内不小心按下上述两按键之一时立刻关闭对话框,退出整个程序。李强[3]在此基础上作了一些改进:①对MSFlexGrid控件的Scroll消息响应中,若存在编辑框,则将其销毁。②编辑框内ESC与Enter键消息的PreTranslate,以防止退出整个对话框程序。③使编辑框同MSFlexGrid使用的字体一致。④“高亮度”显示动态创建的编辑框。魏会君[4]用控件聚合技术实现MSFlexGrid控件的Cell编
辑与修改功能,并指出可将聚合后的控件编写为一个完整的新的ActiveX控件,以备频繁使用。网上一篇文章[5]在VB中实现了可间隔的多列(multi Columns)选取功能,通过将已“选中”列的颜设置为正常选中颜(BackColorSel)来实现之。
三、本文的改进之处
本文除实现上述功能外,另作了如下改进:
(1) 通过在当前网格单元(Current Cell)处创建同样尺寸的编辑框(CEdit)来实现对Cell内容的交互修改,由消息预解释(PreTranslateMessage)拦截编辑框内的ESC与Enter键的按下消息。在Cell内按ESC键时,Cell内的值维持原值不变且EditBox销毁(DestroyWindow),但当前Cell仍具有焦点(focus);再次编辑该Cell时,不能直接生成新的编辑框,可在其附近的Cell中单击后,再单击该Cell即可生成新的编辑框。在Cell内按Enter键时,Cell的值更新为EditBox内的值,同时下一个Cell自动进入编辑状态;其顺序为自动转到同一列的下一行Cell,若已到最大行数处,则转到下一列的起始Cell (FixedColumns不包括在内),若到整个MSFlexGrid的最末一个Cell,则按Enter键时,该Cell处的EditBox销毁但该Cell仍具有焦点,再对该Cell进行编辑的方法同上。
(2) 网格数据自身内部及与外部表格式数据文件间的copy/paste操作功能。将外部表格式数据源(如Excel文件)内的数值直接copy/paste至MSFlexGrid中,可减少输入工作量;有时需将至MSFlexGrid的部分数值输出到Word文件的表格或Origin的DataSheet用于绘图。本文利用系统剪贴板(Clipboard)来传送数值,考虑到MSFlexGrid的行之间的换行符号为“\n”,而Word与Origin中的换行符号为“\n\r”(Excel自动兼容两种格式)。故由MSFlexGrid数值copy至Clipboard时,预先将将其中的“\n”符号替换为“\n\r”,由外部文件paste至MSFlexGrid时作相反的替换。具体操作时,先选中MSFlexGrid内感兴趣的区域(考虑到使用方便,FixedRows/Cols不计在内),在MSFlexGrid外部的主控界面按鼠标右键自动弹出右键菜单,选择Copy或Paste即可。详见源程序中。
(3) MSFlexGrid网格(Cell)属性调整操作的外部按钮化
a. 单元格内的文本对齐方式,选中感兴趣的Cell Range,按“CellAligment”按钮,弹出对齐方式对话框,由水平与垂直方向两个ComboBox组成,选择合适的选项即可。Cell内的对齐方式共有0~9十种,其具体功能见表1.
表1、MSFlexGrid控件的CellAlignment 属性
常数 | 值 | 描述 |
FlexAlignLeftTop | 0 | 单元内容顶部左对齐。 |
FlexAlignLeftCenter | 1 | 单元内容中间左对齐。对字符串的缺省设置值。 |
FlexAlignLeftBottom | 2 | 单元内容底部左对齐。 |
FlexAlignCenterTop | 3 | 单元内容顶部居中。 |
FlexAlignCenterCenter | 4 | 单元内容中间居中。 |
FlexAlignCenterBottom | 5 | 单元内容底部居中。 |
FlexAlignRightTop | 6 | 单元内容顶部右对齐。 |
FlexAlignRightCenter | 7 | 单元内容中间右对齐。对数字的缺省设置值。 |
FlexAlignRightBottom | 8 | 单元内容底部右对齐。 |
FlexAlignGeneral | 9 | 单元内容一般对齐方式。对字符串中间左对齐而对数值中间右对齐。 |
对齐方式对话框的垂直方向ComboV,共有三项可供选择:靠上、居中与靠下;水平方向ComboH,共有四项可供选择:常规、靠左、居中与靠右。其中,“常规”选项相当于值为9的对齐方式(即默认对齐方式),若选择此项则自动将垂直方向ComboV设置为“居中”且ComboV 处于Disabled状态;若选择“常规”此项,程序将ComboH与ComboV的选中状态转换为数值0~rows函数的使用方法及实例8,然后返回此数值。而进入对齐方式对话框时,则根据Cell的当前对齐方式设置ComboH与ComboV的初始选中状态。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论