eachy 发表于 2014-11-4 14:14:17

初试 ODCL + VsflexGrid

VsflexGrid 提供了比 OdclGrid 控件更灵活、强大的表格,第一次使用非常不错
在 OpenDCL 编辑器中引入 Vsflexgrid 控件,根据需要在属性面板修改一些设置,cols 列数,rows 行数



在 CAD 中加载运行

eachy 发表于 2014-11-4 14:47:53


VSFlexGrid 控件属性方法一览表VSFlexGrid 控件属性方法一览表(带()为方法)


属性/方法名称      功能                           示例语法
AddItem()            增加一行                     O.A String[, RowIndex]
Aggregate            返回集合合计(总数,平均,等等)   O.A = (A,Row1,Col1,Row2,Col2)
Align                对象在窗体上的显示位置         O.A = 0|1|2|3|4
AllowBigSelection    设定列头是否整行或整列选择   O.A = True|False
AllowSelection       是否可多单元选择               O.A = True|False
AllowUserFreezing    运行时用鼠标冻结行或列         O.A = 0|1|2|3
AllowUserResizing    调整(行/列)大小方式            O.A = 0|1|2|3|4
Appearance         边框平面/凹陷/凸起             O.A = 0|1|2
Archive()            存储或清除一个二进制文件内容   O.A ArcFileName,FileName,0|1|2|3
ArchiveInfo          返回一个二进制文件信息         O.A ArcFileName,0|1|2|3|4,LineIndex
AutoReSize         是否自动调整大小               O.A = True|False
AutoSearch         设置自动搜索                   O.A = 0|1|2
AutoSearchDelay      设置AutoSearch多少秒刷新       O.A = 2
AutoSize()         自动调整列到指定宽度         O.A Col1,Col2,True|False,1000
AutoSizeMode         自动调整适合行列内容         O.A = 0|1
AutoSizeMouse      是否双击列首自动调整适合行列   O.A = True|False
BackColor            所有非固定行列的背景色         O.A = Color
BackColorAlternate   所有非固定行列的交替行颜色   O.A = Color
BackColorBkg         表格背景坐底色               O.A = Color
BackColorFixed       固定的行/列背景色            O.A = Color
BackColorFrozen      冻结部分的行列背景色         O.A = Color
BackColorSel         单元被选中的背景色             O.A = Color
BindToArray()      绑定数组      O.A ArrayStr,RowDim,ColDim,PageDim,CurrentPage
Bookmark             返回ADO Recordset行书签(只读)O.A(Row)
BorderStyle          边框粗细样式                   O.A = 0|1
BottomRow            返回可见范围的最大行号(只读)   O.A
BuildComboList()   将数据库中的内容写入下拉框   O.A(rs, FieldList, KeyField, BackColor)
CausesValidation   ???目标事件确认                O.A = False|True
Cell               选择部分的相应准则值         O.A(准则, Row1, Col1, Row2, Col2) = 准则值
CellAlignment      设定单元里数据的排列方式       O.A = 0 至 9
CellBackColor      指定单元范围的背景颜色         O.A = Color
CellBorder()         选择单元范围的边界颜色         O.A Color,左,上,右,下,垂直,水平
CellButtonPicture    选择单元范围的按钮图片         O.A = LoadPicture("D:\Icon.ico")
CellChecked          选择单元范围的复选框         O.A = 0|1|2
CellFloodColor       选择单元范围的流程颜色         O.A = Color
CellFloodPercent   选择单元范围的流程百分比       O.A = 1 至 100
CellFontBold         指定单元范围设为黑体字         O.A = False|True
CellFontItalic       指定单元范围设为斜体字         O.A = False|True
CellFontName         对象所使用的字体名称         O.A = FontName
CellFontSize         对象文字像数大小(默认9pt)      O.A = 9
CellFontStrikethru   选择范围是否有删除线         O.A = False|True
CellFontUnderline    选择范围是否有下画线         O.A = False|True
CellFontWidth      设定单元或指定范围字体的宽度   O.A = 2
CellForeColor      设定单元或指定范围字体的颜色   O.A = Color
CellHeight         返回/显示到当前单元高度(只读)O.A
CellLeft             返回当前单元的左端位置(只读)   O.A
CellPicture          显示在单元或指定范围中的图片   O.A = LoadPicture("D:\Icon.ico")
CellPictureAlingment 单元或指定范围图片的显示位置   O.A = 0 至 10
CellTextStyle      设定单元文本的显示形式         O.A = 0|1|2|3|4
CellTop            返回当前单元的顶端位置(只读)   O.A
CellWidth            返回当前单元的宽度(只读)       O.A
Clear()            清除表格内容                   O.A(,)
ClientHeight         返回客户可见范围高度         O.A
ClientWidth          返回客户可见范围宽度         O.A
Clip               设置选择范围的内容             O.A = Text
ClipSeparators       ???
Col                  设置激活单元的列号             O.A = 2
ColAlignment         列对齐排列方式               O.A(Col) = 0 至 9
ColComboList         向下拉框写入管道字符         O.A(Col) = "|ListStr1|ListStr2|..."
ColData            设置用户定义的长整形数据       O.A(Col) = UserLong
ColDataType          列数据类型                     O.A(Col)=0至14到20(&H14),30(&H1E),31(&H1F)
ColEditMask          列编辑套用格式字符串         O.A(Col) = 指定的格式如:######
ColFormat            格式化显示列                   O.A(Col) = "Currency"|"#.###%"...
ColHidden            是否隐藏指定列               O.A(Col) = True|False
ColImageList         设置图像列表句柄到列
ColIndent            缩进指定列                     O.A Col= 100
ColIndex             返回列索引(只读)               O.A Col
ColIsVisible         返回列是否可见(只读)         O.A Col
ColKey               设置列钥匙                     O.A(Col) = KeyStr
ColPos               返回列距左边宽度(只读)         O.A Col
ColPosition          移动列的位置                   O.A(Col) = ReCol
Cols               返回/设置总列数                O.A = 2
ColSel               返回/设置最后选择的列          O.A = 3
ColSort            设置列种类                     O.A(Col) = 0 至 10
ColWidth             返回/设置指定列宽            O.A(Col) = 100
ColWidthMax          最大列宽                     O.A(Col) = 5000
ColWidthMin          最小列宽                     O.A(Col) = 100
ComboCount         取得Combo下拉按钮总数(只读)    O.A
ComboData            Combo下拉按钮数据(只读)      O.A
ComboIndex         Combo下拉按钮索引            O.A = 1
ComboItem            Combo下拉按钮项目(只读)      O.A
ComboList            向下拉框写入管道字符内容       O.A = "a|b|c"
ComboSearch          Combo下拉按钮搜寻方式          O.A = 0|1|2|3
Container            返回/设置对象的容器            O.A.Caption = "Forms"
DataBindings         返回数据装入数(只读)         O.A
DataMember         返回/设置数据描述成员          O.A = DataStr
DataMode             设置数据链接状态               O.A = 0|1|2|3|4
DataRefresh()      刷新数据源                     O.A
DataSource         设置数据源                     Set O.A = DataDim
Drag()               拖放                           O.A
DragIcon             拖放图标                     O.A = LoadPicture("D:\Icon.ico")
DragMode             拖放方式                     O.A = 0|1
DragRow()            拖放行(本示例在MouseDown过程)O.A O.RowSel
Editable             设置表格是否可编辑修改         O.A = 0|1|2
EditCell()         当移动到当前单元时自动选择   O.A
EditMask             当编辑时只能使用指定值         O.A = StrValue
EditMaxLength      所有单元限制字节大小         O.A = 2
EditSelLength      编辑时选择长度               O.A = 5
EditSelStart         移动到单元时的光标位置         O.A = 0(或者Len(vsg.text))
EditSelText          编辑选择处放文本               O.A = "Str"
EditText             编辑文本                     O.A = "Str"
EditWindow         返回编辑窗口(只读)             O.A
Ellipsis             超宽字符加省略号               O.A = 0|1|2
Enabled            对象是否激活可用               O.A = False|True
ExplorerBar          单击列头的选择、拖动或排序样式 O.A = 0 至 15
ExtendLastCol      是否扩充最后的列到适合宽度   O.A = False|True
FillStyle            是否改变当前范围的内容或格式   O.A = 0|1
FindRow            查找符和条件返回的行(只读)   O.A FindStr,,,[敏感],[精度])
FinishEditing()      完成编辑的                     O.A = False|True
FixedAlignment       固定列的对齐方式               O.A(Col) = 0 至 9
FixedCols            固定几列                     O.A = 1
FixedRows            固定几行                     O.A = 1
FlexDataSource       流动数据源                     O.A = rsDate
FloodColor         设置流程颜色                   O.A = Color
FocusRect            单元的选择虚框样式类型          O.A = 0|1|2|3|4|5
Font               设定字体                     O.A = FontName
FontBold             设定字体粗体                   O.A = False|True
FontItalic         设定字体斜体                   O.A = False|True
FontName             设定字体名称                   O.A = FontName
FontSize             设定字体大小                   O.A = 10
FontStrikethru       设定字体删除线               O.A = False|True
FontUnderline      设定字体下划线               O.A = False|True
FontWidth            设定字体的宽度(非间距)         O.A = 2
ForeColor            设定字体前景颜色               O.A = Color
ForeColorFixed       设定固定单元的文本颜色         O.A = Color
ForeColorFrozen      设定字体冻结部分的前景颜色   O.A = Color
ForeColorSel         设定选择单元的文本颜色         O.A = Color
FormatString         设计管道符格式化行/列字符串    O.A = Format(1,"#0.00")
FrozenCols         需要冻结的列数               O.A = 2
FrozenRows         需要冻结的行数               O.A = 2
GetMergedRange()   ???获得合并山脉
GetNode()            ???获得节点
GetNodeRow()         ???获得节点行
GetSelection()       ???获得选择                   O.A Row1, Col1, Row2, Col2
GridColor            单元行列的网格线颜色         O.A = Color
GridColorFixed       设定固定网格线的颜色         O.A = Color
GridLines            可编辑区的网格线类型         O.A = 0 至 14
GridLinesFixed       固定行列网格效果类型         O.A = 0 至 14
GridLineWidth      编辑区的网格线线粗细         O.A = 1
Height               设置对象高度                   O.A = 1000
HelpContextID      对象缺省上下文帮助ID         O.A = HelpID
HighLight            是否突出加亮显示选中单元       O.A = 0[无]|1[默认]|2[仅焦点时有]
hWnd               获取对象句柄                   O.A
Index                对象索引号(运行时只读)         O.A
IsCollapsed          ???
IsSelected         是否已选择                     O.A
IsSubtotal         是否已小记                     O.A
Left               对象距左边位置               O.A = 100
LeftCol            指定显示在最左边的列         O.A = 1
LoadArray()          载入数组
LoadGrid()         载入网格                     O.A FileName, 0 至 6[,True(含固定行列)|False]
LoadGridURL()      载入网格URL
MergeCells         相同内容的单元格合并类型       O.A = 0|1|2|3|4|5|6
MergeCol             是否上下列合并               O.A(Col) = True
MergeCompare         返回/设置合并比较类型          O.A = 0|1|2
MergeRow             是否左右行合并               O.A(Row) = True
MouseCol             返回鼠标指向的当前列号         O.A
MouseIcon            设定鼠标指向的当前图形         O.A = LoadPicture("C:\.ico")
MousePointer         设置对象的鼠标指针样式         O.A = 0 到 15|99
MouseRow             返回鼠标指向的当前行号         O.A
Move()               移动对象                     O.A Left,,,
MultiTotals          ???Multi总数
Name               对象名称(运行时只读)         O.A
NodeClosedPicture    节点封闭的图标               O.A = LoadPicture("C:\.ico")
NodeOpenPicture      节点打开的图标               O.A = LoadPicture("C:\.ico")
Object               返回/设置该对象变量            Set DimObjName = O.A
OLEDrag()            OLE拖拽数据                  O.A
OLEDragMode          OLE拖拽方式                  O.A = 0|1
OLEDropMode          OLE拖拽落下方式                O.A = 0|1|2
Outline()            ???外面的线
OutlineBar         返回/设置显示目录树的线条       O.A = 0 至 6
OutlineCol         ???外面的线列
OwnerDraw            返回或设置执行 DrawCell 事件   O.A = 0 至 6
Parent               返回该对象所在的对象(只读)   O.A.Caption = "Forms"
Picture            返回控件的图片(只读)         O.A.属性|方法 = 相应值
PicturesOver         返回控件图片结束               O.A = False|True
PictureType          用Picture属性生成的图片类型    O.A = 0|1
PrintGrid()          打印网格数据                   O.A ["主题",True|False,1|2,左右空,上下空]
Redraw               设定是否刷新控件               O.A = 0|1|2
Refresh()            刷新表格                     O.A
RemoveItem()         删除指定行                     O.A VSG1.RowSel
RightCol             返回右边最大的可见列范围       O.A
RightToLeft          是否将固定行放到右边         O.A = True
Row                  设置激活单元的行号             O.A = 2
RowData            设置用户定义的长整形数据       O.A(Row) = UserLong
RowHeight            返回/设置指定行高            O.A(Row) = 100
RowHeightMax         行高的最大值                   O.A(Row) = 500
RowHeightMin         行高的最小值                   O.A(Row) = 230
RowHidden            是否隐藏指定行               O.A(2) = True|False
RowIsVisible         返回行是否在可见范围中(只读)   O.A(Row)
RowOutlineLevel      返回/设置水平行小记            O.A(Row) = 0|1
RowPos               返回行距上边高度(只读)         O.A Row
RowPosition          移动行的位置                   O.A(Row) = NewRow
Rows               返回/设置总行数                O.A = 2
RowSel               返回/设置最后选择的行          O.A = 2
RowStatus            设置行状态                     O.A = 0|1|2|3
SaveGrid()         保存网格内容到二进制文件       O.A FileName, 0 至 6[,True(含固定行列)|False]
ScrollBars         设定卷动轴的方式               O.A = 0|1|2|3
ScrollTips         卷轴提示                     O.A = False|True
ScrollTipText      卷轴提示文本                   O.A = "Text"
ScrollTrack          行是否随拖动条卷动显示         O.A = False|True
Select()             选择行列范围                   O.A Row,Col[,RowSel][,ColSel]
SelectedRow          已选择行(只读)               O.A(Row)
SelectedRows         返回所选总行数(只读)         O.A
SelectionMode      设置单元焦点选中方式         O.A = 0|1|2|3
SetFocus()         设置到对象焦点               O.A
SheetBorder          表格边框颜色                   O.A = Color
ShowCell()         立刻显示到指定单元             O.A Row, Col
ShowComboButton      是否显示当选择时拉下按钮       O.A = 0|1|2
ShowWhatsThis()      显示“这是什么”               O.A
Sort               按照选择的基准重新排序顺序方式O.A = 0 到 10
Subtotal()         小计                           O.A 属性名[,其它共9个可省略参数]
SubtotalPosition   是否小计上面或下面的数值       O.A = 0|1
TabBehavior          Tab键跳转顺序禁止            O.A = 0|1
TabIndex             对象的Tab选择顺序            O.A = 2
TabStop            是否允许Tab自动选择            O.A = True|False
Tag                  存储数据时所需的附加数据       O.A = Str
Text               返回/写入当前单元的文字      O.A = Str
TextMatrix         返回/写入指定单元的文字      O.A(Row, Col) = Str
TextStyle            单元格文字效果               O.A = 0|1|2|3|4
TextStyleFixed       固定行列文本的3D效果         O.A = 0|1|2|3|4
ToolTipText          鼠标指向表格的说明消息         O.A = "TextString"
Top                  对象上边距                     O.A = 100
TopRow               指定显示在最上面的行         O.A = 5
TreeColor            目录树颜色                     O.A = Color
Value                返回当前单元数值部分(只读)   O.A
ValueMatrix          返回指定单元数值部分(只读)   O.A Row, Col
Version            返回控件的版本号(只读)         O.A
VirtualData          虚拟数据                      O.A = True|False
Visible            是否显示对象                   O.A = True|False
WallPaper            表格壁纸背景图O.A=LoadPicture(Image) | O.A.属性|方法 = 相应值
WallPaperAlignment   壁纸背景图墙报对齐方式         O.A(Col) = 0 至 10
WhatsThisHelpID      设置与对象相关联的上下文号   O.A = HelpIDString
Width                设置对象宽度                   O.A = 5000
WordWrap             设定单元中的文本是否换行       O.A = True|False
ZOrder()             设置对象Z顺序                  O.A 0|1




eachy 发表于 2014-11-4 15:01:47

Cell 属性的使用:
Cell 的作用是给以选定区块的特定的设置值,具体值可参阅相应属性值。
语法:Cell(条件准则, Row1, Col1, Row2, Col2) = 相应准则值
其中的“条件准则”有以下准则常数,根据准则的不同而设置相应准则的值:
flexcpAlignment      对齐方式
flexcpBackColor      背景色
flexcpChecked          选择框
flexcpCustomFormat   格式设置
flexcpData             日期
flexcpFloodColor       颜色
flexcpFloodPercent   背景色
flexcpFont             字体
flexcpFontBold         粗体
flexcpFontItalic       斜体
flexcpFontName         字体名
flexcpFontSize         字体大小
flexcpFontStrikethru   删除线
flexcpFontUnderline    下划线
flexcpFontWidth      字符宽
flexcpForeColor      字符色
flexcpHeight         高
flexcpLeft             左
flexcpPicture          添加图
flexcpPictureAlignment 图对齐
flexcpRefresh          刷新
flexcpSort             分类
flexcpText             字符
flexcpTextDisplay      显示字符
flexcpTextStyle      文本样式
flexcpTop            返回顶端高,同 RowPos 和 valueMatrix 属性
flexcpvalue            返回字符值
flexcpVariantvalue   返回字符值
flexcpWidth            返回单元宽
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
flexSTSum 方法:每行增加小计行[这个方法还不会用]语法:
VSG.flexSTSum 常数名,
, :标签列
, :计算列
, :格式,例 "$0.00"
, :Color
, :Color
, :False|True
, :例 "数 %s"
, :0|1|2|3
:False|True
常数名:
常数            常数值说明
flexSTNone      0       大纲唯一的,没有合计价值
flexSTClear   1       清除全部的小计
flexSTSum       2       总数
flexSTPercent   3       总数的百分比
flexSTCount   4       行数
flexSTAverage   5       平均
flexSTMax       6       最大的
flexSTMin       7       最小的
flexSTStd       8       标准偏差
flexSTVar       9       方差
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MousePointer、MouseIcon 鼠标指针的应用:
0=flexDefault
1=flexArrow
2=flexCross
3=flexIBeam
4=flexIcon
5=flexSize
6=flexSizeNESW
7=flexSizeNS
8=flexSizeNWSE
9=flexSizeEW
10=flexUpArrow
11=flexHourglass
12=flexNoDrop
13=flexArrowHourGlass
14=flexArrowQuestion
15=flexSizeAll
50=flexPointerCopy'(&H32) '拖动带拷贝
51=flexPointerMove'(&H33) '拖动
52=flexSizeHorz'(&H34) '左右调整
53=flexSizeVert'(&H35) '上下调整
54=flexHand'(&H36) 手型
99=flexCustom '自定义
Const MA = "50,51,52,53,54"



eachy 发表于 2014-11-4 15:16:57


一个填充函数

(defun XD::ODCL:VsflexWriteRange (control lst / i j)
(dcl_axcontrol_put
    control
    "Cols"
    (apply 'max (mapcar 'length lst))
)
(dcl_axcontrol_put control "Rows" (length lst))
(setq i 0)
(foreach row lst
    (setq j 0)
    (foreach str row
      (if (and str (/= str ""))
        (dcl_axcontrol_put control "TextMatrix" i j str)
      )
      (setq j (1+ j))
    )
    (setq i (1+ i))
)
t
)

txc6853234 发表于 2014-11-4 15:58:21

不错学习了额

newer 发表于 2014-11-4 16:23:28

和ODCL自身带的控件比有什么优势呢?

st788796 发表于 2014-11-4 16:38:04

看说明支持合并格、还有统计功能
还可以和 Excel 之间复制、粘贴

iLisp 发表于 2014-11-4 18:34:09

http://zm6.sm.cn/?src=http%3A%2F%2Fwww.cnblogs.com%2Feffort-rookie%2Farchive%2F2012%2F10%2F25%2F2739255.html&uid=1c2bf4e636d4555c9e6fee41b7ac89c0&hid=68a2c4017e7a18f0e5b4e1ff0ed4ded5&pos=3&cid=9&pi=&di=&time=1415096688674&from=click&restype=1&pagetype=0000004000000408

csharp 发表于 2014-11-4 19:59:45

64位 系统上无法使用

freedake 发表于 2014-11-5 08:41:40

入门初接触,量有点大……

grs432 发表于 2014-11-5 11:16:57

先看看再说,,学习中

st788796 发表于 2014-11-5 11:19:02

vsFlexGrid是ComponentOne公司的一个ActiveX控件,它与MS的MSHFlexGrid控件在功能上是兼容的,即MSHFlexGrid所具备的属性和方法,它也都具备,只有少数几个属性名称略有不同,使用MSHFlexGrid编写的程序,只需要作较小的调整就可以转换过来;但相比MSHFlexGrid,vsFlexGrid多了很多功能,它的属性和事件非常丰富,可以实现非常灵活的控制和快捷的编码,下面主要对一些常用和实用的功能进行介绍:

一、数据批量操作

l利用Cell属性批量存取数据

比如要清除一块区域的文本,或者设置一块区域的字体,不用循环处理,只需要一条语句就可以完成,如:

vsFlexGrid.Cell(flexcpText,1,1,5,5) = “” ‘设置(1,1)-(5,5)这块单元格区域的文本都为空

vsFlexGrid.Cell(flexcpFontBold,1,1,5,5)=True ‘设置(1,1)-(5,5)这块单元格区域的字体都为粗体

类似还可以设置的有单元格对齐、图片、颜色等。



而语句:strText = vsFlexGrid.Cell(flexcpText,1,1,5,5)

返回一个用vbTab间隔列,vbCr间隔行的字符串,当然也可以反过来赋值,这样该区域内的每个单元格都可以赋不同的值。

l使用-1对所有行列进行处理

RowHeight(-1)=300 ‘将所有行的高度设置为300Twip,可以类似使用的属性有:

RowHidden,ColWidth,ColHidden,ColAlignment等



二、大量数据存放

vsFlexGrid可以存放数据的地方有:CellText,CellData,ColData,RowData

除了CellText是String类型外,其他都是Variant类型,也就是说你可以将任意类型的数据存放在表格中,比如日期(Date),类型变量(Type),集合(Collection),数组,记录集(RecordSet),以及各种对象(Object),这对于关联数据比较多的程序非常有用。



注意:vsFlexGrid.Cell(flexcpText,1,1) = rsData!Name实际是存放了一个ADO.Field对象,应该使用CStr(rsData!Name)对类型进行明确。



三、编辑特性

vsFlexGrid的单元格是可以编辑的,并且有以下几种编辑形式:

l文本框:只要Editable设置为可编辑,每个单元格缺省就是TextBox编辑样式

l下拉框:

设置当前单元格的ComboList属性或者指定列的ColComboList属性,即可实现VB.ComboBox样式的单元编辑,而且下拉界面中可以显示多列,如:

vsFlexGrid.ComboList = _

“|#100*1;张三”& vbTab& “男”& vbTab& “28岁”& _

“|#101;李四”& vbTab& “男”& vbTab& “29岁”& _

“|#102;王五”& vbTab& “男”& vbTab& “30岁”

其中”|”间隔的是各行数据,vbTab间隔的是各列数据;第1个”|”表示下拉框可以输入,”#”后面的是每行的ItemData, 第一个ItemData后面”*1”表示是第1列的数据在选择后显示在ComboBox中。



l复选框:

设置指定列的ColDataType = flexDTBoolean,或者指定当前元单格的CellChecked属性即可。

l选择按钮:

设置当前单元格的ComboList属性或者指定列的ColComboList属性为”…”即可,主要配合CellButtonClick事件使用。



四、界面特性

1)         边框

除了表格线之外,vsFlexGrid还可以类似Excel一样,设置单元格式的边框线条,包括颜色、粗细,有无:

VSFlexGrid.CellBorder Color As OLE_COLOR, Left As Integer, Top As Integer, Right As Integer, Bottom As Integer, Vertical As Integer, Horizontal As Integer



2)         自动行高,列宽

使用AutoSize方法,可以使列宽、或者行高根据单元格的内容进行自适应调整。

其中列宽也可以通过双击表头进行自适应调整。



3)         树形缩进(TreeList)

通过设置表格行的IsSubtotal、RowOutlineLevel属性,可以实现树形风格的缩进层次样式,这样vsFlexGrid就可以实现TreeView和ListView的结合。



4)         自绘

通过设置OwnerDraw属性,可对实现对单元格内容的自绘处理,主要结合DrawCell事件进行:

DrawCell(ByVal hDC As Long, ByVal Row As Long, ByVal col As Long, ByVal left As Long, ByVal top As Long, ByVal right As Long, ByVal bottom As Long, done As Boolean)



5)         背景

可以为vsFlexGrid设置背景图,背景图相对单元格式内容是透明的,并且可以设置对齐和平铺属性。



6)         列排序,行、列拖动

设置vsFlexGrid.ExplorerBar属性,就可以实现类似Windows的资源管理器一样,点击列头进行列数据排序,或者用鼠标拖动改变列、行的顺序。

7)         冻结行列

除了固定行列头外,还可以类似Excel一样,通过vsFlexGrid.FrozenCols/FrozenRows设置冻结行列,冻结行列在滚动时,和固定行列是一样的效果,但是光标可以进入到冻结行列范围内的单元格中去。



五、丰富的事件控制:

vsFlexGrid一共有50多个事件,这些事件主要用于编辑和界面控制,在使用过程中,经常可能会发现某个事件特别有用;因此充分利用这些事件,可以很方便地实现很多功能,下面是它支持的事件及对应列表,粗体是较常用的,从定义基本就可以看出它的作用;详细的事件说明,可以查看帮助。

lAfterCollapse(ByVal Row As Long, ByVal State As Integer)

lAfterDataRefresh()

lAfterEdit(ByVal Row As Long, ByVal Col As Long)

lAfterMoveColumn(ByVal Col As Long, Position As Long)

lAfterMoveRow(ByVal Row As Long, Position As Long)

lAfterRowColChange(ByVal OldRow As Long, ByVal OldCol As Long, ByVal NewRow As Long, ByVal NewCol As Long)

lAfterScroll(ByVal OldTopRow As Long, ByVal OldLeftCol As Long, ByVal NewTopRow As Long, ByVal NewLeftCol As Long)

lAfterSelChange(ByVal OldRowSel As Long, ByVal OldColSel As Long, ByVal NewRowSel As Long, ByVal NewColSel As Long)

lAfterSort(ByVal Col As Long, Order As Integer)

lAfterUserFreeze()

lAfterUserResize(ByVal Row As Long, ByVal Col As Long)

lBeforeCollapse(ByVal Row As Long, ByVal State As Integer, Cancel As Boolean)

lBeforeDataRefresh(Cancel As Boolean)

lBeforeEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean)

lBeforeMouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single, Cancel As Boolean)

lBeforeMoveColumn(ByVal Col As Long, Position As Long)

lBeforeMoveRow(ByVal Row As Long, Position As Long)

lBeforePageBreak(ByVal Row As Long, BreakOK As Boolean)

lBeforeRowColChange(ByVal OldRow As Long, ByVal OldCol As Long, ByVal NewRow As Long, ByVal NewCol As Long, Cancel As Boolean)

lBeforeScroll(ByVal OldTopRow As Long, ByVal OldLeftCol As Long, ByVal NewTopRow As Long, ByVal NewLeftCol As Long, Cancel As Boolean)

lBeforeScrollTip(ByVal Row As Long)

lBeforeSelChange(ByVal OldRowSel As Long, ByVal OldColSel As Long, ByVal NewRowSel As Long, ByVal NewColSel As Long, Cancel As Boolean)

lBeforeSort(ByVal Col As Long, Order As Integer)

lBeforeUserResize(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean)

lCellButtonClick(ByVal Row As Long, ByVal Col As Long)

lCellChanged(ByVal Row As Long, ByVal Col As Long)

lChangeEdit()

lClick()

lComboCloseUp(ByVal Row As Long, ByVal Col As Long, FinishEdit As Boolean)

lComboDropDown(ByVal Row As Long, ByVal Col As Long)

lCompare(ByVal Row1 As Long, ByVal Row2 As Long, Cmp As Integer)

lDblClick()

lDragDrop(Source As Control, X As Single, Y As Single)

lDragOver(Source As Control, X As Single, Y As Single, State As Integer)

lDrawCell(ByVal hDC As Long, ByVal Row As Long, ByVal Col As Long, ByVal Left As Long, ByVal Top As Long, ByVal Right As Long, ByVal Bottom As Long, Done As Boolean)

lEndAutoSearch()

lEnterCell()

lError(ByVal ErrorCode As Long, ShowMsgBox As Boolean)

lFilterData(ByVal Row As Long, ByVal Col As Long, Value As String, ByVal SavingToDB As Boolean, WantThisCol As Boolean)

lGetHeaderRow(ByVal Row As Long, HeaderRow As Long)

lGotFocus()

lKeyDown(KeyCode As Integer, Shift As Integer)

lKeyDownEdit(ByVal Row As Long, ByVal Col As Long, KeyCode As Integer, ByVal Shift As Integer)

lKeyPress(KeyAscii As Integer)

lKeyPressEdit(ByVal Row As Long, ByVal Col As Long, KeyAscii As Integer)

lKeyUp(KeyCode As Integer, Shift As Integer)

lKeyUpEdit(ByVal Row As Long, ByVal Col As Long, KeyCode As Integer, ByVal Shift As Integer)

lLeaveCell()

lLostFocus()

lMouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

lMouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

lMouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

lOLECompleteDrag(Effect As Long)

lOLEDragDrop(Data As VSFlex8Ctl.VSDataObject, Effect As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

lOLEDragOver(Data As VSFlex8Ctl.VSDataObject, Effect As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single, State As Integer)

lOLEGiveFeedback(Effect As Long, DefaultCursors As Boolean)

lOLESetCustomDataObject(CustomDataObject As Variant)

lOLESetData(Data As VSFlex8Ctl.VSDataObject, DataFormat As Integer)

lOLEStartDrag(Data As VSFlex8Ctl.VSDataObject, AllowedEffects As Long)

lRowColChange()

lSelChange()

lSetupEditStyle(ByVal Row As Long, ByVal Col As Long, ByVal IsCombo As Boolean, Style As Long, StyleEx As Long)

lSetupEditWindow(ByVal Row As Long, ByVal Col As Long, ByVal EditWindow As Long, ByVal IsCombo As Boolean)

lStartAutoSearch()

lStartEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean)

lStartPage(ByVal hDC As Long, ByVal Page As Long, Cancel As Boolean)

lValidate(Cancel As Boolean)

lValidateEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean)



六、附加功能:

1)         属性页:

在vsFlexGrid的属性页中,可以对表格进行格式和内容设计,这样可以省去一些代码(这部分属性页处理的内容保存在窗体的frx文件中)。



2)         导入/导出:

通过LoadGrid/SaveGrid方法,可以对表格内容进行导入导出;导入导出的格式有几种:

l它自已的二进制格式。

l带一定分隔符的文本文件。

lExcel97格式(不需要安装 Excel,速度很快,但有一些属性不支持)。

3)         打印

通过PrintGrid方法,可以将vsFlexGrid按照当前的格式和数据进行打印输出,但这个功能比较简单,比如不能进行预览,设置页眉页脚等。(ComponentOne的另一套控件vsView与vsFlexGrid配合可以实现强大的打印相关功能)



作为一个只有600多K大小的控件(vsFlexGrid.ocx),功能这么强大确实非常不错,在ZLHIS中也进行了大量的使用,上面只是简略列举了它的部分功能,更详细的功能可以运行它的Demo进行展示,也可以查看它的帮助文件,都比较详尽

newer 发表于 2014-11-5 16:52:09

是免费的吗?

iLisp 发表于 2014-11-5 18:21:50

newer 发表于 2014-11-5 16:52
是免费的吗?

不免费,但有注册码
而且早已不再更新

jxwfz19740724 发表于 2017-6-19 13:57:02

做个记号先看看。
页: [1] 2
查看完整版本: 初试 ODCL + VsflexGrid