diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..98bbb4a --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.build/ +.update-files/ +dist/ +*.txt +test.aardio +*.chw +user.aardio \ No newline at end of file diff --git a/default.aproj b/default.aproj new file mode 100644 index 0000000..c172fba --- /dev/null +++ b/default.aproj @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/dlg/dumpfile.aardio b/dlg/dumpfile.aardio new file mode 100644 index 0000000..28c5df1 --- /dev/null +++ b/dlg/dumpfile.aardio @@ -0,0 +1,174 @@ +//⚠ aardio文件加解密 2.1 【光庆】 +//光庆 http://chengxu.online +//资料: https://blog.csdn.net/sdlgq/article/details/121899182 + +import win.ui; +import win.dlg.message; +import fsys.dlg +import fonts.fontAwesome; +//import godking; +import godking.message; +/*DSG{{*/ +var winform = win.form(cls="AFORM";text="aardio文件加解密 2.1 (光庆)";right=727;bottom=591;acceptfiles=1;border="none";max=false;parent=...;style=0) +winform.add( +bkplus={cls="bkplus";text=' \uF13E aardio文件加解密 2.1 (光庆)';left=0;top=0;right=728;bottom=56;align="left";bgcolor=1151245;color=15793151;font=LOGFONT(h=-16;name='FontAwesome');z=16}; +checkbox={cls="checkbox";text="覆盖自身";left=70;top=510;right=160;bottom=529;font=LOGFONT(h=-14);z=5}; +checkbox2={cls="checkbox";text="附加可解密代码";left=160;top=510;right=290;bottom=529;font=LOGFONT(h=-14);z=15}; +checkbox3={cls="checkbox";text="生成提示文件";left=290;top=510;right=410;bottom=529;font=LOGFONT(h=-14);z=18}; +edit={cls="edit";left=16;top=536;right=395;bottom=566;bgcolor=16777215;border=1;tabstop=1;z=2}; +edit2={cls="edit";left=16;top=160;right=360;bottom=496;border=1;multiline=1;readonly=1;vscroll=1;z=6}; +edit3={cls="edit";left=368;top=160;right=712;bottom=496;border=1;multiline=1;readonly=1;vscroll=1;z=7}; +editpath={cls="edit";left=16;top=96;right=402;bottom=126;bgcolor=16777215;border=1;readonly=1;tabstop=1;z=1}; +plusjiami={cls="plus";text='\uF023 加密';left=496;top=528;right=600;bottom=569;bgcolor=49152;border={radius=20};font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=11}; +plusjiemi={cls="plus";text='\uF0F6 解密';left=608;top=528;right=712;bottom=569;bgcolor=49407;border={radius=20};font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=14}; +plusliulan={cls="plus";text='\uF115 浏览';left=408;top=96;right=484;bottom=126;bgcolor=16744448;border={radius=15};color=16777215;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=13}; +plusliulan2={cls="plus";text='\uF115 浏览';left=408;top=536;right=484;bottom=566;bgcolor=16744448;border={radius=15};color=16777215;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=12}; +static={cls="static";text="1、加密后的文件仍可被aardio调用。2、加密时会把$包含的文件数据直接编译进加密文件。";left=64;top=72;right=720;bottom=88;color=8421504;transparent=1;z=17}; +static2={cls="static";text="源文件";left=16;top=72;right=157;bottom=95;transparent=1;z=3}; +static3={cls="static";text="保存到";left=16;top=512;right=69;bottom=531;font=LOGFONT(h=-14);transparent=1;z=4}; +static4={cls="static";text="代码部分";left=16;top=136;right=157;bottom=159;transparent=1;z=8}; +static5={cls="static";text="提示部分";left=368;top=136;right=509;bottom=159;transparent=1;z=9}; +static6={cls="static";left=496;top=88;right=712;bottom=134;align="center";center=1;color=8388736;font=LOGFONT(h=-35;name='FontAwesome');transparent=1;z=10} +) +/*}}*/ + +winform.plusjiemi.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250';text='\uF00D'} +winform.plusjiami.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250';text='\uF00D'} +import win.ui.simpleWindow +var tt = win.ui.simpleWindow(winform,20,40,30,50,0xFF008CBA,0xFF00B4F4); +var msg = godking.message(winform); +var code,itls; +var chuli = function(str){ + winform.plusjiemi.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250';text='\uF00D'} + winform.plusjiami.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250';text='\uF00D'} + if !..io.exist(str) return ; + winform.editpath.text = str; + code = ..string.load(winform.editpath.text); + var kejiemi = ..string.endWith(code,'\1\2\3\4'); + var index = ..string.find(code,"\/\**?intellisense\("); + if index { + itls = ..string.right(code,#code-index+1); + } + winform.edit2.text = code; + winform.edit3.text = itls; + var p = ..io.splitpath(str) + if p.name = "code" winform.edit.text = ..io.joinpath(p.dir,"user.aardio"); + else winform.edit.text = ""; + if ..string.startWith(code,"=aardio"){ + if kejiemi { + winform.static6.text = '\uF023 可解密' + winform.plusjiemi.disabledText = null; + } else winform.static6.text = '\uF023 已加密' + winform.static6.color = 0x0000FF; + } else { + winform.plusjiami.disabledText = null; + winform.static6.text = '\uF0F6 未加密' + winform.static6.color = 0x259B24; + } + winform.static6.redraw() + +} + +winform.wndproc = function(hwnd,message,wParam,lParam){ + select(message) {//判断消息类型 + case 0x233/*_WM_DROPFILES*/ { + var str = win.getDropFile(wParam )[1]; + if str chuli(str); + } + } +} + +winform.plusjiami.oncommand = function(id,event){ + if( winform.editpath.text == "" or !#code){ + msg.frown("请选择要加密的文件!",1000) + return ; + } + if ..string.startWith(code,"=aardio"){ + msg.err("该文件为加密文件!不能再次加密",1000) + return ; + } + var tfile = winform.edit.text; + if winform.checkbox.checked tfile=winform.editpath.text; + if !#tfile { + msg.frown("还没有选择保存的文件!",1000) + return ; + } + if ..string.lower(..io.splitpath(tfile).name)=="code" return msg.err("不能加密为code文件!",1000); + // 处理加密文本 + var str = dumpcode(assert(loadcode(code))); + if winform.checkbox2.checked { + var pass = msg.input("请输入加密密码:",true); + if !#pass return ; + import crypt.aes + var aes = crypt.aes() + aes.setPassword(pass) + var a = aes.encrypt(pass++code++pass); + //..string.save(tfile, str ++ a ++ ..string.right("0000000000"+ #a,10)) + ..string.save(tfile, str ++ a ++ tostring(..raw.buffer({int v=#a}))++'\1\2\3\4') + } else { + ..string.save(tfile, str) + } + // 处理智能提示文件 + if winform.checkbox3.checked and #itls{ + var tfile = ..io.splitpath(tfile); + tfile = tfile.drive++tfile.path++tfile.name++"_intellisense"++tfile.ext; + string.save(tfile,itls); + } + msg.ok("文件加密完成!",1000); +} + +winform.plusliulan.oncommand = function(id,event){ + var str = fsys.dlg.open("aardio文件|*.aardio||","请选择aardio代码文件") + if !str return ; + if str chuli(str); +} + +winform.plusliulan2.oncommand = function(id,event){ + var path = fsys.dlg.save("aardio文件|*.aardio||","保存编译后的二进制aardio文件") + if(path) winform.edit.text = path; +} + +winform.plusjiemi.oncommand = function(id,event){ + + if (winform.editpath.text == "" or !#code){ + msg.frown("请选择源文件!",1000) + return ; + } + if !..string.startWith(code,"=aardio"){ + msg.err("该文件不是加密文件!不能解密",1000) + return ; + } + var tfile = winform.edit.text; + if winform.checkbox.checked tfile=winform.editpath.text; + if !#tfile { + msg.frown("还没有选择保存的文件!",1000) + return ; + } + + if !..string.endWith(code,'\1\2\3\4') return msg.err("该文件不是含源代码的加密文件,不能解密!",1000); + + var length = string.slice(code,-8,-5); + length = ..raw.convert(length,{int v})["v"]; + if !length or length<1 or length>#code { + msg.err("加密信息不正确,不能解密!",1000) + return ; + } + + var pass = msg.input("请输入解密密码:",true); + if !#pass return ; + + var txt = ..string.slice(code,-length-8,-9); + import crypt.aes + var aes = crypt.aes() + aes.setPassword(pass) + var a = aes.decrypt(txt); + if !#a return msg.err("解密失败!",1000); + + if !..string.startWith(a,pass) or !..string.endWith(a,pass) return msg.err("密码不正确!",1000); + a = ..string.slice(a,#pass+1,#a-#pass); + string.save(tfile,a); + msg.ok("文件解密完成!"); +} + +winform.show(true) +win.loopMessage( winform ); \ No newline at end of file diff --git a/dlg/searchForm.aardio b/dlg/searchForm.aardio new file mode 100644 index 0000000..5b9798b --- /dev/null +++ b/dlg/searchForm.aardio @@ -0,0 +1,65 @@ +import win.ui; +/*DSG{{*/ +var winform = win.form(text="查找";right=418;bottom=135;bgcolor=16777215;exmode="none";max=false;min=false;mode="popup") +winform.add( +btnSearchNext={cls="button";text="查找下一个(F)";left=218;top=83;right=306;bottom=113;db=1;dl=1;font=LOGFONT(name='微软雅黑');z=1}; +btnSearchPrev={cls="button";text="查找下上个(V)";left=119;top=83;right=207;bottom=113;db=1;dl=1;font=LOGFONT(name='微软雅黑');z=2}; +button={cls="button";text="关闭";left=327;top=82;right=386;bottom=112;db=1;dl=1;font=LOGFONT(name='微软雅黑');z=4}; +editSearchInput={cls="combobox";left=81;top=28;right=392;bottom=54;db=1;dl=1;edge=1;font=LOGFONT(name='微软雅黑');items={};mode="dropdown";z=3}; +static={cls="static";text="查找内容:";left=12;top=29;right=72;bottom=55;align="right";bgcolor=16777215;center=1;db=1;dl=1;font=LOGFONT(name='微软雅黑');transparent=1;z=5} +) +/*}}*/ + +winform.onCancel = function(){ + winform.show(false); +} + +winform.onOk = function(){ + publish("search_next", winform.editSearchInput.text); +} + +/* +窗口会自动检测默认的对话框快捷键, +默认Enter会触发onOk事件,ESC键会触发onCancel事件, +可选如下自定义检测对话框快捷键函数 winform.isDialogMessage +*/ +winform.isDialogMessage = function(hwnd,msg){ + if( msg.message == 0x100/*_WM_KEYDOWN*/){ + + if( msg.wParam == 0xD/*_VK_RETURN*/ ){ + //return true;//告诉消息处理函数这是一个快捷键,阻止按键消息继续分发 + } + + if( msg.wParam == 0x1B/*_VK_ESC*/ ){ + //return true;//告诉消息处理函数这是一个快捷键,阻止按键消息继续分发 + } + } + + //检测并响应默认快捷键 + return win.isDialogMessage(hwnd,msg); +} + +winform.onClose = function(hwnd,message,wParam,lParam){ + winform.show(false); + return false;//禁止关闭 +} + +winform.btnSearchPrev.oncommand = function(id,event){ + publish("search_prev", winform.editSearchInput.text); +} + +winform.btnSearchNext.oncommand = function(id,event){ + publish("search_next", winform.editSearchInput.text); +} + +winform.button.oncommand = function(id,event){ + winform.show(false); +} + +winform.btnSearchPrev.disabled = true; + +winform.editSearchInput.setFocus(); + +winform.show(false); +win.loopMessage(); +return winform; \ No newline at end of file diff --git a/lib/config.aardio b/lib/config.aardio new file mode 100644 index 0000000..5da06a0 --- /dev/null +++ b/lib/config.aardio @@ -0,0 +1,17 @@ +//config 配置文件 +import fsys.config; +config = fsys.config("/config/"); +//config = fsys.config( io.appData("/软件作者/应用程序名/") ); + +//不需要序列化的配置名字前请添加下划线 +namespace config { + __appName = "应用程序名"; + __website = "http://www.aardio.com/"; +} + +/**intellisense(config) +__appName = 应用程序名 +__website = 官方网站 +saveAll() = 写入所有配置到文件 +? = 获取值时指定不以下划线开始的配置表名称,\n返回一个可自动序列化到同名配置文件的表对象。\n如果此对象名以下划线开始,则可以正常读写值不会序列化为配置文件。\n否则不能对此对象直接赋值,只能对配置表对象的成员赋值。\n\n配置表可自动自文件加载,退出线程前自动序列化并存入文件。\n仅序列化以字符串、数值为键的元素,\n仅序列化值为字符串、数值、buffer 以及定义了 _serialize 元方法的成员。\n循环引用的值转换为 null,序列化时忽略成员函数\n!fsys_table. +end intellisense**/ \ No newline at end of file diff --git a/lib/flexcell/FlexCell.dll b/lib/flexcell/FlexCell.dll new file mode 100644 index 0000000..0f029d8 Binary files /dev/null and b/lib/flexcell/FlexCell.dll differ diff --git a/lib/flexcell/_.aardio b/lib/flexcell/_.aardio new file mode 100644 index 0000000..57fe6b5 --- /dev/null +++ b/lib/flexcell/_.aardio @@ -0,0 +1,1133 @@ +//flexcell-智能提示 +//内购版本,严禁外传 + +if ..io.exist("/lib/flexcell/user.aardio") +loadcodex("/lib/flexcell/user.aardio","flexcell"); +else loadcodex($"/lib/flexcell/user.lib"); + +/**intellisense() +flexcell.FlexGrid = FlexGrid表格库(ATL内购版) +flexcell.FlexGrid() = !GKFlexGrid. +flexcell.FlexGrid(winform,0,0,true) = 创建FlexGrid表格控件。\n参数1:容器窗口 参数2:行数 参数3:列数 参数4:是否使用虚表功能 +end intellisense**/ + +/**intellisense(!GKFlexGrid.) +hwnd = 表格组件窗口句柄 +CellType.Default = 0 默认,根据单元格所在列的CellType而定。 +CellType.TextBox = 1 文本框 +CellType.CheckBox = 2 复选框 +CellType.ComboBox = 3 组合框 +CellType.TextButton = 4 带按钮的文本框 +CellType.HyperLink = 5 超链接 +CellType.Date = 6 日期 +CellType.Time = 7 时间 +CellType.DateTime = 8 日期和时间 +CellType.BarCode = 9 条形码 +CellType.QrCode = 10 二维码 +CellType.Progress = 11 自绘进度条 +CellType.ImageProgress = 12 自绘图片进度条 +CellType.Button = 13 按自绘钮 +theme = @{\n Appearance = 0;/*控件边框样式*/\n FixedRowColStyle = 0;/*固定行列样式*/\n ScrollBarStyle = 1;/*滚动条样式*/\n BackColorBkg = 0xFFFFFF;/*表格空白区颜色*/\n BackColorFixed = 0xE7E7E7;/*固定行列背景颜色*/\n BackColorFixedSel = 0xCCCCCC;/*固定行列背景颜色(选区内)*/\n ForeColorFixed = 0x000000;/*固定行列文字颜色*/\n GridColor = 0x878787;/*网格线*/\n BackColorSel = 0xCCCCCC;/*选区单元格背景颜色*/\n BackColorActiveCellSel = 0xCCCCCC;/*选区活动单元格背景颜色*/\n SelectionBorderColor = 0xAAAAAA;/*选区边框颜色*/\n BorderColor = 0x878787;/*控件边框颜色*/\n CellBorderColor = 0xFFFFFF;/*单元格边框颜色*/\n CellBorderColorFixed = 0xFFFFFF;/*固定单元格边框颜色*/\n BackColorScrollBar = 0xFFFFFF;/*滚动颜色条*/\n BackColorComment = 0xFFFFFF;/*批注窗口颜色*/\n BoldFixedCell = false;/*活动列标题粗体显示*/\n DisplayFocusRect = false;/*显示活动单元格虚框*/\n MultiSelect = false;/*允许选择多个单元格*/\n} +setTheme(flexcell->FlexGrid->themeDark) = 设置表格主题\n\n内置两款主题:\nthemeDark 和 themeWhite \n可自定义主题风格 +ownerDraw.start(true,true,func/*自定义自绘函数*/) = @.start(true/*自动刷新鼠标移入移出的单元格*/,true/*启用内置自绘函数*/,/*自定义函数*/function(Row,Col,hDC,Left,Top,Right,Bottom,Handled){ + /*自绘函数调用顺序:先调用内置自绘函数处理(false则不调用),再调用自定义函数进行处理(null则不定义)。*/ + /*返回true则停止表格内部对单元格的后续处理。*/ + if Col=1 and Row>0 { /*画按钮示例*/ + if Row=owner.curMouseRow and Col=owner.curMouseCol { + return owner.ownerDraw.drawButton(Row,Col,hDC,Left,Top,Right,Bottom,/*按钮文本*/,/*按钮颜色*/,/*文本颜色*/,/*圆角大小*/) + } else { + return owner.ownerDraw.drawButton(Row,Col,hDC,Left,Top,Right,Bottom,/*按钮文本*/,/*按钮颜色*/,/*文本颜色*/,/*圆角大小*/) + } + } + if Col=2 and Row>0 { /*画进度条示例*/ + return owner.ownerDraw.drawProgress(Row,Col,hDC,Left,Top,Right,Bottom,/*当前进度值*/,/*最大进度值*/,/*是否显示进度文本*/,/*进度条颜色*/,/*进度条外文本颜色*/,/*进度条内文本颜色*/); + } +}) +ownerDraw.start() = 开始自绘,使用上次的设置。不改变刷新设置和自绘函数。 +ownerDraw.stop() = 停止自绘。 +ownerDraw.drawProgress(Row,Col,hDC,Left,Top,Right,Bottom,/*当前进度值*/,/*最大进度值*/,/*是否显示进度文本*/,/*进度条颜色*/,/*进度条外文本颜色*/,/*进度条内文本颜色*/) = 画单元格进度条。返回true。\n进度值默认为单元格文本,自动处理为有效值0~100。\n显示文本默认为单元格文本+"%"。 +ownerDraw.drawImageProgress(Row,Col,hDC,Left,Top,Right,Bottom,/*当前进度值*/,/*最大进度值*/,/*背景图*/,/*前景图*/,/*是否显示进度文本*/,/*进度文本内容*/,/*进度文本颜色*/) = 画单元格图像进度条。返回true。 +ownerDraw.drawButton(Row,Col,hDC,Left,Top,Right,Bottom,/*按钮文本*/,/*按钮颜色*/,/*文本颜色*/,/*圆角大小*/) = 画单元格按钮。返回true。按钮文本默认为单元格文本。\n\n-1、圆头矩形 -2、缩放到标准圆形 其他值:自定义圆角大小 +ownerDraw.button.color = 【属性】按钮默认属性:按钮颜色,默认值为:0xFF4242; +ownerDraw.button.mouseoncolor = 【属性】按钮默认属性:鼠标悬停时的按钮颜色,默认值为:0x0000FF; +ownerDraw.button.textcolor = 【属性】按钮默认属性:文本颜色,默认值为:0xFFFFFF; +ownerDraw.button.round = 【属性】按钮默认属性:圆角大小。\n\n-1、圆头矩形 -2、缩放到标准圆形 其他值:自定义圆角大小 +ownerDraw.progress.max = 【属性】进度条默认属性:进度条最大值,按照当前值/最大值计算当前进度比例。最大值默认值为:100; +ownerDraw.progress.color = 【属性】进度条默认属性:进度条颜色,默认值为:0x437b00; +ownerDraw.progress.textbackcolor = 【属性】进度条默认属性:进度条后(外)的文本颜色,默认值为:0x000000; +ownerDraw.progress.textforecolor = 【属性】进度条默认属性:进度条前(内)的文本颜色,默认值为:0xFFFFFF; +ownerDraw.imageProgress.max = 【属性】图片进度条默认属性:进度条最大值,按照当前值/最大值计算当前进度比例。最大值默认值为:100; +ownerDraw.imageProgress.showtext = 【属性】图片进度条默认属性:显示进度条文本,默认值为:false; +ownerDraw.imageProgress.textcolor = 【属性】图片进度条默认属性:进度条文本颜色,默认值为:0x000000; +ownerDraw.imageProgress.backimg = 【属性】图片进度条默认属性:进度条背景图片,默认值为:灰色五个五角星; +ownerDraw.imageProgress.foreimg = 【属性】图片进度条默认属性:进度条前景图片,默认值为:黄色五个五角星; + +//组件属性========================================================================================================= +AllowUserMoveColumn = 属性】是否可以用鼠标来拖动列标题(固定行中的单元格),整列移动单元格。\n注意:移动单元格时,需要在列标题上按下鼠标左键,并保持一定时间\n(缺省为500毫秒,可以设置DragDelay属性改变延时时间)内不移动鼠标,当鼠标指针改变时才能开始移动。如果表格中存在合并单元格,\n即使AllowUserMoveColumn属性设置为True,也不能移动单元格。 +AllowUserPaste = 【属性】是否允许用户粘贴文字和格式\n文本和格式:_flexTextAndFormat=0;\n文本和单元格格式:_flexTextAndFlexCellFormat=1;\n仅文本:_flexTextOnly=2;\n禁止:_flexNotAllowed=3 +AllowUserResizing = 【属性】是否可以用鼠标来重新调整FlexCell表格的行高和列宽 +AllowUserSort = 【属性】是否允许用户用鼠标双击标题对表格内容排序\n注意,如果表格中包含了Chart,或者除固定行、冻结行、底部冻结行之外的普通行中包含了合并单元格,\n就不能进行排序,也不会有任何提示。 +AutoRedraw = 【属性】是否自动重绘控件\n设置为False可以提高加载数据的速度,待所有操作完成后,切记应将之恢复为True +AutoScale = 【属性】行高和列宽是否根据屏幕DPI和默认DPI(96)的比例进行缩放。\n例如当前屏幕的缩放比例设置为150%时,把AutoScale属性设置为True,\n再设Grid.Row(1).Height = 20,实际行高将设置成30。 +BackColor1 = 【属性】表格中 [奇数行] 的背景色 +BackColor2 = 【属性】表格中 [偶数行] 的背景色 +BackColorActiveSel = 【属性】选择了多个单元格时,活动单元格的背景颜色\n例如拖动选择了一排单元格,那么第一个被点中的显示的颜色 +BackColorBkg = 【属性】表格中 空白区域 的背景色 +BackColorFixed = 【属性】表格中 固定行/列 的背景色(即第0列和第0行的颜色) +BackColorFixedSel = 【属性】表格中选定单元格(Selection)在固定行/列上对应单元格的背景色,\n将BackColorFixed属性和BackColorFixedSel属性设置为不同的值,\n可以清晰地反映出Selection的位置。 +BackColorSel = 【属性】表格中选定单元格(Selection)的背景色\n(即拖拽选中的单元格背景色) +BoldFixedCell = 【属性】是否在固定行/列上以粗体画出Selection所对应的单元格的文字\n即点击单元格之后对应的行和列文字是否要加粗显示 +BorderColor = 【属性】控件边框的颜色 +BorderStyle = 【属性】控件的边框样式\n_FlexGrid_BorderStyle_开头的常量 +BottomRow = 【只读】【属性】获取表格中最下边可见的非固定行号。\n此属性在设计时不可用,在运行时是只读的。 +CellBorderColor = 【属性】单元格边框的颜色 +ClearBlankArea = 【属性】是否清除客户区和底部冻结行之间的空白区域,包括背景色和网格线 +Cols = 【属性】表格的绝对列数(取值范围在1~10000000之间)\n包含第0列,区别于colCount(仅有效填充内容的列数) +CommentBackColor = 【属性】批注窗口的背景色 +CommentIndicatorColor = 【属性】批注标识的颜色 +CommentTextColor = 【属性】批注窗口的文字颜色 +CommentWindowWidth = 【属性】批注窗口的宽度\n单位为像素,取值范围为20至500 +CorrectionLevel = 【属性】QRCode二维码的纠错级别,_FlexGrid_CorrectionLevel_开头的常量 +DateFormat = 【属性】Calendar子控件的日期格式,_FlexGrid_DateFormat_开头的常量 +DefaultFont = 【对象】【属性】表格的缺省字体\n固定行、固定列以及没有明确设置字体的单元格都将采用DefaultFont\n!GKflex2_Font. +DefaultRowHeight = 【属性】默认行高,单位是像素,行高必须大于0。默认:30 +DisableEvent = 【属性】是否禁用所有的事件 +DisplayBarcodeText = 【属性】是否在条形码的下方显示文字 +DisplayClientBorder = 【属性】是否在最后一行或列与控件背景之间显示一条黑色的框线 +DisplayErrorMessage = 【属性】是否显示错误消息框\n例如复制/粘贴时,如果目标位置存在只读单元格,\n是否显示操作失败的消息框 +DisplayFocusRect = 【属性】是否在当前活动单元格显示一个虚框 +DisplayRowArrow = 【属性】是否在当前行的行头中显示黑色的小箭头 +DisplayRowNumber = 【属性】是否在固定列上显示行号 +DragDelay = 【属性】拖动列前需要延时的毫秒数,缺省值为500 +DrawMode = 【属性】控件的绘图模式\n_FlexGrid_DrawMode_开头的常量:0:普通模式;1:自绘模式 +EditorVisible = 【只读】【属性】获取是否正在显示单元格编辑器(TextBox、ComboBox、Button等)\n如果为True,说明控件正处理编辑状态 +EnableTabKey = 【属性】否允许在表格中按Tab键移动活动单元格 +EnableVisualStyles = 【属性】是否允许表格中的ComboBox、Calendar和Button控件显示XP效果\n(需要操作系统的支持)。 +EnterKeyMoveTo = 【属性】按Enter键后,活动单元格的移动方向。\n_FlexGrid_EnterKeyMoveTo_开头的常量。0:下一列;1:下一行; +ExportHiddenCells = 【属性】是否把隐藏的行和列输出到CSV、Excel和HTML文件。 +ExtendLastCol = 【属性】是否扩展最后一列的列宽,让表格可以充满控件 +FileName = 【属性】当调用了OpenFile、SaveFile、LoadFromXML、ExportToXML这4个方法时,\n如果将FileName参数设置为空字符串(""),\n会显示一个打开(或保存)文件对话框,\nFileName属性可以返回这个对话框中选择(或输入)的文件名 +FixedCellBorderColor = 【属性】固定行和固定列上的单元格边框的颜色 +FixedCols = 【属性】固定列数,最小为1 \n固定显示在左侧,不滚动,不可编辑,呈灰色显示,区别于Frozen\n可通过Column(0).Width=0将列宽设置为0来隐藏固定列 +FixedRowColStyle = 【属性】固定行/列的样式\n 0=平面,1=3D(默认),2=应用视觉样式 +FixedRows = 【属性】固定行数,最小为1\n固定显示在顶部,不滚动,不可编辑,呈灰色显示,区别于Frozen\n可通过Row(0).Height=0将行高设置为0来隐藏固定行 +FrozenBottomRows = 【属性】底部冻结行数量。\n底部冻结行通常会显示在表格的最下方,\n如果把垂直滚动条拖到最下方,或者控件中有足够的空间,\n底部冻结行会紧贴着它的上一行显示出来。 +FrozenRows = 【属性】顶部冻结行的数量。\n固定显示在顶部,正常状态,不是灰色,可滚动,可编辑,区别于fixed。 +FrozenCols = 【属性】左侧冻结列的数量。\n固定显示在左侧,正常状态,不是灰色,可滚动,可编辑,区别于fixed。 +GridColor = 【属性】网格线的颜色 +HideGridLines = 【属性】是否隐藏网格线\n如果设置为True,且设置了单元格背景色,\n控件会以单元格的背景色画出单元格边框以覆盖网格线 +HideZeroValues = 【属性】是否隐藏零值。 +HScrollbarIsVisible = 【只读】【属性】获取水平滚动条是否可见 +LastErrorMessage = 【属性】最后的错误信息\n有一些特定的操作可能会显示一些错误或警告信息,\n可以设置DisplayErrorMessage为False,\n以禁止控件自动显示错误消息框,\n并可通过LastErrorMessage返回最后的错误信息\n例如,在只读单元格上粘贴内容、合并只读单元格时,都会弹出消息框 +LeftCol = 【属性】最左边可见的非固定列的列号(绝对列号,从0开始) +LockButton = 【属性】是否锁定Button控件,禁止在Button内按键盘输入 +Locked = 【属性】整个表格是否锁定 +MouseCol = 【只读】【属性】获取鼠标所在位置单元格的列号(绝对列号,从0开始)\n此属性在设计时不可用,在运行时是只读的。 +MouseRow = 【只读】【属性】获取鼠标所在位置单元格的行号(绝对行号,从0开始)\n此属性在设计时不可用,在运行时是只读的。 +MultiSelect = 【属性】是否允许选取多个单元格/行/列 +PageCount = 【属性】表格内容的总页数 +QRCodeModuleSize = 【属性】QRCode二维码单个模块的大小 +ReadOnlyFocusRect = 【属性】只读单元格的虚框样式,\n_FlexGrid_FocusRect_开头的常量,0:实线, 1虚线 +RightCol = 【只读】【属性】获取最右边可见的非固定列的列号(绝对列号,从0开始)\n此属性在设计时不可用,在运行时是只读的。 +//setRowHeight(__/*row,value*/,) = 设置某一行的行高。仅为兼容旧版本而存在。新版本用 row(1).Height +//getRowHeight(__) = 返回某一行的行高。仅为兼容旧版本而存在。新版本用 row(1).Height +Rows = 【属性】表格行数(绝对行数,1~10000000,含表头等,从0开始),区别于 rowCount和count(仅指表格有效内容的行数) +ScrollBarColor = 【属性】滚动条的背景色 +ScrollBars = 【属性】滚动条显示方式\n_FlexGrid_ScrollBars_开头的常量。 +ScrollBarStyle = 【属性】滚动条样式\n_FlexGrid_ScrollBarStyle_开头的常量,0:系统;1:平面;2:3D +SelectionBorderColor = 【属性】选定范围边框的颜色 +SelectionMode = 【属性】选择模式。_FlexGrid_SelectionMode_开头的常量\n0:自由选择;1:整行选择;2:整列选择;3:单元格选择 +SelectWholeCell = 【属性】用户点击单元格时是否选中单元格中的全部文字\n缺省值为True +SelLength = 【属性】子控件所选择的文本的字符数\n如果没有可见的子控件,或子控件是Calendar,\n则此属性没有意义,返回值为0 +SelStart = 【属性】子控件所选择的文本的起始点\n如果没有文本被选中,则指出插入点的位置\n如果没有可见的子控件,或子控件是Calendar,\n则此属性没有意义,返回值为0 +ShowContextMenu = 【属性】在TextBox、ComboBox等子控件中\n点击鼠标右键时是否显示右键菜单 +ShowResizeTip = 【属性】用鼠标调整FlexCell表格的行高或列宽时\n是否显示行高或列宽的提示窗口 +SortIndicatorColor = 【属性】排序标识的颜色\n当排序标识为平面时有效 +SortIndicatorStyle = 【属性】排序标识的样式\n_FlexGrid_SortIndicatorStyle_开头的常量。0:平面;1:3D +StartRowNumber = 【属性】固定列中显示的起始行号,默认值为1\n当DisplayRowIndex属性设置为True时有效 +StretchBarcode = 【属性】是否根据单元格的宽度自动拉伸条形码 +TabKeyMoveTo = 【属性】当活动单元格在表格中的最后一列时,按Tab键后活动单元格的移动方向。\n_FlexGrid_TabKeyMoveTo_开头的常量。0:当前行第一列;1:下一行第一列 +TimeFormat = 【属性】Time和DateTime子控件的时间格式\n_FlexGrid_TimeFormat_开头的常量 +TopRow = 【属性】最顶部可见的非固定行的行号(绝对行号,从0开始) +//【内部使用】VirtualMode = 【属性】是否使用虚表模式(触发GetCellText和SetCellText事件)。\n初始化表格时设置,不建议中途进行更改。 +VScrollbarIsVisible = 【只读】【属性】获取垂直滚动条是否可见 + +//废弃属性========================================================================================================= +//【废弃属性】DisablePrintButton = 【属性】是否禁用打印预览窗口中的打印按钮 +//【废弃属性】DisplayDateTimeMask = 【属性】是否显示日期、时间控件的输入掩码\n如果设置为True,会显示“____-__-__ __:__:__”,否则会以空格代替“_”。 +//【废弃属性】FirstDayOfWeek = 【属性】每个星期中的第一天是星期几\n_flexSaturday=6;\n_flexSunday=0;\n_flexThursday=4;\n_flexMonday=1;\n_flexWednesday=3;\n_flexFriday=5;\n_flexTuesday=2 +//【废弃属性】ForeColorFixed = 【属性】固定行/列的前景色(文字颜色) +//【废弃属性】MouseWheelSpeed = 【属性】滚动鼠标滚轮时每次滚动的行数\n缺省值为3 +//【属性改为函数】ActiveCell = 【只读】【属性】获取当前活动单元格对象\n!GKflex2_Cell. +//【有替代属性】Appearance = 【属性】控件绘图风格, 0:平面 1:3D(默认) +//【有替代属性】AllowUserReorderColumn = 【属性】是否可以用鼠标来拖动列标题(固定行中的单元格),整列移动单元格 +//【有替代属性】BackColorActiveCellSel = 【属性】选择了多个单元格时,活动单元格的背景颜色\n例如拖动选择了一排单元格,那么第一个被点中的显示的颜色 +//【有替代属性】BackColorComment = 【属性】批注窗口的背景色 +//【有替代属性】DisplayRowIndex = 【属性】是否在固定列上显示行号 +//【有替代属性】CellBorderColorFixed = 【属性】固定行和固定列上的单元格边框的颜色 +//【有替代属性】ButtonLocked = 【属性】是否锁定Button控件,禁止在Button内按键盘输入 +//【有替代属性】BackColorScrollBar = 【属性】滚动条的背景色 +//【有替代属性】ForeColorComment = 【属性】批注窗口的文字颜色 +//【有替代属性】TotalPages = 【属性】表格内容的总页数 +//【有替代属性】ReadOnly = 【属性】整个表格是否只读 + +//自定义属性========================================================================================================= +rowindexSymbol = 【属性】行索引标识符。默认为"[@rowindex]"。\n如果某单元格内容为该标识符,则单元格内容显示时自动显示为该行索引。\n主要用于虚表,使用虚表时会随着加减行进行自动更新。实表只在setTable时进行转换。 +curMouseRow = 【只读】【属性】获取当前鼠标所在行。不在单元格内则为-1。用于开启ownerdraw和autoRefreshMouseInOutCell时检测鼠标在单元格中移入移出事件。 +curMouseCol = 【只读】【属性】获取当前鼠标所在列。不在单元格内则为-1。用于开启ownerdraw和autoRefreshMouseInOutCell时检测鼠标在单元格中移入移出事件。 +count = 【只读】【属性】获取有效内容的行数。从startRow开始计算,到最后一行。同rowCount +rowCount = 【只读】【属性】获取有效内容的行数。从startRow开始计算,到最后一行。同count +colCount = 【只读】【属性】获取有效内容的列数。从startCol开始计算,到最后一列。 +startRow = 【属性】表格填充内容开始行号。\nsetTable、insertRow、cell等小写字母开头的函数,所用的row均为从startRow行为第1行开始计算。 +startCol = 【属性】表格填充内容开始列号。\nsetTable、insertRow、cell等小写字母开头的函数,所用的col均为从startCol列为第1列开始计算。 +fullRow = 【属性】是否整行选择。 +autoDictToArray = 【属性】是否将字典型数据自动转为数组型。\n只在启用虚表时有效。 + +//组件方法========================================================================================================= +AboutBox()=关于窗口 +ActiveCell() = 获取当前活动单元格对象\n!GKflex2_Cell. +addChart(__ /*row*/, /*col*/) = 【对象】添加单元格Chart,返回该对象\n参数:行号、列号(均为相对于有效内容的列号,从1开始)\n注意:建议用完后用.release()释放内存。 +addChart() = !GKflex2_Chart. +AddItem(text,reDrawBool) = 将一行数据添加到FlexCell控件中\nText = 字符串表达式,它在新增行中显示。\n可以用制表符 (vbTab或Chr(9)) 来分隔每个字符串,从而将多个字符串(行中的多个列)添加进去\n reDrawBool = 一个布尔值,指明添加一行时,是否重画表格。不重画可以提高速度 +AddTreeNode(Level, Text, ImageKey) = 该方法向表格添加一个树节点。参数:{ + Level 整数值,树节点的层次。 + Text 字符串,新增行的文本。可以用制表符 (vbTab或Chr(9)) 来分隔每个字符串,从而将多个字符串(行中的多个列)添加进去。 + ImageKey 字符串,树节点的图片Key。 +} +cell(__/*行,列*/,) = 【对象】取有效内容的单元格对象。\n参数:行号、列号(使用相对行列号,从1开始)\n注意:建议用完后用.release()释放内存。\n不同于大写的Cell(),大写Cell()使用绝对行号和列号(从0开始) +cell() = !GKflex2_Cell. +Cell(__/*行,列*/,) = 【对象】取单元格对象。\n参数:行号、列号(使用绝对行列号,从0开始)\n注意:建议用完后用..com.Release()释放内存。\n不同于小写的cell(),小写cell()使用相对行号和列号(从1开始) +Cell() = !GKflex2_Cell. +chart(__ /*row*/, /*col*/) = 【对象】取单元格Chart对象\n注意:建议用完后用.release()释放内存。 +chart() = !GKflex2_Chart. +column(1) = 【对象】取表格有效内容的列对象。\n参数为:指定的列号(相对于有效内容的列号,从1开始)。\n注意:建议用完后用.release()释放内存。\n与大写的Column()不同,大写Column()使用绝对列号,从0开始。 +column() = !GKflex2_Column. +Column(0) = 【对象】取表格列对象。\n参数为:指定的列号(从0开始)。\n注意:建议用完后用..com.Release()释放内存。\n与小写的column()不同,小写column()使用相对列号,且封装了.release()释放函数。 +Column() = !GKflex2_Column. +comboBox(__) = 【对象】取有效内容某一列的ComboBox\n参数:列号(相对于有效内容的列号,从1开始)\n注意:建议用完后用.release()释放内存。 +comboBox() = !GKflex2_ComboBox. +DirectPrint(__/*要打印的页号*/) = 打印表格中的内容,\nPageNo参数是可选的,用于指定将要打印页面的页码,如果不设置PageNo,则打印所有页面\n如果要先预览打印效果,请调用PrintPreview方法,如果要更改页面设置,请参考PageSetup对象的相关主题。 +ExportToCSV("__"/*csv文件名*/,true/*导出固定行*/,true/*导出固定列*/) = 将表格输出为CSV格式的文件。 +ExportToExcel("__"/*xls文件名*/,"Sheet1"/*sheet名*/,true/*导出固定行*/,true/*导出固定列*/) = 将FlexCell文档输出为Excel Workbook(不需要Excel运行库的支持),输出文件的二进制格式为BIFF8。\n需要说明的是,由于Excel内部使用ColorIndex来指定单元格的填充色和文字颜色,其颜色数量是有限的,\n而FlexCell表格允许您使用任何自定义的颜色,这就导致了FlexCell表格中有些自定义颜色值没有对应的Excel ColorIndex。\n调用本方法时,如果单元格的文字颜色和填充色在Excel中没有对应的ColorIndex,\n输出Excel Workbook时,就统一将文字颜色设置为黑色,填充色设置为灰色。\n输出文件的二进制格式为BIFF8 +ExportToHTML("__"/*文件名*/,true/*导出固定行*/,true/*导出固定列*/) = 将文档输出为HTML文档 +ExportToPDF("__"/*文件名*/) = 将表格内容输出为PDF文档。\n汉字输出、多行文字的自动折行显示在PDF中很难实现,因此FlexCell只是将打印预览的内容以图片的方式输出到PDF文件中,\nPageSetup对象中的属性在输出过程中也会生效。 +ExportToXML("__"/*文件名*/) = 将表格内容输出为XML格式的文档,\n此方法可以将表格中除图片以外的所有资料都输出到XML。\n此方法需要使用MSXML3.DLL中的一些功能,如果您的系统中没有此文件,将不能正确地输出XML文件。\n如果要将输出的XML文件载入到表格,可以使用LoadFromXML方法。 +ExportToXMLString() = 将表格内容输出为XML格式的字符串,返回值就是输出结果\n此方法需要使用MSXML3.DLL中的一些功能,如果您的系统中没有此文件,\n将不能正确地输出XML文件。\n如果要将输出的XML字符串文件载入到表格,可以使用LoadFromXMLString方法 +hitTest(__ /*x*/, /*y*/) = 【对象】测试指定位置是否有单元格,如果有则返回该单元格cell对象\n参数:x坐标、y坐标\n注意:建议用完后用.release()释放内存。 +hitTest() = !GKflex2_Cell. +hPageBreaks() = 【对象】取水平分页符集合,可执行添加、删除等操作\n!GKflex2_PageBreaks. +images() = 【对象】取图片组集合,可对执行增加图片、删除图片等操作\n!GKflex2_Images. +InsertCols(__/*插入位置,插入数量*/,) = 向表格插入指定数量的空列(使用绝对坐标)\nStartCol 必需的。是一个整数,用于指定插入空列的起始位置 \nCount 必需的。是一个整数,用于指定插入空列的总数 +InsertRows(__/*插入位置,插入数量*/,) = 向表格插入指定数量的空行(使用绝对坐标)\nStartRow 必需的。是一个整数,用于指定插入空行的起始位置 \n必需的。是一个整数,用于指定插入空行的总数 +insertRow(__ /*插入行号*/, /*插入行的数据表*/) = 插入行(使用相对坐标,支持startRow)。\n参数1:插入位置(行号)\n参数2:插入内容。可以为单行数据,也可以为多行数据。每行数据均为table\n参数1为空则在末尾插入,参数2为空则插入空行。 +LoadFromXML("->xml") = 该方法用于将XML文档内容载入到表格中。\n此方法需要使用MSXML3.DLL中的一些功能,如果您的系统中没有此文件,将不能正确地载入XML文件 +loadFromBuffer( __ ) = 载入内存文件数据。\n同openFile(),只是参数为文件数据,而不是文件名\n参数:数据内容,格式为saveFile保存的.cel文件格式。\n使用 loadFromBuffer() 函数前,须先 import raw.apiHook。 +LoadFromXMLString(xml) = 将XML字符串载入到表格中。\n此方法需要使用MSXML3.DLL中的一些功能,如果您的系统中没有此文件,将不能正确地载入XML数据\nXML 必需的。字符串表达式,必须是一个合法的XML字符串 +LoadLanguageConfig("->ini") = 载入Unicode编码的语言配置文件\n可以用这个方法为程序实现多语言支持功能\nFileName 一个String值,它用来指定要打开的文件名,它的扩展名是ini。 +MoveRow(__/*原行号,要移动到的行号*/,) = 移动一个表格行\nMoveFrom 一个整数,用于指定要移动的行 \nMoveTo 一个整数,用于指定目标位置 +NewFile() = 新建一个临时文件,重新初始化控件的属性 +openFile("->fcx") = 打开FlexCell文档。\n如果参数为空,则弹出选择文件对话框进行选择。\n用.FileName获取被选择文件名。 +//PageSetup() = 【对象】取页面设置对象\n页面设置将在打印及打印预览时生效,\n保存文件时页面设置会被保存进文件。\n!GKflex2_PageSetup. +pageSetup() = 【对象】取页面设置对象\n注意:建议用完后用.release()释放内存\n页面设置将在打印及打印预览时生效,\n保存文件时页面设置会被保存进文件。\n!GKflex2_PageSetup. +PrintPreview(true,true,true) = 打印预览\n参数:1:是否显示打印按钮;2:是否显示页面设置按钮;3:点击打印按钮后是否显示打印对话框 +range(__/*开始行号,开始列号,结束行号,结束列号*/,,,) = 【对象】取指定区域\n注意:建议用完后用.release()释放内存\nFirstRow 一个整数,用于指定区域的起始行号 \nFirstCol 一个整数,用于指定区域的起始列号 \nLastRow 一个整数,用于指定区域最后一行的行号 \nLastCol 一个整数,用于指定区域最后一列的列号 \n注意:所有行列号均为相对于有效内容,从1开始\n注意:建议用完后用release()释放内存。 +range() = !GKflex2_Range. +Refresh() = 重画整个控件。同update。\n调用AddItem方法向控件添加大量数据时,设置Redraw参数为False可以提高处理速度,\n当所有数据添加完毕后,应调用Refresh方法重画控件 +update() = 重画整个控件。同Refresh。\n调用AddItem方法向控件添加大量数据时,设置Redraw参数为False可以提高处理速度,\n当所有数据添加完毕后,应调用Refresh方法重画控件 +//Register("注册名","注册码") = 注册。易语言版专用。 +RemoveChart(row,col) = 移除单元格Chart对象。\n参数:绝对行号(从0开始)、绝对列号(从0开始) +RemoveItem(index) = 删除表格中的一行。如果要一次性删除多行,请使Range对象的DeleteByRow方法。 +reportTitles() = 【对象】取报表标题集合,可执行增加、删除操作\n!GKflex2_ReportTitles. +Row(0) = 【对象】返回一个Row对象 +row(1) =【对象】返回一个Row对象\n注意:建议用完后用.release()释放内存 +Row() = !GKflex2_Row. +row() = !GKflex2_Row. +saveFile("->fcx") = 保存FlexCell文档(扩展名为fcx) +selection() = 【对象】取当前选定范围\n注意:建议用完后用.release()释放内存\n!GKflex2_Range. +SetEventParameter(Index, Value) = 为当前事件设置参数值。参数:参数的序号、参数值。 +ShowImagesDialog() = 显示图片对话框。 +ShowPageSetupDialog() = 显示页面设置对话框。 +Tree() = 返回Tree对象。 +vPageBreaks() = 【对象】返回VPageBreaks对象,可以通过VPageBreaks对表格的分页符集合执行增加分页符、删除分页符等操作\n!GKflex2_PageBreaks. + +//自定义方法========================================================================================================= +sortVlist( col, /*是否降序*/, /*数据转换:0默认 1时间 2数值 3文本*/ , /*是否使用微软api进行文本排序*/ ) = 对虚表模式下的数据进行排序,排序后自动刷新表格。 +setColumn(.(标题数组, 列类型, 列宽, 对齐方式)= 设置表头和列。\n参数1:标题数组,\n 可以为:单行标题:{"A","B"} \n 或:多行标题:{{"A","B"}{"C","D"}}\n 文本为 "-" 代表与左单元格进行合并,\n 文本为 "|" 代表与上单元格进行合并。\n参数2、3、4:列类型,列宽,对齐方式\n 参数2、3、4:可以是数组或单个值,\n 单个值代表所有列都设置为该值。 +setColumn(.(开始列号, 标题数组, 列类型, 列宽, 对齐方式)= 设置表头和列。\n参数1:开始列号,从0开始\n参数2:标题数组,\n 可以为:单行标题:{"A","B"} \n 或:多行标题:{{"A","B"}{"C","D"}}\n 文本为 "-" 代表与左单元格进行合并,\n 文本为 "|" 代表与上单元格进行合并。\n参数3、4、5:列类型,列宽,对齐方式\n 参数3、4、5:可以是数组或单个值,\n 单个值代表所有列都设置为该值。 +setColumn(.(第一行标题及格式数组, ->->->) = 设置表头和列。\n参数1:第一行标题格式数组,每个成员代表一列,支持两种类型:\n 1、数组型成员:{ 标题, 列类型, 列宽, 列对齐方式 }。\n 2、字典型成员:{ text="标题", celltype=列类型, width=列宽, align=列对齐方式 }\n\n参数2:第2行标题数组\n参数n:第n行标题数组 +setColumn(.(开始列号,第一行标题及格式数组, ->->->) = 设置表头和列。\n参数1:开始列号,从0开始\n参数2:第一行标题格式数组,每个成员代表一列,支持两种类型:\n 1、数组型成员:{ 标题, 列类型, 列宽, 列对齐方式 }。\n 2、字典型成员:{ text="标题", celltype=列类型, width=列宽, align=列对齐方式 }\n\n参数3:第2行标题数组\n参数n:第n-1行标题数组 +sum(__ /*列号*/,1/*开始行*/,-2/*结束行*/,-1/*结果显示行*/,"共?"/*结果显示文本*/) = 列求和。\n参数除列号外,均可空。默认将最后一行作为合计行,用来显示结果文本。\n各行号支持负值。\n返回计算结果。\n结果显示文本中,用?代替结果值。 +avg(__ /*列号*/,1/*开始行*/,-2/*结束行*/,-1/*结果显示行*/,"平均?"/*结果显示文本*/,/*四舍五入位数*/) = 列求平均值。\n参数除列号外,均可空。默认将最后一行作为合计行,用来显示结果文本。\n各行号支持负值。\n返回计算结果。\n结果显示文本中,用?代替结果值。 +dictToArray(__ /*字典数据表*/, /*排序字段fields*/) = 字典转数组。返回数组。\n参数1:字典数据表;参数2:排序字段fields。 +toTop() = 显示首行 +toBottom() = 显示底行 +setTable(__ /*数据表*/, /*字典字段数组*/, /*列标题数组*/,/*列标题其他参数*/) = 填充表格有效内容。\n如果数据表是字典,可提供字典字段数组,用于显示指定列\n如果提供列标题,则从startCol列开始重建表头。\n列标题其他参数,同 setColumn 函数中列标题以后的参数。 +isVlist() = 是否开启虚表功能 +filter({col=1;s=">";v=1}/*过滤公式,开始行,结束行*/,1,-1) = 内容过滤(试用)。\n过滤公式格式 {{col=2;s=">";v=1}{col=2;s="<=";v=60}} \ncol指定要过滤的列;s指定比较符号;v指定比较值。\n多条件之间是and关系。 +addRow(__/*行数据表*/) = 在表格尾部添加行。参数为插入的行数据表。可以为单行数据,也可以为多行数据。每行数据均为table。\n参数为空则添加空行。 +delRow(__/*删除行号*/, 1/*删除数量*/) = 删除行。参数1:删除行号(可为table);2:删除行数\n行号可以是单个数值,也可以是数值表,表示多个行号。\n比如{1,3,5}表示删除第1、3、5行。此时第2个参数无效。 +clear() = 清空表格内容。0:清除内容和格式;1:清除格式;2:清除内容;3:删除所有行(除标题行); +getChecked(col,rcol) = 根据CheckBox的col列的选中状态,返回选中行的行号数组或该行rcol列的内容数组。\n参数1:要判断是否选中的类型为CheckBox的列号。\n参数2:要返回内容的列号。如果该参数省略,则返回值为:行号数组。 +setRowText(__/*行号*/, /*行数据表*/) =设置行内容。参数1:行号;参数2:数据表。 +getRowText(__/*行号*/, /*连接符号*/) = 取行文本。参数1:行号;参数2:连接文本。\n如果指定连接文本,则返回字符串。如果不指定连接文本,则返回数据表。 +updateRowIndexCol(__/*列号*/) = 更新行索引标识符所在的列。全部重置该列内容为行索引标识符。 +merge(__ /*row1*/, /*col1*/, /*row2*/, /*col2*/) = 合并单元格。 +unMerge(row,col) = 拆分单元格。 +getVlistData() = 取当前虚表数据。如果未启用虚表功能,则返回null。 +getCellText(row,col) = 取单元格文本。\n参数1:行号(相对于有效内容的行号) \n参数2:列号(相对于有效内容的列号)\n行号列号都是从startRow和startCol开始计算。 +setCellText(row,col,__) = 置单元格文本。\n参数1:行号(相对于有效内容的行号) \n参数2:列号(相对于有效内容的列号) \n参数3:文本\n行号列号都是从startRow和startCol开始计算。 +cellRange(row,col) = 【对象】取有效内容单元格区域,返回range对象。相当于range(row,col,row,col) \n注意:行列号均为相对于有效内容,从1开始\n注意:建议用完后用release()释放内存。 +cellRange() = !GKflex2_Range. +toRelativeRow(__) = 绝对行号(从0开始)转为有效内容的相对行号(从1开始) +toRelativeCol(__) = 绝对列号(从0开始)转为有效内容的相对列号(从1开始) + +//废弃方法========================================================================================================= +//【废弃方法】AutoFitRowHeight(__) = 调整指定行的行高,使此行所有单元格可容纳文字大小\n只能在调用该函数时调整行高,而不是在用户输入的过程中就调整行高。 \n参数:绝对行号(从0开始) +//【废弃方法】ClosePrintPreviewWindow() = 关闭非模态的打印预览窗口。\n在使用了Grid控件的Form的Unload事件中调用此方法,让程序能够自动关闭非模态的打印预览窗口\n用PrintPreviewVirtualGrid该方法显示出来的打印预览窗口是非模态的,如果用户直接关闭了Grid所在的窗口,打印预览窗口并不会自动关闭 +//【废弃方法】SaveChartAsBitmap(Row, Col, FileName) = 将Chart保存为位图文件(*.bmp)。\n参数:绝对行号(从0开始)、绝对列号(从0开始)、文件名 +//【废弃方法】PrintPreviewEx(.(Modal, ShowOptionsButton, ShowMarginsButton, Zoom, Left, Top, Width, Height) = 该方法是对PrintPreview方法的扩展,可以设置更多的参数\nModal 指定是否显示模态的预览窗口,如果使用了虚表,应该把这个参数设置为False \nShowOptionsButton 指定是否在预览窗口中显示“设置”按钮 \nShowMarginsButton 指定是否在预览窗口中显示“页边距”按钮 \nZoom 指定缩放比例,取值范围:10至200 \nLeft 指定预览窗口左边的位置,单位是像素 \nTop 指定预览窗口顶部的位置,单位是像素 \nWidth 指定预览窗口的宽度,单位是像素 \nHeight 指定预览窗口的高度,单位是像素 +//【废弃方法】PrintPreviewVirtualGrid(zoom) = 虚表打印预览。\n因为虚表是利用Grid的GetCellText事件实现的,\n而PrintPreview方法显示出来的是模态(Modal)的打印预览窗口,\n此窗口一旦显示出来,Grid所在的Form就不能再触发任何事件了,\n虚表会失效,因此将无法正常预览和打印\n本方法就是针对上述问题而设置的,\n显示一个非模态的打印预览窗口\n使用本方法时需要注意的事项有:\n如果Grid所在的Form是模态的,此方法会失效,\n因为在Windows的窗口管理机制中,\n不允许从模态的Form中显示非模态的Form。\n因为此方法显示出来的打印预览窗口是非模态的,\n用户可以在打开了预览窗口后,直接关闭Grid所在的Form,\n打印预览窗口不会自动关闭,需要调用ClosePrintPreviewWindow方法来关闭它\nZoom参数是可选的,取值范围在10~200之间,\n用于指定打印预览窗口的缩放比例。 +//【废弃方法】HttpLoadFromXML(url) = 以HTTP方式导入存储在Internet服务器上的*.xml文件,\n如果操作成功,该方法的返回值为True,否则返回值为False +//【废弃方法】HttpOpenFile(url) = 以HTTP方式打开存储在Internet服务器上的*.cel文件,\n如果操作成功,该方法的返回值为True,否则返回值为False +//【废弃方法】PrintDialog() = 显示“打印机设置”对话框,用户可以在这个对话框里选择打印机、设置打印机属性,如果用户点击了对话框中的“关闭”按钮,该方法返回值为True,否则为False + +//事件函数========================================================================================================= +onAfterReorderColumn = @.onAfterReorderColumn = function(Col,newCol){ + /*** 用户拖动列后。col:拖动的列号;newCol:拖动到的列号 ***/ + var col,newcol=owner.toRelativeCol(Col),owner.toRelativeCol(newCol); + __ +} +onAfterUserSort = @.onAfterUserSort = function(Col){ + /*** 双击列标题触发排序指令后。需要设置AllowUserSort=true才生效。Col:点击的列号 ***/ + var col = owner.toRelativeCol(Col); + var desc = owner.column(col).SortIndicator; /* 排序后的顺序: 1 升序 2 降序 */ + if desc==1 or desc==2 { /*对虚表模式下的数据进行排序*/ + owner.sortVlist( col, desc==2, 0 /*数据转换:0默认 1时间 2数值 3文本*/ ,false /*使用微软api进行文本排序*/ ); + } +} +onBeforeUserSort = @.onBeforeUserSort = function(Col){ + /*** 双击列标题触发排序指令前。需要设置AllowUserSort=true才生效。Col:点击的列号 ***/ + var col = owner.toRelativeCol(Col); + var desc = owner.column(col).SortIndicator; /* 排序前的顺序: 1 升序 2 降序 */ + __ +} +onTextButtonClick = @.onTextButtonClick = function(Row,Col){ + /*** 鼠标点击TextButton类型的单元格中的按钮。***/ + var row,col=owner.toRelativeRow(Row),owner.toRelativeCol(Col); + __ +} +onCellChange = @.onCellChange = function(Row,Col){ + /*** 单元格的内容发生了改变后。Row:行号;Col:列号 ***/ + var row,col=owner.toRelativeRow(Row),owner.toRelativeCol(Col); + __ +} +onCellChanging = @.onCellChanging = function(Row,Col){ + /*** 单元格的内容正在改变时。Row:行号;Col:列号 ***/ + var row,col=owner.toRelativeRow(Row),owner.toRelativeCol(Col); + __ +} +onClick = @.onClick = function(Row,Col){ + /*** 鼠标点击表格。Row:行号;Col:列号 ***/ + var row,col=owner.toRelativeRow(Row),owner.toRelativeCol(Col); + __ +} +onColWidthChange = @.onColWidthChange = function(FirstCol,LastCol){ + /*** 列宽被改变。FirstCol:起始列号;LastCol:截止列号。 + 可以在此事件中设置某列宽度,以达到不允许改变该列宽度的效果。 ***/ + var row,col=owner.toRelativeCol(FirstCol),owner.toRelativeCol(LastCol); + __ +} +onComboClick = @.onComboClick = function(Col){ + /*** 鼠标点击ComboBox下拉列表中的项。Col:ComboBox所在的列数 ***/ + var col=owner.toRelativeCol(Col); + __ +} +onComboDropDown = @.onComboDropDown = function(Row,Col){ + /*** 鼠标点击ComboBox中的小箭头。只有CellType设置为_FlexGrid_CellType_ComboBox的单元格才能触发此事件。 + 在此事件发生前,会清除ComboBox(0)的下拉列表项,因此必须在此事件中向ComboBox(0)添加下拉列表项 + Row:ComboBox所在的行数;Col:ComboBox所在的列数 ***/ + var row,col=owner.toRelativeRow(Row),owner.toRelativeCol(Col); + __ +} +onDblClick = @.onDblClick = function(){ + /*** 鼠标双击表格 ***/ + __ +} +onEditRow = @.onEditRow = function(Row){ + /*** 活动单元格进入到一个新行后,第一次编辑单元格的内容。Row:正在编辑的单元格的行号 ***/ + var row=owner.toRelativeRow(Row); + __ +} +onEnterCell = @.onEnterCell = function(Row,Col){ + /*** 活动单元格进入到一个新单元格,Row:进入的行号,Col:进入的列号 ***/ + var row,col=owner.toRelativeRow(Row),owner.toRelativeCol(Col); + __ +} +onEnterRow = @.onEnterRow = function(Row){ + /*** 活动单元格进入到一个新行,Row:进入的行号 ***/ + var row=owner.toRelativeRow(Row); + __ +} +//onGetCellText = 取得单元格文字,实现虚表功能。本库内部使用,不公开。 +onHScroll = @.onHScroll = function(){ + /*** 表格水平滚动时发生 ***/ + __ +} +onHyperLinkClick = @.onHyperLinkClick = function(Row,Col,URL/*传址*/,Changed/*传址*/){ + /*** 点击超链接,Row:行号; Col:列号; URL:网址; Changed:是否重新更改网址; + 如果要替换网址,只需:return "新网址",true; ***/ + var row,col=owner.toRelativeRow(Row),owner.toRelativeCol(Col); + return URL,Changed; +} +onKeyDown = @.onKeyDown = function(KeyCode,Shift){ + /*** 键盘按键按下,KeyCode 键代码,_vk_开头的常量。 + Shift 功能键状态:1:SHIFT;2:CTRL;4:ALT;同时按下时执行位或操作。 ***/ + __ +} +onKeyUp = @.onKeyUp = function(KeyCode,Shift){ + /*** 键盘按键松开,KeyCode 键代码,_vk_开头的常量。 + Shift 功能键状态:1:SHIFT;2:CTRL;4:ALT;同时按下时执行位或操作。 ***/ + __ +} +onKeyPress = @.onKeyPress = function(keyAscii/*传址*/){ + /*** 键盘按键输入,keyAscii 键代码。更改 keyAscii 可替换为一个不同的字符。keyAscii=0 可取消按键。***/ + return keyAscii; +} +onLeaveCell = @.onLeaveCell = function(Row,Col,newRow/*传址*/,newCol/*传址*/,Cancel/*传址*/){ + /*** 活动单元格改变。 + Row:改变前的行号。Col:改变前的列号。 + newRow:改变后的行号,可以更改newRow,使活动单元格移动到此行。使用绝对行号(从0开始) + newCol:改变后的列号,可以更改newCol,使活动单元格移动到此列。使用绝对列号(从0开始) + Cancel:是否取消更改,设置Cancel=true,可以防止活动单元格离开原来的位置 ***/ + var row,col=owner.toRelativeRow(Row),owner.toRelativeCol(Col); + return newRow,newCol,Cancel; +} +onLeaveRow = @.onLeaveRow = function(Row,Cancel/*传址*/){ + /*** 当前活动单元格离开某行前。Row:离开前的行号。Cancel:是否禁止离开。 + 如果设置 Cancel=true,可以防止活动单元格离开原来的位置,如:return true; ***/ + var row=owner.toRelativeRow(Row); + return Cancel; +} +onMaskError = @.onMaskError = function(Row,Col){ + /*** 在单元格中输入了禁止输入的字符。可以设置控件的ColMask属性来设置输入掩码。 + Row:单元格行号;Col:单元格列号 ***/ + var row,col=owner.toRelativeRow(Row),owner.toRelativeCol(Col); + __ +} +onMouseDown = @.onMouseDown = function(Button , Shift, x, y){ + /*** 鼠标按键按下。 + Button 当前按下的鼠标按钮:1:左按钮;2:右按钮;4:中间按钮;同时按下时执行位或操作。 + Shift 功能键状态:1:SHIFT;2:CTRL;4:ALT;同时按下时执行位或操作。 + x,y 鼠标指针当前位置 ***/ + __ +} +onMouseHover = @.onMouseHover = function(Button , Shift, x, y){ + /*** 鼠标悬停。 + Button 当前按下的鼠标按钮:1:左按钮;2:右按钮;4:中间按钮;同时按下时执行位或操作。 + Shift 功能键状态:1:SHIFT;2:CTRL;4:ALT;同时按下时执行位或操作。 + x,y 鼠标指针当前位置 ***/ + __ +} +onMouseLeave = @.onMouseLeave = function(){ + /*** 鼠标离开表格控件。***/ + __ +} +onMouseUp = @.onMouseUp = function(Button , Shift, x, y){ + /*** 鼠标按键放开。 + Button 当前按下的鼠标按钮:1:左按钮;2:右按钮;4:中间按钮;同时按下时执行位或操作。 + Shift 功能键状态:1:SHIFT;2:CTRL;4:ALT;同时按下时执行位或操作。 + x,y 鼠标指针当前位置 ***/ + __ +} +onMouseMove = @.onMouseMove = function(Button , Shift, x, y){ + /*** 鼠标移动。 + Button 当前按下的鼠标按钮:1:左按钮;2:右按钮;4:中间按钮;同时按下时执行位或操作。 + Shift 功能键状态:1:SHIFT;2:CTRL;4:ALT;同时按下时执行位或操作。 + x,y 鼠标指针当前位置 ***/ + __ +} +onPercentComplete = @.onPercentComplete = function(Message,Percent ){ + /*** 调用ExportToExcel、ExportToCSV、ExportToPDF、ExportToHTML、ExportToXML方法和LoadFromXML方法时,会触发此事件。 + 当数据量很大时,执行这些方法需要较长的时间,可以在此事件中获取并显示当前导出/导入任务已完成的百分比。 + Message:触发该事件的方法名;Percent:当前导出/导入任务已完成的百分比 ***/ + __ +} +onPrintButtonClick = @.onPrintButtonClick = function(){ + /*** 点击打印预览窗口中的“打印”按钮 ***/ + __ +} +onPrintPage = @.onPrintPage = function(PageNumber, Preview, hDC, Left, Top, Width, Height){ + /*** 打印或预览一个页面时发生,以下参数均为int类型。 + PageNumber 页号。 + Preview 预览。 + hDC 打印页面的设备场景。 + Left 页面左边的位置。 + Top 页面顶边的位置。 + Width 页面的宽度。 + Height 页面的高度。 + ***/ + __ +} +onRowHeightChange = @.onRowHeightChange = function(FirstRow,LastRow ){ + /*** 行高改变。FirstRow:起始行号。LastRow:截止行号。 + 可以在此事件中设置某行高度,以达到不允许改变该行高度的效果。***/ + var row,col=owner.toRelativeRow(FirstRow),owner.toRelativeCol(LastRow); + __ +} +onSelChange = @.onSelChange = function(FirstRow,FirstCol,LastRow,LastCol){ + /*** 在Selection选择范围改变时发生。参数:起始行,起始列,结束行,结束列 ***/ + var row1,col1=owner.toRelativeRow(FirstRow),owner.toRelativeCol(FirstCol); + var row2,col2=owner.toRelativeRow(LastRow),owner.toRelativeCol(LastCol); + __ +} +//onSetCellText = 设置单元格文字,实现虚表功能。本库内部使用,不公开。 +onVScroll = @.onVScroll = function(){ + /*** 在表格垂直滚动时发生。 ***/ + __ +} +end intellisense**/ + +/**intellisense(!GKflex2_Cell) +release() = 释放内存占用 +Alignment = 【属性】对齐方式\n_FlexGrid_Alignment_开头的常量 +BackColor = 【属性】背景色 +BarcodeType = 【属性】条形码类型,_FlexGrid_Barcode_开头的常量 +BooleanValue = 【只读】【属性】获取以Boolean类型返回单元格的值 +setBorders( , ) = 设置单元格的边框线型\n参数1:边框:_FlexGrid_Edge_开头的常量,参数2:线型:_FlexGrid_LineStyle_开头的常量 +getBorders(__) = 获取单元格的边框线型,参数:_FlexGrid_Edge_开头的常量 +CellType = 【属性】单元格类型,_FlexGrid_CellType_开头的常量 +Col = 【只读】【属性】获取单元格所在的列号 +Comment = 【属性】批注内容 +DoubleValue = 【只读】【属性】获取以Double类型返回单元格的值 +FontBold = 【属性】是否粗体 +FontItalic = 【属性】是否斜体 +FontName = 【属性】字体名称 +FontSize = 【属性】字体大小,小数型。 +FontStrikethrough = 【属性】是否带删除线 +FontUnderline = 【属性】是否带下划线 +ForeColor = 【属性】前景色(文字颜色) +Height = 【只读】【属性】获取高度\n如果是合并单元格,则返回合并单元格的总高度 +ImageKey = 【只读】【属性】获取图片键名\n如果单元格没有图片,则返回一个空字符串(“”) +IntegerValue = 【只读】【属性】获取以Integer类型返回单元格的值 +Left = 【只读】【属性】获取左边框和控件左边框之间的距离,\n如果单元格不在当前可见范围之内,则返回-1 +Locked = 【只读】【属性】是否锁定 +LongValue = 【只读】【属性】获取以Long类型返回单元格的值 +Mask = 【属性】输入掩码,_FlexGrid_Mask_开头的常量 +Merged = 【只读】【属性】获取是否为合并单元格 +Printable = 【属性】是否可以打印 +Row = 【只读】【属性】获取单元格所在的行号 +SingleValue = 【只读】【属性】获取以Single类型返回单元格的值 +Tag = 【属性】额外数据 +Text = 【属性】单元格内容\n如果单元格类型是复选框,Checked状态下,Text=“1”,否则Text=“0” +Top = 【只读】【属性】获取上边框和控件上边框之间的距离,\n如果单元格不在当前可见范围之内,则返回-1 +Width = 【只读】【属性】获取宽度\n如果是合并单元格,则返回合并单元格的总宽度 +WrapText = 【属性】是否自动换行 +ClearBackColor() = 清除单元格的背景色。 +EnsureVisible() = 滚动FlexCell控件,确保单元格是可见的 +PasteData() = 粘贴剪贴板中的数据。 +Refresh() = 重画一个单元格 +Select()=选择指定的单元格。 +SetFocus() = 滚动FlexCell控件,确保单元格是可见的,并将之设置为活动单元格 +SetImage(.(图片键名) = 设置单元格图片。\n参数:Images图片组中的图片键名。\n\n一个图片可以应用到多个单元格中,\n而且可以设置不同的显示效果\nSetImage("")可以清除单元格的图片 +end intellisense**/ + +/**intellisense(!GKflex2_Chart) +AxesColor = 【属性】座标轴颜色 +ChartType = 【属性】图表类型,lexCell_ChartType_开头的常量 +DisplayAxes = 【属性】是否显示座标轴 +DisplayAxesLabels = 【属性】是否在图表中显示座标轴上的文字,_FlexGrid_AxesLabels_开头的常量 +DisplayCategoryName = 【属性】饼图的数值标签是否显示类别名称。 +DisplayDataLabels = 【属性】是否显示数值标签\n(柱形图和折线图显示实际数值,饼图只显示百分比) +DisplayGridlines = 【属性】是否显示网格线 +DisplayLegend = 【属性】是否显示图例框 +FirstCol = 【只读】【属性】获取数据源的起始列号 +FirstRow = 【只读】【属性】获取数据源的起始行号 +GridLinesColor = 【属性】网格线的颜色 +HideDecimalAxisLabel = 【属性】是否隐藏带小数点的座标。\n例如,所有所果图表数据源中的数据都是0或1,会显现纵座标为0.5的情况,但我们知道事实上是不可能存在0.5个人的,\n这个时候就应该把HideDecimalAxisLabel属性设置为True,隐藏带小数点的座标 +HideSmallPercentage = 【属性】是否隐藏饼图中数值较小的标签(百分比)\n如果表格中有大量的“0%”或“1%”,挤在一起会互相覆盖\n低于这个数值的百分比都会隐藏起来,缺省值为-1,取值范围:-1至100 +LastCol = 【只读】【属性】获取数据源的截止列号 +LastRow = 【只读】【属性】获取数据源的截止行号 +LegendItemSpacing = 【属性】图例框中各个项目之间的间距\n它指定了项目之间的间距(图例框文字高度的倍数),取值范围在0~2之间,缺省值为0.75 +LineWidth = 【属性】图表线宽 +PlotBy = 【属性】按行还是按列生成系列,0:按列;1:按行 +ScaleFont = 【属性】是否自动缩放字体。\n如果为True,Chart对象所在单元格(或合并单元格)的最佳设置值是:\n宽度为300像素,高度为180像素,\n此时Chart对象不会对字体进行任何缩放处理 +WallColor = 【属性】背景墙颜色 +XAxisLabelAngle = 【属性】横座标标签的旋转角度,单位是度,取值范围:0~90度 +YMin = 【属性】纵座标的起点值 +SetDataSource(/*起始行号*/,/*起始列号*/, /*结束行号*/, /*结束列号*/) = 设置数据源。\n数据源是表格中的一块单元格 +SetSeriesColor(__, Color) = 设置系列颜色\n参数1:需要设置颜色的系列(从0开始)\n参数2:颜色值 +//【废弃方法】SetSeriesName(__, "") = 设置系列名称\n参数1:需要设置颜色的系列(从0开始)\n参数2:名称 +end intellisense**/ + +/**intellisense(!GKflex2_Column) +Alignment = 【属性】对齐方式,\n_FlexGrid_Alignment_开头的常量 +BarcodeType = 【属性】条形码类型,_FlexGrid_BarcodeType_开头的常量 +CellType = 【属性】单元格类型,_FlexGrid_CellType_开头的常量 +DecimalLength = 【属性】小数位数 +FormatString = 【属性】文字显示格式,_FlexGrid_NumericFormat_开头的常量 +Locked = 【属性】是否锁定整列单元格 +Mask = 【属性】输入掩码,_FlexGrid_Mask_开头的常量 +MaxLength = 【属性】最长字符位数 +Position = 【只写】【属性】移动列到指定的位置。\n如果表格中存在合并单元格,则不会生效 +SortIndicator = 【属性】固定行上某一列的排序标识(一个三角形图标)。\n_FlexGrid_SortIndicator_开头的常量 +TabStop = 【属性】是否可以按Tab键为这一列中的单元格设置焦点。 +Width = 【属性】列宽,单位是像素\n如果把第0列的列宽设置为0,则可以隐藏固定列 +Tag = 【属性】额外数据 +Visible = 【属性】列是否可见。 +//【废弃方法】SearchMethod = 【属性】寻找与指定字符串相匹配的项时所采用的搜索方法\n_flexBinarySearch=1;\n_flexLinearSearch=0 +AutoFit() = 自动调整列宽,\n使此列单元格不必折行显示即可容纳所有单元格文字 +Delete() = 删除列 +Sort(0) = 将该列作为关键字进行排序。\n参数:0:升序 1:降序\n如果表格中包含有合并单元格和图表,就不能进行排序,也不会有任何提示 +end intellisense**/ + +/**intellisense(!GKflex2_Row) +Height = 【属性】指定行的行高,单位是像素。 +Locked = 【属性】整行单元格是否锁定。 +Position = 【只写】【属性】设置一个行的位置,允许移动行到指定的位置。如果表格中存在合并单元格,则属性的设置不会生效。 +Tag = 【属性】额外数据 +Visible = 【属性】指定行是否可见。 +AutoFit() = 自动调整表格中指定行的行高。 +Delete() = 删除指定的行。 +Select() = 选择指定的行。 +SetText() = 向指定行填充文字,类似于AddItem方法。将要填充的文字,以Tab分隔多列。 +end intellisense**/ + +/**intellisense(!GKflex2_ComboBox) +AutoComplete = 【属性】是否自动完成\n\n自动完成功能可以使用户在ComboBox中的输入更方便,\n但这项功能只对英文字母和数字有效,对中文字符无效 +BackColor = 【属性】下拉窗口的背景色。 +BoundColumn = 【属性】多列ComboBox中哪一列的文字被设置到单元格。 +ColumnCount = 【属性】下拉列表的列数。 +DropDownWidth = 【属性】下拉列表的宽度。 +FontName = 【属性】下拉列表的字体名称。 +FontSize = 【属性】下拉列表的字体大小。 +ForeColor = 【属性】下拉窗口的文字色。 +GridColor = 【属性】多列ComboBox的网格颜色。 +HeaderBackColor = 【属性】多列ComboBox列标题的背景色。 +HeaderGridColor = 【属性】多列ComboBox列标题的网格颜色。 +setItemData(index,value) = 设置项目编号\n参数1:项目索引。\n参数2:项目编号。 +getItemData(index) = 取项目编号。\n参数:项目索引 +ListCount = 【只读】【属性】项目总数 +ListIndex = 【属性】当前项索引 +ListItem =【只读】【属性】项目列表 +Locked = 【属性】是否禁键盘输入\n如果Locked为True,只能从下拉框中选择列表项 +MaxDropDownItems = 【属性】下拉列表最多可容纳的行数。 +NewIndex = 【只读】【属性】获取最近加入的项目索引 +//【废弃属性】ListRows = 【属性】显示行数,1-20有效,默认为8 +//【废弃属性】ListWidth = 【属性】列表宽度 +//【废弃函数】getListItem(index) = 取项目\n参数:指定项的索引值 +AddItem("__") = 添加项目\n参数:项目文本 +Clear() = 清空所有项 +Column(0) = 获取下拉列表指定列对象。参数:列索引。 +Column() = !GKflex2_ComboBoxColumn. +DropDown() = 显示下拉列表窗口。\n注意,只有在ComboBox控件可见时,调用此方法才能显示出下拉窗口 +FindItem("__") = 查找与指定字符串相匹配的项。\n如果找到了匹配的项,返回该项的ListIndex,否则返回-1 +RemoveItem(__) = 删除项目\n参数:项目索引 +end intellisense**/ + +/**intellisense(!GKflex2_ComboBoxColumn) +Alignment = 【属性】对齐方式。0:左;1:中;2:右 +HeaderText = 【属性】列头文字。 +Width = 【属性】列宽,单位是像素。 +end intellisense**/ + +/**intellisense(!GKflex2_Images) +release() = 释放内存占用 +add(__ /*文件*/, /*关键字*/) = 添加一个图片文件\n参数1:图片文件的完整路径\n参数2:关键字,调用Cell对象的SetImage()方法时需要用到此值。默认为不带后缀的文件名\n注意:关键字设置后,无法重新设置。 +item(__) = 【对象】获取一个图片对象。\n参数:图片的键或索引(字符串或数值) +item() = !GKflex2_Images_Item. +AddPicture(__ /*Picture对象*/, /*关键字*/) = 添加一个图片对象\n参数1:StdPicture对象。\n参数2:关键字,调用Cell对象的SetImage()方法时需要用到此值。\n注意:关键字设置后,无法重新设置。 +Clear() = 清空图片组中所有的图片。 +Count() = 获取图片总数 +Remove(__) = 删除一个图片\n参数:图片的键或索引(字符串或数值) +end intellisense**/ + +/**intellisense(!GKflex2_Images_Item) +release() = 释放内存占用 +Key = 【只读】【属性】获取图片关键字 +Picture = 【对象】【属性】图片对象\n可以使用..com.GetIPicture()转为aardio图片对象。 +//【废弃方法】SaveAs(__/*文件名*/) = 保存为位图文件(*.bmp)。\n参数:要保存的文件名 +end intellisense**/ + +/**intellisense(!GKflex2_PageBreaks) +release() = 释放内存占用 +Add(__) = 添加分页符\n参数:分页符位置(水平分页符的行号或垂直分页符的列号) +Clear() = 清除所有分页符 +Count() = 取分页符总数 +Item(__) = 取分页符位置(水平分页符的行号或垂直分页符的列号)\n参数:分页符索引 +Remove(__) = 删除分页符\n参数:分页符位置(水平分页符的行号或垂直分页符的列号) +RemoveAt(__) = 删除分页符。\n参数:分页符索引 +end intellisense**/ + +/**intellisense(!GKflex2_PageSetup) +release() = 释放内存占用 +BlackAndWhite = 【属性】是否单色打印。 +BottomMargin = 【属性】纸张的下边距(小数),单位是厘米。 +CenterFooter = 【属性】中页脚的文字。\n可以用"&N"代表总页数,用"&P"代表页码,用"&D"代表系统日期。 +CenterFooterFont = 【对象】【属性】中页脚的字体。\n!GKflex2_Font. +CenterHeader = 【属性】中页眉的文字。\n可以用"&N"代表总页数,用"&P"代表页码,用"&D"代表系统日期。 +CenterHeaderFont = 【对象】【属性】中页眉的字体。\n!GKflex2_Font. +CenterHorizontally = 【属性】打印内容在页面中是否水平居中。 +CenterVertically = 【属性】打印内容在页面中是否垂直居中。 +Copies = 【属性】需要打印的份数。 +DocumentName = 【属性】打印列队中的文档名称。 +FirstPageNumber = 【属性】打印或打印预览显示的起始页码。 +FooterLineStyle = 【属性】页脚上方的横线的线型,_FlexGrid_LineStyle_开头的常量。\n缺省值为None,不显示横线。 +FooterMargin = 【属性】纸张底端与页脚底端的距离(小数),单位是厘米。 +HeaderLineStyle = 【属性】页眉下方的横线的线型,_FlexGrid_LineStyle_开头的常量。\n缺省值为None,不显示横线。 +HeaderMargin = 【属性】纸张顶端与页眉顶端的距离(小数),单位是厘米。 +Landscape = 【属性】纸张是否设置为横向。 +LeftFooter = 【属性】左页脚的文字。\n可以用"&N"代表总页数,用"&P"代表页码,用"&D"代表系统日期。 +LeftFooterFont = 【对象】【属性】左页脚的字体。\n!GKflex2_Font. +LeftHeader = 【属性】左页眉的文字。\n可以用"&N"代表总页数,用"&P"代表页码,用"&D"代表系统日期。 +LeftHeaderFont = 【对象】【属性】左页眉的字体。\n!GKflex2_Font. +LeftMargin = 【属性】纸张的左边距(小数),单位是厘米。 +MirrorMargins = 【属性】是否在所有偶数页交换左右页边距。\n如果纸张需要装订,并且需要双面打印,\n左边的页边距一般会设置得大一些,\n可以把这个属性设置为True。 +PaperHeight = 【属性】纸张高度(小数),单位是厘米\n如果设置了此属性,paper会自动设置为_FlexGrid_Paper_User(用户自定义)。 +PaperSize = 【属性】当前纸张类型, _FlexGrid_Paper_开头的常量\n同setPaper()、getPaper() +PaperWidth = 【属性】纸张宽度,单位是厘米(小数)。\n如果设置了此属性,paper会自动设置为_FlexGrid_Paper_User(用户自定义)。 +//【废弃属性】Orientation = 【属性】打印方向,1:纵向 2:横向 +//【废弃属性】PaperBin = 【属性】打印机纸盒\n_FlexGrid_PaperBin_开头的常量 +PrintBottomTitleRows = 【属性】底部标题行的行数\n底部标题行在每一个打印页中都重复打印,\n它位于表格的底部。 +PrintCellBorders = 【属性】是否打印单元格边框。 +PrintColumns = 【属性】需要打印的列数。 +PrinterName = 【属性】打印机名称。 +PrintFixedColumn = 【属性】是否打印固定列。 +PrintFixedRow = 【属性】是否打印固定行。 +PrintGridLines = 【属性】是否打印网格线。 +PrintRows = 【属性】需要打印的行数。 +PrintTitleColumns = 【属性】标题列的列数,\n标题列是指在每一个打印页中都重复打印的内容,\n它位于表格的左部。 +PrintTitleRows = 【属性】标题行的行数,\n标题行是指在每一个打印页中都重复打印的内容,\n它位于表格的头部。 +RightFooter = 【属性】右页脚的文字。\n可以用"&N"代表总页数,用"&P"代表页码,用"&D"代表系统日期。 +RightFooterFont = 【对象】【属性】右页脚的字体。\n!GKflex2_Font. +RightHeader = 【属性】右页眉的文字。\n可以用"&N"代表总页数,用"&P"代表页码,用"&D"代表系统日期。 +RightHeaderFont = 【对象】【属性】右页眉的字体。\n!GKflex2_Font. +RightMargin = 【属性】纸张右边距(小数),单位是厘米。 +ThickBorderLineWidth = 【属性】单元格粗边框的实际打印线宽。 +ThinBorderLineWidth = 【属性】单元格细边框的实际打印线宽。 +TopMargin = 【属性】纸张上边距(小数),单位是厘米。 +Zoom = 【属性】实际打印时的缩放比例。取值范围为40~200,缺省值为100。 +getPaperSizes() = 【对象】取所有纸张类型集合\n!GKflex2_PaperSizes. +setPaper(__) = 设置当前前纸张类型(同PaperSize属性)\n参数为:_FlexGrid_Paper_开头的常量 +getPaper() = 取当前纸张类型(同PaperSize属性)\n返回值:_FlexGrid_Paper_开头的常量 +end intellisense**/ + +/**intellisense(!GKflex2_PaperSizes) +release() = 释放内存占用 +Count() = 取纸张类型的数量 +Refresh() = 刷新所有纸张类型。\n用户可能会在程序运行期间添加新的自定义纸型,\n该方法用于重新将打印机支持的所有纸型添加到PaperSizes集合。 +item(__) = 【对象】取纸张类型,返回paper对象\n参数:纸张索引。 +item() = !GKflex2_PaperSizeItem. +end intellisense**/ + +/**intellisense(!GKflex2_PaperSizeItem) +release() = 释放内存占用 +Height = 【只读】【属性】纸张高度,单位为厘米。 +Kind = 【只读】【属性】纸型的类别。 +PaperName = 【只读】【属性】纸张名称。 +Width = 【只读】【属性】纸张宽度(小数),单位为厘米。 +end intellisense**/ + +/**intellisense(!GKflex2_Range.) +release() = 释放内存占用 +Alignment = 【只写】【属性】对齐方式\n_FlexGrid_Alignment_开头的常量 +BackColor = 【只写】【属性】单元格背景色 +BarcodeType = 【属性】条形码类型,_FlexGrid_Barcode_开头的常量 +setBorders( , ) = 设置单元格的边框线型\n参数1:边框:_FlexGrid_Edge_开头的常量,参数2:线型:_FlexGrid_LineStyle_开头的常量 +CellType = 【属性】单元格类型,_FlexGrid_CellType_开头的常量 +FirstCol = 【只读】【属性】获取所选区域最左边的单元格所处的列数 +FirstRow = 【只读】【属性】获取所选区域最顶部的单元格所处的行数 +FontBold = 【只写】【属性】是否粗体 +FontItalic = 【只写】【属性】是否斜体 +FontName = 【只写】【属性】字体名字 +FontSize = 【只写】【属性】字体大小(小数) +FontStrikethrough = 【只写】【属性】是否删除线 +FontUnderline = 【只写】【属性】是否下划线 +ForeColor = 【只写】【属性】单元格前景色(文字颜色) +LastCol = 【只读】【属性】获取所选区域最右边的单元格所处的列数 +LastRow = 【只读】【属性】获取所选区域最下边的单元格所处的行数 +Locked = 【只写】【属性】是否锁定(只读) +Mask = 【只写】【属性】输入掩码,_FlexGrid_Mask_开头的常量 +Printable = 【只写】【属性】设置整个区域内所有单元格是否可打印。 +WrapText = 【只写属性】是否自动换行 +//【废弃属性】MergeCells = 【只写属性】是否合并单元格\n如果设置为false则进行拆分 +ClearAll() = 清除所选区域内所有单元格的内容和格式 +ClearBackColor() = 清除所选区域内所有单元格的背景色。 +ClearFormat() = 清除所选区域内所有单元格的格式 +ClearText() = 清除所选区域内所有单元格的文字 +CopyData() = 复制选定区域内所有单元格内容(包括文字和格式)到剪贴板 +CopyText() = 复制选定区域内所有单元格文字到剪贴板。 +CutData() = 剪切选定区域内所有单元格内容(包括文字和格式) +DeleteByCol() = 按整列方式从表格中删除单元格 +DeleteByRow() = 按整行方式从表格中删除单元格 +InsertCols() = 向表格中插入空列,数量等于当前所选单元格的总列数。 +InsertRows() = 向表格中插入空行,数量等于当前所选单元格的总行数 +Merge() = 将所选区域内所有单元格合并成一个单元格 +PasteData() = 将剪贴板中的数据粘贴到FlexCell表格中去\n如果将要粘贴的目标区域超出了表格的边界,或此区域内包含锁定的单元格,都不能执行粘贴操作。 +Select() = 选定区域内所有单元格\n选定后即可通过Selection属性进行操作 +Sort(__,0,0) = 排序\n参数1:列号\n参数2:排序类型,_FlexGrid_SortType_开头的常量\n参数2:排序顺序(0:顺序 1:逆序) +Unmerge() = 取消合并单元格。 +end intellisense**/ + +/**intellisense(!GKflex2_ReportTitles) +release() = 释放内存占用 +add(__ /*标题文本*/,"黑体"/*字体名称*/,20/*字体大小*/) = 【对象】向ReportTitles集合添加一个标题,并返回这个新增加的标题对象。\n可以用“|”符把标题文字分隔成2或3个部分(例如“左|中|右”,最多只能有2个“|”符)。\n2个部分的对齐方式为:左对齐、右对齐,\n3个部分的对齐方式为:左对齐、居中对齐、右对齐。 +add()=!GKflex2_ReportTitle. +Clear() = 清除ReportTitles集合中的所有标题。 +Count() = 返回ReportTitles集合中的标题总数。 +item(__ /*标题索引*/) = 返回对ReportTitles集合中一个标题的引用。 +item() = !GKflex2_ReportTitle. +Remove(__ /*标题索引*/) = 从ReportTitles集合中删除一个标题。 +end intellisense**/ + +/**intellisense(!GKflex2_ReportTitle) +release() = 释放内存占用 +Alignment = 【属性】报表标题的水平对齐方式。0:左;1:中;2:右。 +AlignTo = 【属性】报表标题边缘对齐方式。0:对齐到页边距;1:对齐到表格 +Color = 【属性】报表标题的颜色。 +Font = 【属性】报表标题的字体。\n!GKflex2_Font. +Height = 【属性】报表标题的高度。如果设置为0,则表示自己根据标题的字体来确定其高度。 +ImageKey = 【属性】报表标题中图片的关键字。\n可以向images集合中添加一个图片(如公司Logo),然后再设置到报表标题中。 +PrintOnAllPages = 【属性】报表标题是否在每一个页面上都打印出来。\ntrue都打印出来,false只打印在第一页。 +Text = 【属性】报表标题的文字。\n可以用“|”符把ReportTitle中的文字分隔成2或3个部分(例如“左|中|右”,最多只能有2个“|”符)。\n2个部分的对齐方式为:左对齐、右对齐,\n3个部分的对齐方式为:左对齐、居中对齐、右对齐。 +end intellisense**/ + +/**intellisense(!GKflex2_Font) +Name = 【属性】字体名称,例如:"宋体" +Size = 【属性】字体大小,单位:像素 +Bold = 【属性】是否加粗 +Italic = 【属性】是否倾斜 +Strikethrough = 【属性】是否带删除线 +Underline = 【属性】是否带下划线 +end intellisense**/ + +/**intellisense(!GKflex2_Tree) +Col = 【属性】第一个树节点所在单元格的列号。 +ImageSize = 【属性】树的图像大小,缺省值为16像素。 +LineColor = 【属性】树的线条颜色。 +PlusMinusColor = 【属性】树的加号("+")和减号("-")的颜色。 +Row = 【属性】第一个树节点所在单元格的行号。 +SelectedNode = 【只读】【属性】返回当前选中在树节点。 +ShowImages = 【属性】树节点是否显示图标。 +ShowLines = 【属性】是否在树节点间画线。 +FindNode(__) = 从指定行号返回树节点。参数:行号 +FindNode() = !GKflex2_Node. +Nodes() = 获取树的子节点集合。\n!GKflex2_Nodes. +end intellisense**/ + +/**intellisense(!GKflex2_Nodes) +Add(1,) = 向树节点集合添加指定数量的子节点。\n参数1:要添加的子节点数量。 \n参数2:字符串,子节点的图片键名。 +Clear()=清空树节点集合中的所有子节点。 +Count()=获取树节点集合中的子节点数量。 +Insert(__,)=在树节点集合的指定位置插入一个新的子节点。\n参数1:要插入到的子节点索引。 \n参数2:字符串,子节点的图片键名。 +Item(__)=获取树节点集合中的一个子节点。\n参数:子节点索引 +Item()=!GKflex2_Node. +Remove(__)=从树节点集合中删除一个子节点。\n参数:子节点索引 +end intellisense**/ + +/**intellisense(!GKflex2_Node) +Expanded=【属性】树节点是否为展开状态。 +ImageKey=【属性】树节点的图片键名。 +Index=【只读】【属性】树节点的索引。 +Level=【只读】【属性】树节点的层次。 +NextNode=【只读】【属性】树节点的下一个节点。\n!GKflex2_Node. +Parent=【只读】【属性】树节点的父节点。\n!GKflex2_Node. +PreviousNode=【只读】【属性】树节点的上一个节点。\n!GKflex2_Node. +Row=【只读】【属性】树节点所在的行号。 +Collapse()=折叠所有的子节点。 +Expand()=展开显示树节点。 +ExpandAll()=展开显示所有子节点分支。 +FindNextNode()=获取当前节点的下一个节点,和NextNode属性不同之处在于如果当前节点是最后一个子节点,则会返回上级节点的NextNode。\n!GKflex2_Node. +Nodes()=获取树节点的子节点集合。\n!GKflex2_Nodes. +Remove()=删除一个树节点及其所有的子节点。 +end intellisense**/ + +/**intellisense() +_FlexGrid_AlignTo_Margin=@0/*_FlexGrid_AlignTo_Margin*/ +_FlexGrid_AlignTo_Grid=@1/*_FlexGrid_AlignTo_Grid*/ + +_FlexGrid_Alignment_GeneralGeneral=@0/*_FlexGrid_Alignment_GeneralGeneral*/ //水平对齐方式:默认;垂直对齐方式:默认。 +_FlexGrid_Alignment_GeneralTop=@1/*_FlexGrid_Alignment_GeneralTop*/ //水平对齐方式:默认;垂直对齐方式:靠上。 +_FlexGrid_Alignment_GeneralCenter=@2/*_FlexGrid_Alignment_GeneralCenter*/ //水平对齐方式:默认;垂直对齐方式:居中。 +_FlexGrid_Alignment_GeneralBottom=@3/*_FlexGrid_Alignment_GeneralBottom*/ //水平对齐方式:默认;垂直对齐方式:靠下。 +_FlexGrid_Alignment_LeftGeneral=@4/*_FlexGrid_Alignment_LeftGeneral*/ //水平对齐方式:左对齐;垂直对齐方式:默认。 +_FlexGrid_Alignment_LeftTop=@5/*_FlexGrid_Alignment_LeftTop*/ //水平对齐方式:左对齐;垂直对齐方式:靠上。 +_FlexGrid_Alignment_LeftCenter=@6/*_FlexGrid_Alignment_LeftCenter*/ //水平对齐方式:左对齐;垂直对齐方式:居中。 +_FlexGrid_Alignment_LeftBottom=@7/*_FlexGrid_Alignment_LeftBottom*/ //水平对齐方式:左对齐;垂直对齐方式:靠下。 +_FlexGrid_Alignment_CenterGeneral=@8/*_FlexGrid_Alignment_CenterGeneral*/ //水平对齐方式:居中对齐;垂直对齐方式:默认。 +_FlexGrid_Alignment_CenterTop=@9/*_FlexGrid_Alignment_CenterTop*/ //水平对齐方式:居中对齐;垂直对齐方式:靠上。 +_FlexGrid_Alignment_CenterCenter=@10/*_FlexGrid_Alignment_CenterCenter*/ //水平对齐方式:居中对齐;垂直对齐方式:居中。 +_FlexGrid_Alignment_CenterBottom=@11/*_FlexGrid_Alignment_CenterBottom*/ //水平对齐方式:居中对齐;垂直对齐方式:靠下。 +_FlexGrid_Alignment_RightGeneral=@12/*_FlexGrid_Alignment_RightGeneral*/ //水平对齐方式:右对齐;垂直对齐方式:默认。 +_FlexGrid_Alignment_RightTop=@13/*_FlexGrid_Alignment_RightTop*/ //水平对齐方式:右对齐;垂直对齐方式:靠上。 +_FlexGrid_Alignment_RightCenter=@14/*_FlexGrid_Alignment_RightCenter*/ //水平对齐方式:右对齐;垂直对齐方式:居中。 +_FlexGrid_Alignment_RightBottom=@15/*_FlexGrid_Alignment_RightBottom*/ //水平对齐方式:右对齐;垂直对齐方式:靠下。 + +_FlexGrid_Appearance_Flat=@0/*_FlexGrid_Appearance_Flat*/ +_FlexGrid_Appearance_Fixed3D=@1/*_FlexGrid_Appearance_Fixed3D*/ + +_FlexGrid_AxesLabels_None=@0/*_FlexGrid_AxesLabels_None*/ //不显示。 +_FlexGrid_AxesLabels_XAxis=@1/*_FlexGrid_AxesLabels_XAxis*/ //只在横座标轴上显示文字。 +_FlexGrid_AxesLabels_YAxis=@2/*_FlexGrid_AxesLabels_YAxis*/ //只在纵座标轴上显示文字。 +_FlexGrid_AxesLabels_Both=@3/*_FlexGrid_AxesLabels_Both*/ //横座标轴和纵座标轴都显示文字。 + +_FlexGrid_Barcode_DefaultType=@0/*_FlexGrid_Barcode_DefaultType*/ +_FlexGrid_Barcode_CODE39=@1/*_FlexGrid_Barcode_CODE39*/ +_FlexGrid_Barcode_CODE128A=@2/*_FlexGrid_Barcode_CODE128A*/ +_FlexGrid_Barcode_CODE128B=@3/*_FlexGrid_Barcode_CODE128B*/ +_FlexGrid_Barcode_CODE128C=@4/*_FlexGrid_Barcode_CODE128C*/ +_FlexGrid_Barcode_EAN128=@5/*_FlexGrid_Barcode_EAN128*/ +_FlexGrid_Barcode_EAN13=@6/*_FlexGrid_Barcode_EAN13*/ +_FlexGrid_Barcode_Interleaved2of5=@7/*_FlexGrid_Barcode_Interleaved2of5*/ + +_FlexGrid_CellType_Default=@0/*_FlexGrid_CellType_Default*/ //默认,根据单元格所在列的CellType而定。 +_FlexGrid_CellType_TextBox=@1/*_FlexGrid_CellType_TextBox*/ //文本框 +_FlexGrid_CellType_CheckBox=@2/*_FlexGrid_CellType_CheckBox*/ //复选框 +_FlexGrid_CellType_ComboBox=@3/*_FlexGrid_CellType_ComboBox*/ //组合框 +_FlexGrid_CellType_TextButton=@4/*_FlexGrid_CellType_TextButton*/ //带按钮的文本框 +_FlexGrid_CellType_HyperLink=@5/*_FlexGrid_CellType_HyperLink*/ //超链接 +_FlexGrid_CellType_Date=@6/*_FlexGrid_CellType_Date*/ //日期 +_FlexGrid_CellType_Time=@7/*_FlexGrid_CellType_Time*/ //时间 +_FlexGrid_CellType_DateTime=@8/*_FlexGrid_CellType_DateTime*/ //日期时间 +_FlexGrid_CellType_BarCode=@9/*_FlexGrid_CellType_BarCode*/ //条形码 +_FlexGrid_CellType_QrCode=@10/*_FlexGrid_CellType_QrCode*/ //二维码 +_FlexGrid_CellType_Progress=@11/*_FlexGrid_CellType_Progress*/ //自绘进度条,需开启ownerDrawCell +_FlexGrid_CellType_ImageProgress=@12/*_FlexGrid_CellType_ImageProgress*/ //自绘图片进度条,需开启ownerDrawCell +_FlexGrid_CellType_Button=@13/*_FlexGrid_CellType_Button*/ //自绘按钮,需开启ownerDrawCell + +_FlexGrid_ChartType_ColumnClustered=@0/*_FlexGrid_ChartType_ColumnClustered*/ //平面的柱状图。 +_FlexGrid_ChartType_Line=@1/*_FlexGrid_ChartType_Line*/ //平面的折线图。 +_FlexGrid_ChartType_Pie=@2/*_FlexGrid_ChartType_Pie*/ //平面的饼图。 +_FlexGrid_ChartType_3DColumnClustered=@3/*_FlexGrid_ChartType_3DColumnClustered*/ //三维的柱状图。 +_FlexGrid_ChartType_3DLine=@4/*_FlexGrid_ChartType_3DLine*/ //三维的折线图。 +_FlexGrid_ChartType_3DPie=@5/*_FlexGrid_ChartType_3DPie*/ //三维的饼图。 + +_FlexGrid_DateFormat_DMY=@2/*_FlexGrid_DateFormat_DMY*/ +_FlexGrid_DateFormat_MDY=@1/*_FlexGrid_DateFormat_MDY*/ +_FlexGrid_DateFormat_YMD=@0/*_FlexGrid_DateFormat_YMD*/ + +_FlexGrid_DrawMode_Normal=@0/*_FlexGrid_DrawMode_Normal*/ +_FlexGrid_DrawMode_OwnerDraw=@1/*_FlexGrid_DrawMode_OwnerDraw*/ + +_FlexGrid_FirstDayOfWeek_Friday=@5/*_FlexGrid_FirstDayOfWeek_Friday*/ +_FlexGrid_FirstDayOfWeek_Monday=@1/*_FlexGrid_FirstDayOfWeek_Monday*/ +_FlexGrid_FirstDayOfWeek_Saturday=@6/*_FlexGrid_FirstDayOfWeek_Saturday*/ +_FlexGrid_FirstDayOfWeek_Sunday=@0/*_FlexGrid_FirstDayOfWeek_Sunday*/ +_FlexGrid_FirstDayOfWeek_Thursday=@4/*_FlexGrid_FirstDayOfWeek_Thursday*/ +_FlexGrid_FirstDayOfWeek_Tuesday=@2/*_FlexGrid_FirstDayOfWeek_Tuesday*/ +_FlexGrid_FirstDayOfWeek_Wednesday=@3/*_FlexGrid_FirstDayOfWeek_Wednesday*/ + +_FlexGrid_FixedRowColStyle_Flat=@0/*_FlexGrid_FixedRowColStyle_Flat*/ +_FlexGrid_FixedRowColStyle_Light3D=@1/*_FlexGrid_FixedRowColStyle_Light3D*/ +_FlexGrid_FixedRowColStyle_VisualStyles=@2/*_FlexGrid_FixedRowColStyle_VisualStyles*/ + +_FlexGrid_Focusrect_Dot=@1/*_FlexGrid_Focusrect_Dot*/ +_FlexGrid_Focusrect_Solid=@0/*_FlexGrid_Focusrect_Solid*/ + +_FlexGrid_HeaderFooterAlignment_Center=@1/*_FlexGrid_HeaderFooterAlignment_Center*/ +_FlexGrid_HeaderFooterAlignment_Left=@0/*_FlexGrid_HeaderFooterAlignment_Left*/ +_FlexGrid_HeaderFooterAlignment_Right=@2/*_FlexGrid_HeaderFooterAlignment_Right*/ + +_FlexGrid_LineStyle_None=@0/*_FlexGrid_LineStyle_None*/ //无框线。 +_FlexGrid_LineStyle_Thin=@1/*_FlexGrid_LineStyle_Thin*/ //细实线,线宽为1个像素。 +_FlexGrid_LineStyle_Thick=@2/*_FlexGrid_LineStyle_Thick*/ //粗实线,线宽为2个像素。 +_FlexGrid_LineStyle_Dot=@3/*_FlexGrid_LineStyle_Dot*/ //虚线。 + +_FlexGrid_Mask_Default=@0/*_FlexGrid_Mask_Default*/ //默认值,根据单元格所在列的Mask而定。 +_FlexGrid_Mask_NoMask=@1/*_FlexGrid_Mask_NoMask*/ //无掩码,可以输入任何字符。 +_FlexGrid_Mask_Digital=@2/*_FlexGrid_Mask_Digital*/ //只允许输入数字。 +_FlexGrid_Mask_Numeric=@3/*_FlexGrid_Mask_Numeric*/ //只允数字、正负号以及小数点(是否可以输入小数点要根据单元格所在列的DecimalLength而定)。 +_FlexGrid_Mask_Alpha=@4/*_FlexGrid_Mask_Alpha*/ //只允许输入字母和数字。 +_FlexGrid_Mask_Upper=@5/*_FlexGrid_Mask_Upper*/ //只允许输入大写字母和数字。 +_FlexGrid_Mask_Lower=@6/*_FlexGrid_Mask_Lower*/ //只允许输入小写字母和数字。 + +_FlexGrid_MoveTo_NextCol=@0/*_FlexGrid_MoveTo_NextCol*/ +_FlexGrid_MoveTo_NextRow=@1/*_FlexGrid_MoveTo_NextRow*/ + +_FlexGrid_Orientation_Landscape=@2/*_FlexGrid_Orientation_Landscape*/ +_FlexGrid_Orientation_Portrait=@1/*_FlexGrid_Orientation_Portrait*/ + +_FlexGrid_Paper_10x14=@0x10/*_FlexGrid_Paper_10x14*/ +_FlexGrid_Paper_11x17=@0x11/*_FlexGrid_Paper_11x17*/ +_FlexGrid_Paper_A3=@8/*_FlexGrid_Paper_A3*/ +_FlexGrid_Paper_A4=@9/*_FlexGrid_Paper_A4*/ +_FlexGrid_Paper_A4Small=@0xA/*_FlexGrid_Paper_A4Small*/ +_FlexGrid_Paper_A5=@0xB/*_FlexGrid_Paper_A5*/ +_FlexGrid_Paper_B4=@0xC/*_FlexGrid_Paper_B4*/ +_FlexGrid_Paper_B5=@0xD/*_FlexGrid_Paper_B5*/ +_FlexGrid_Paper_CSheet=@0x18/*_FlexGrid_Paper_CSheet*/ +_FlexGrid_Paper_DSheet=@0x19/*_FlexGrid_Paper_DSheet*/ +_FlexGrid_Paper_ESheet=@0x1A/*_FlexGrid_Paper_ESheet*/ +_FlexGrid_Paper_Env10=@0x14/*_FlexGrid_Paper_Env10*/ +_FlexGrid_Paper_Env11=@0x15/*_FlexGrid_Paper_Env11*/ +_FlexGrid_Paper_Env12=@0x16/*_FlexGrid_Paper_Env12*/ +_FlexGrid_Paper_Env14=@0x17/*_FlexGrid_Paper_Env14*/ +_FlexGrid_Paper_Env9=@0x13/*_FlexGrid_Paper_Env9*/ +_FlexGrid_Paper_EnvB4=@0x21/*_FlexGrid_Paper_EnvB4*/ +_FlexGrid_Paper_EnvB5=@0x22/*_FlexGrid_Paper_EnvB5*/ +_FlexGrid_Paper_EnvB6=@0x23/*_FlexGrid_Paper_EnvB6*/ +_FlexGrid_Paper_EnvC3=@0x1D/*_FlexGrid_Paper_EnvC3*/ +_FlexGrid_Paper_EnvC4=@0x1E/*_FlexGrid_Paper_EnvC4*/ +_FlexGrid_Paper_EnvC5=@0x1C/*_FlexGrid_Paper_EnvC5*/ +_FlexGrid_Paper_EnvC65=@0x20/*_FlexGrid_Paper_EnvC65*/ +_FlexGrid_Paper_EnvC6=@0x1F/*_FlexGrid_Paper_EnvC6*/ +_FlexGrid_Paper_EnvDL=@0x1B/*_FlexGrid_Paper_EnvDL*/ +_FlexGrid_Paper_EnvItaly=@0x24/*_FlexGrid_Paper_EnvItaly*/ +_FlexGrid_Paper_EnvMonarch=@0x25/*_FlexGrid_Paper_EnvMonarch*/ +_FlexGrid_Paper_EnvPersonal=@0x26/*_FlexGrid_Paper_EnvPersonal*/ +_FlexGrid_Paper_Executive=@7/*_FlexGrid_Paper_Executive*/ +_FlexGrid_Paper_FanfoldLglGerman=@0x29/*_FlexGrid_Paper_FanfoldLglGerman*/ +_FlexGrid_Paper_FanfoldStdGerman=@0x28/*_FlexGrid_Paper_FanfoldStdGerman*/ +_FlexGrid_Paper_FanfoldUS=@0x27/*_FlexGrid_Paper_FanfoldUS*/ +_FlexGrid_Paper_Folio=@0xE/*_FlexGrid_Paper_Folio*/ +_FlexGrid_Paper_Ledger=@4/*_FlexGrid_Paper_Ledger*/ +_FlexGrid_Paper_Legal=@5/*_FlexGrid_Paper_Legal*/ +_FlexGrid_Paper_Letter=@1/*_FlexGrid_Paper_Letter*/ +_FlexGrid_Paper_LetterSmall=@2/*_FlexGrid_Paper_LetterSmall*/ +_FlexGrid_Paper_Note=@0x12/*_FlexGrid_Paper_Note*/ +_FlexGrid_Paper_Quarto=@0xF/*_FlexGrid_Paper_Quarto*/ +_FlexGrid_Paper_Statement=@6/*_FlexGrid_Paper_Statement*/ +_FlexGrid_Paper_Tabloid=@3/*_FlexGrid_Paper_Tabloid*/ +_FlexGrid_Paper_User=@0x100/*_FlexGrid_Paper_User*/ + +_FlexGrid_PaperBin_Auto=@7/*_FlexGrid_PaperBin_Auto*/ +_FlexGrid_PaperBin_Cassette=@0xE/*_FlexGrid_PaperBin_Cassette*/ +_FlexGrid_PaperBin_EnvManual=@6/*_FlexGrid_PaperBin_EnvManual*/ +_FlexGrid_PaperBin_Envelope=@5/*_FlexGrid_PaperBin_Envelope*/ +_FlexGrid_PaperBin_LargeCapacity=@0xB/*_FlexGrid_PaperBin_LargeCapacity*/ +_FlexGrid_PaperBin_LargeFmt=@0xA/*_FlexGrid_PaperBin_LargeFmt*/ +_FlexGrid_PaperBin_Lower=@2/*_FlexGrid_PaperBin_Lower*/ +_FlexGrid_PaperBin_Manual=@4/*_FlexGrid_PaperBin_Manual*/ +_FlexGrid_PaperBin_Middle=@3/*_FlexGrid_PaperBin_Middle*/ +_FlexGrid_PaperBin_SmallFmt=@9/*_FlexGrid_PaperBin_SmallFmt*/ +_FlexGrid_PaperBin_Tractor=@8/*_FlexGrid_PaperBin_Tractor*/ +_FlexGrid_PaperBin_Upper=@1/*_FlexGrid_PaperBin_Upper*/ + +_FlexGrid_Paste_NotAllowed=@3/*_FlexGrid_Paste_NotAllowed*/ +_FlexGrid_Paste_TextAndFlexCellFormat=@1/*_FlexGrid_Paste_TextAndFlexCellFormat*/ +_FlexGrid_Paste_TextAndFormat=@0/*_FlexGrid_Paste_TextAndFormat*/ +_FlexGrid_Paste_TextOnly=@2/*_FlexGrid_Paste_TextOnly*/ + +_FlexGrid_PlotType_Columns=@0/*_FlexGrid_PlotType_Columns*/ +_FlexGrid_PlotType_Rows=@1/*_FlexGrid_PlotType_Rows*/ + +_FlexGrid_ScrollBar_Both=@3/*_FlexGrid_ScrollBar_Both*/ +_FlexGrid_ScrollBar_Horizontal=@1/*_FlexGrid_ScrollBar_Horizontal*/ +_FlexGrid_ScrollBar_None=@0/*_FlexGrid_ScrollBar_None*/ +_FlexGrid_ScrollBar_Vertical=@2/*_FlexGrid_ScrollBar_Vertical*/ + +_FlexGrid_Search_BinarySearch=@1/*_FlexGrid_Search_BinarySearch*/ +_FlexGrid_Search_LinearSearch=@0/*_FlexGrid_Search_LinearSearch*/ + +_FlexGrid_SelectedObject_ClientCell=@0/*_FlexGrid_SelectedObject_ClientCell*/ +_FlexGrid_SelectedObject_EntireColumn=@2/*_FlexGrid_SelectedObject_EntireColumn*/ +_FlexGrid_SelectedObject_EntireGrid=@3/*_FlexGrid_SelectedObject_EntireGrid*/ +_FlexGrid_SelectedObject_EntireRow=@1/*_FlexGrid_SelectedObject_EntireRow*/ + +_FlexGrid_SelectionMode_ByColumn=@2/*_FlexGrid_SelectionMode_ByColumn*/ +_FlexGrid_SelectionMode_ByRow=@1/*_FlexGrid_SelectionMode_ByRow*/ +_FlexGrid_SelectionMode_Free=@0/*_FlexGrid_SelectionMode_Free*/ +_FlexGrid_SelectionMode_None=@3/*_FlexGrid_SelectionMode_None*/ + +_FlexGrid_Sort_Ascending=@0/*_FlexGrid_Sort_Ascending*/ +_FlexGrid_Sort_Descending=@1/*_FlexGrid_Sort_Descending*/ + +_FlexGrid_SortIndicator_None=@0/*_FlexGrid_SortIndicator_None*/ //无标识符。 +_FlexGrid_SortIndicator_Ascending=@1/*_FlexGrid_SortIndicator_Ascending*/ //升序标识符。 +_FlexGrid_SortIndicator_Descending=@2/*_FlexGrid_SortIndicator_Descending*/ //降序标识符。 +_FlexGrid_SortIndicator_Disabled=@3/*_FlexGrid_SortIndicator_Disabled*/ //无标识符,并且在禁止通过双击列头的方式对此列进行排序。 + +_FlexGrid_SortIndicatorStyle_3DIndicator=@1/*_FlexGrid_SortIndicatorStyle_3DIndicator*/ +_FlexGrid_SortIndicatorStyle_FlatIndicator=@0/*_FlexGrid_SortIndicatorStyle_FlatIndicator*/ + +_FlexGrid_TimeFormat_HM=@2/*_FlexGrid_TimeFormat_HM*/ +_FlexGrid_TimeFormat_HMAMPM=@3/*_FlexGrid_TimeFormat_HMAMPM*/ +_FlexGrid_TimeFormat_HMS=@0/*_FlexGrid_TimeFormat_HMS*/ +_FlexGrid_TimeFormat_HMSAMPM=@1/*_FlexGrid_TimeFormat_HMSAMPM*/ + +_FlexGrid_BorderStyle_cellNoBorder=@0/*_FlexGrid_BorderStyle_cellNoBorde*/ //无边框。 +_FlexGrid_BorderStyle_cellFlat=@1/*_FlexGrid_BorderStyle_cellFlat*/ //平面边框,宽度为1个像素。 +_FlexGrid_BorderStyle_cell3D=@2/*_FlexGrid_BorderStyle_cell3D*/ //三维边框,宽度为2个像素。 +_FlexGrid_BorderStyle_cellLight3D=@3/*_FlexGrid_BorderStyle_cellLight3D*/ //三维边框,宽度为1个像素。 + +_FlexGrid_CorrectionLevel_L=@0/*_FlexGrid_CorrectionLevel_L*/ +_FlexGrid_CorrectionLevel_M=@1/*_FlexGrid_CorrectionLevel_M*/ +_FlexGrid_CorrectionLevel_Q=@2/*_FlexGrid_CorrectionLevel_Q*/ +_FlexGrid_CorrectionLevel_H=@3/*_FlexGrid_CorrectionLevel_H*/ + +_FlexGrid_DateFormat_YMD=@0/*_FlexGrid_DateFormat_YMD*/ //日期格式为YYYY-MM-DD +_FlexGrid_DateFormat_MDY=@1/*_FlexGrid_DateFormat_MDY*/ //日期格式为MM-DD-YYYY +_FlexGrid_DateFormat_DMY=@2/*_FlexGrid_DateFormat_DMY*/ //日期格式为DD-MM-YYYY +_FlexGrid_DateFormat_SystemDateFormat=@3/*_FlexGrid_DateFormat_SystemDateFormat*/ //由操作系统(区域设置)决定 + +_FlexGrid_DrawMode_Normal=@0/*_FlexGrid_DrawMode_Normal*/ //普通模式,不触发OwnerDrawCell事件。 +_FlexGrid_DrawMode_OwnerDraw=@1/*_FlexGrid_DrawMode_OwnerDraw*/ //自绘模式,控件在画单元格会时触发OwnerDrawCell事件,用户可以在此事件中编程,用自己的代码画出表格的内容。 + +_FlexGrid_FocusRect_Solid=@0/*_FlexGrid_FocusRect_Solid*/ //实线,宽度为2个像素。 +_FlexGrid_FocusRect_Dot=@1/*_FlexGrid_FocusRect_Dot*/ //虚线,宽度为1个像素。 + +_FlexGrid_ScrollBarStyle_System=@0/*_FlexGrid_ScrollBarStyle_System*/ //系统风格。 +_FlexGrid_ScrollBarStyle_Flat=@1/*_FlexGrid_ScrollBarStyle_Flat*/ //平面风格。 +_FlexGrid_ScrollBarStyle_Light3D=@2/*_FlexGrid_ScrollBarStyle_Light3D*/ //3D风格。 + +_FlexGrid_SelectionMode_Free=@0/*_FlexGrid_SelectionMode_Free*/ //自由选取。 +_FlexGrid_SelectionMode_ByRow=@1/*_FlexGrid_SelectionMode_ByRow*/ //整行选取。 +_FlexGrid_SelectionMode_ByColumn=@2/*_FlexGrid_SelectionMode_ByColumn*/ //整列选取。 +_FlexGrid_SelectionMode_ByCell=@3/*_FlexGrid_SelectionMode_ByCell*/ //一次只能选取一个单元格。 + +_FlexGrid_SortIndicatorStyle_Flat=@0/*_FlexGrid_SortIndicatorStyle_Flat*/ //平面。 +_FlexGrid_SortIndicatorStyle_T3D=@1/*_FlexGrid_SortIndicatorStyle_T3D*/ //3D。 + +_FlexGrid_TabKeyMoveTo_CurrentRow=@0/*_FlexGrid_TabKeyMoveTo_CurrentRow*/ //移动到当前行的第一列。 +_FlexGrid_TabKeyMoveTo_NextRow=@1/*_FlexGrid_TabKeyMoveTo_NextRow*/ //移动到下一行的第一列。 + +_FlexGrid_TimeFormat_HMS=@0/*_FlexGrid_TimeFormat_HMS*/ //HH:MM:SS +_FlexGrid_TimeFormat_HMSAMPM=@1/*_FlexGrid_TimeFormat_HMSAMPM*/ //HH:MM:SS AMPM +_FlexGrid_TimeFormat_HM=@2/*_FlexGrid_TimeFormat_HM*/ //HH:MM +_FlexGrid_TimeFormat_HMAMPM=@3/*_FlexGrid_TimeFormat_HMAMPM*/ //HH:MM AMPM + +_FlexGrid_MoveTo_NextCol=@0/*_FlexGrid_MoveTo_NextCol*/ //活动单元格移动到下一列。 +_FlexGrid_MoveTo_NextRow=@1/*_FlexGrid_MoveTo_NextRow*/ //活动单元格移动到下一行。 + +_FlexGrid_ScrollBars_None=@0/*_FlexGrid_ScrollBars_None*/ //不显示滚动条。 +_FlexGrid_ScrollBars_Horizontal=@1/*_FlexGrid_ScrollBars_Horizontal*/ //只显示水平滚动条。 +_FlexGrid_ScrollBars_Vertical=@2/*_FlexGrid_ScrollBars_Vertical*/ //只显示垂直滚动条。 +_FlexGrid_ScrollBars_Both=@3/*_FlexGrid_ScrollBars_Both*/ //二个滚动条都显示。 + +_FlexGrid_Edge_Left=@1/*_FlexGrid_Edge_Left*/ //左边框。 +_FlexGrid_Edge_Right=@2/*_FlexGrid_Edge_Right*/ //右边框。 +_FlexGrid_Edge_Top=@4/*_FlexGrid_Edge_Top*/ //上边框。 +_FlexGrid_Edge_Bottom=@8/*_FlexGrid_Edge_Bottom*/ //下边框。 +_FlexGrid_Edge_Outside=@15/*_FlexGrid_Edge_Outside*/ //外部框线,包括上、下、左、右四条边框。 +_FlexGrid_Edge_DiagonalUp=@16/*_FlexGrid_Edge_DiagonalUp*/ //反斜线,从左下角到右上角。 +_FlexGrid_Edge_DiagonalDown=@32/*_FlexGrid_Edge_DiagonalDown*/ //正斜线,从左上角到右下角。 +_FlexGrid_Edge_InsideVertical=@64/*_FlexGrid_Edge_InsideVertical*/ //内部的垂直框线。 +_FlexGrid_Edge_InsideHorizontal=@128/*_FlexGrid_Edge_InsideHorizontal*/ //内部的水平框线。 +_FlexGrid_Edge_Inside=@192/*_FlexGrid_Edge_Inside*/ //内部的垂直和水平框线。 + +_FlexGrid_Mask_DefaultMask=@0/*_FlexGrid_Mask_DefaultMask*/ //默认值,根据单元格所在列的Mask而定。 +_FlexGrid_Mask_NoMask=@1/*_FlexGrid_Mask_NoMask*/ //无掩码,可以输入任何字符。 +_FlexGrid_Mask_Digital=@2/*_FlexGrid_Mask_Digital*/ //只允许输入数字。 +_FlexGrid_Mask_Numeric=@3/*_FlexGrid_Mask_Numeric*/ //只允数字、正负号以及小数点(是否可以输入小数点要根据单元格所在列的DecimalLength而定)。 +_FlexGrid_Mask_Alpha=@4/*_FlexGrid_Mask_Alpha*/ //只允许输入字母和数字。 +_FlexGrid_Mask_Upper=@5/*_FlexGrid_Mask_Upper*/ //只允许输入大写字母和数字。 +_FlexGrid_Mask_Lower=@6/*_FlexGrid_Mask_Lower*/ //只允许输入小写字母和数字。 + +_FlexGrid_BarcodeType_Default=@0/*_FlexGrid_BarcodeType_Default*/ //默认,根据单元格所在列的BarcodeType而定。 +_FlexGrid_BarcodeType_CODE39=@1/*_FlexGrid_BarcodeType_CODE39*/ //CODE39。 +_FlexGrid_BarcodeType_CODE128A=@2/*_FlexGrid_BarcodeType_CODE128A*/ //CODE128A。 +_FlexGrid_BarcodeType_CODE128B=@3/*_FlexGrid_BarcodeType_CODE128B*/ //CODE128B。 +_FlexGrid_BarcodeType_CODE128C=@4/*_FlexGrid_BarcodeType_CODE128C*/ //CODE128C。 +_FlexGrid_BarcodeType_EAN128=@5/*_FlexGrid_BarcodeType_EAN128*/ //EAN128。 +_FlexGrid_BarcodeType_EAN13=@6/*_FlexGrid_BarcodeType_EAN13*/ //EAN13。 +_FlexGrid_BarcodeType_Interleaved2of5=@7/*_FlexGrid_BarcodeType_Interleaved2of5*/ //交叉25码。 + +_FlexGrid_NumericFormat_Default=@0/*_FlexGrid_NumericFormat_Default*/ //缺省格式,带千分位。 +_FlexGrid_NumericFormat_GeneralNumber=@1/*_FlexGrid_NumericFormat_GeneralNumber*/ //不带千分位。 +_FlexGrid_NumericFormat_Percentage=@2/*_FlexGrid_NumericFormat_Percentage*/ //百分比。 +_FlexGrid_NumericFormat_Currency=@3/*_FlexGrid_NumericFormat_Currency*/ //货币。 + +_FlexGrid_SortType_Text=@0/*_FlexGrid_SortType_Text*/ //按文字排序。 +_FlexGrid_SortType_Date=@1/*_FlexGrid_SortType_Date*/ //按日期排序。 +_FlexGrid_SortType_Numeric=@2/*_FlexGrid_SortType_Numeric*/ //按数字排序。 + +end intellisense**/ \ No newline at end of file diff --git a/lib/flexcell/user.lib b/lib/flexcell/user.lib new file mode 100644 index 0000000..98c68c4 Binary files /dev/null and b/lib/flexcell/user.lib differ diff --git a/lib/teMenu.aardio b/lib/teMenu.aardio new file mode 100644 index 0000000..9c8e3f3 --- /dev/null +++ b/lib/teMenu.aardio @@ -0,0 +1,349 @@ +//teMenu 菜单按钮 +namespace teMenu; +import color; +import win.ui.tooltip; +import fonts; +fonts.addFamily($"\res\iconfont.ttf"); + +class TeMenu{ + ctor( winform ){ + this.ico_width = 32; + this.ico_margin = 3; + this.ico_size = -25; + this.toolbar_padding_lr = 5; + this.balloonTipCtrl = {}; + this.toolbars_left = { + [1] = { + tips = "新建"; + text='\uE7A0'; + font = LOGFONT(h=this.ico_size;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xFF80C247; + default=0xFF72B43A; + disabled=0xFFBDBDBD + } + } + }; + [2] = { + tips = "打开"; + text='\uE660'; + font = LOGFONT(h=this.ico_size;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xFFF5B64E; + default=0xFFF5A623; + disabled=0xFF6D6D6D + } + } + }; + [3] = { + tips = "保存"; + text='\uE857'; + font = LOGFONT(h=this.ico_size;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xFF90B5FF; + default=0xFF85AAFC; + disabled=0x5D000000 + } + } + }; + [4] = { + tips = "另存为"; + text='\uE7E5'; + font = LOGFONT(h=this.ico_size;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xFF779DED; + default=0xFF6890DF; + disabled=0x5D000000 + } + } + }; + [5] = { + tips = "背景色"; + text = '\uE6F8'; + font = LOGFONT(h=this.ico_size-5;name='iconfont'); + style = { + background={ + default=0xE6FFE0A3; + }; + foreground={}; + color={ + active=0xE8000000; + default=0xFF000000; + disabled=0xFF6D6D6D + } + } + }; + [6] = { + tips = "前景色"; + text = '\uE602'; + font = LOGFONT(h=this.ico_size+5;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xFFD60000; + default=0xFFD60000; + disabled=0xFFD60000 + } + } + }; + [7] = { + tips = "【冻结】活动单元格所在的列、行"; + text='\uE692'; + font = LOGFONT(h=this.ico_size;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xE900B7FF; + default=0xFF00B4FB; + disabled=0x5D000000 + } + } + }; + [8] = { + tips = "取消冻结"; + text='\uEE8B'; + font = LOGFONT(h=this.ico_size;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xE900B7FF; + default=0xFF00B4FB; + disabled=0x5D000000 + } + } + }; + [9] = { + tips = "txt 导出 Sqlite3"; + text = '\uE612'; + font = LOGFONT(h=this.ico_size;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xFF567DCC; + default=0xFF3366CC; + disabled=0xFF6D6D6D + } + } + }; + [10] = { + tips = "Sqlite3 导出 txt"; + text = '\uE612'; + font = LOGFONT(h=this.ico_size;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xFFCC5858; + default=0xFFCC3333; + disabled=0xFF6D6D6D + } + } + }; + [11] = { + tips = "关于"; + text = '\uE7AB'; + font = LOGFONT(h=this.ico_size;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xFF999999; + default=0xFF878787; + disabled=0xFF6D6D6D + } + } + } + } + this.toolbars_right = { + [0] = { + tips = "帮助"; + text='\uE7B0'; + font = LOGFONT(h=this.ico_size;name='iconfont'); + style = { + background={}; + foreground={}; + color={ + active=0xFF999999; + default=0xFF878787; + disabled=0xFF6D6D6D + } + } + }; + } + this.setStyle = function(cls, style, sameBgColor){ + if(sameBgColor){ + style.background.default = 0x00000000; + style.foreground.hover = ..color.argb(0,0,0,20); + style.foreground.active = ..color.argb(0,0,0,40); + } + winform[cls].skin(style); + }; + this.setTipCtrl = function(winform, side, cls, index){ + this.balloonTipCtrl[index] = ..win.ui.tooltip.tracking(winform,false); + winform[cls].onMouseEnter = function(wParam,lParam){ + var x,y,cx,cy = winform[cls].getPos(true); + if(side == 0){ + this.balloonTipCtrl[index].setText(this.toolbars_left[index].tips).trackPopup(true,x+20,y+cy ); + } + elseif(side == 1){ + this.balloonTipCtrl[index].setText(this.toolbars_right[index].tips).trackPopup(true,x+20,y+cy ); + } + } + winform[cls].onMouseLeave = function(wParam,lParam){ + this.balloonTipCtrl[index].trackPopup(false); + } + }; + this.init = function(){ + for(i=1; #this.toolbars_left;1){ + winform.addCtrl( + ['plus_left'+i] = { + cls = "plus"; + left = (i - 1) * (this.ico_width + this.ico_margin) + this.toolbar_padding_lr; + top = winform.top + 2; + right = (i - 1) * (this.ico_width + this.ico_margin) + this.ico_width + this.toolbar_padding_lr; + bottom = this.ico_width+2; + border = {radius=5;color=-1;width=2}; + text = this.toolbars_left[i].text; + font = this.toolbars_left[i].font; + textPadding = {top = 3}; + transparent = 1; + iconText="t"; + dl=1;dt=1;z=2+i + }; + ) + if(i == 5 || i == 6){ + this.setStyle('plus_left'+i, this.toolbars_left[i].style, false); + } + else { + this.setStyle('plus_left'+i, this.toolbars_left[i].style, true); + } + this.setTipCtrl(winform, 0, 'plus_left'+i, i); + } + for(i=1; #this.toolbars_right;1){ + var plus_l = winform.right - i * (this.ico_width + this.ico_margin) - this.toolbar_padding_lr; + var plus_r = winform.right - (i - 1) * (this.ico_width + this.ico_margin) - this.toolbar_padding_lr; + winform.addCtrl( + ['plus_right'+i] = { + cls = "plus"; + left = plus_l; + top = winform.top + 2; + right = plus_r; + bottom = this.ico_width+2; + border = {radius=5;color=-1;width=2}; + text = this.toolbars_right[i].text; + font = this.toolbars_right[i].font; + textPadding = {top = 3}; + transparent = 1; + dr=1;dt=1;z=2+i+#this.toolbars_left + }; + ) + if(i <= 3){ + this.setStyle('plus_right'+i, this.toolbars_right[i].style, false); + } + else { + this.setStyle('plus_right'+i, this.toolbars_right[i].style, true); + } + this.setTipCtrl(winform, 1, 'plus_right'+i, i); + } + }; + this.init(); + }; + setCommandFunc = function(side, idx, func){ + select(side) { + case 0 { + if (idx > 0 and idx <= #this.toolbars_left) { + var ctrl = winform['plus_left'+idx]; + winform['plus_left'+idx].oncommand = func(ctrl); + } + else { + return false; + } + } + case 1 { + if (idx > 0 and idx <= #this.toolbars_right) { + var ctrl = winform['plus_right'+idx]; + winform['plus_right'+idx].oncommand = func(ctrl); + } + else { + return false; + } + } + else { + return false; + } + } + }; + setRightClickFunc = function(side, idx, func){ + select(side) { + case 0 { + if (idx > 0 and idx <= #this.toolbars_left) { + var ctrl = winform['plus_left'+idx]; + winform['plus_left'+idx].wndproc = function(hwnd,message,wParam,lParam){ + if (message == 0x205/*_WM_RBUTTONUP*/) { + func(ctrl); + } + } + } + else { + return false; + } + } + case 1 { + if (idx > 0 and idx <= #this.toolbars_right) { + var ctrl = winform['plus_right'+idx]; + winform['plus_right'+idx].wndproc = function(hwnd,message,wParam,lParam){ + if (message == 0x205/*_WM_RBUTTONUP*/) { + func(ctrl); + } + } + } + else { + return false; + } + } + else { + return false; + } + } + } + disabled = function(side, idx, status){ + select(side) { + case 0 { + if (idx > 0 and idx <= #this.toolbars_left) { + winform['plus_left'+idx].disabled = status; + } + else { + return false; + } + } + case 1 { + if (idx > 0 and idx <= #this.toolbars_right) { + winform['plus_right'+idx].disabled = status; + } + else { + return false; + } + } + else { + return false; + } + } + }; +} + diff --git a/lib/teUtils.aardio b/lib/teUtils.aardio new file mode 100644 index 0000000..4bedd6c --- /dev/null +++ b/lib/teUtils.aardio @@ -0,0 +1,178 @@ +//teUtils 表格文件处理 +namespace teUtils; +import io; +import fsys.dlg; +import fsys.codepage; + +var currentFilePath = null; + +setCurFilePath = function(path){ + currentFilePath = path; +} + +getCurFilePath = function(){ + return currentFilePath; +} + +generateColFields = function(limit){ + var combinations = {}; + letters = {}; + count = 0; + for(i=65;90;1){ + if(count >= limit){ + break; + } + ..table.push(combinations, ..string.pack(i)) + ..table.push(letters, ..string.pack(i)) + count += 1; + } + + for(_,letter1 in letters){outer_loop: + for(_,letter2 in letters){ + if(count >= limit){ + break outer_loop; + } + ..table.push(combinations, letter1 + letter2) + count += 1; + } + } + return combinations; +} + +initFlexCellShow = function(fc){ + var col_sum = 100; + var row_sum = 100; + var t = {}; + t.fields = {}; + t.fields = ..table.append(t.fields, generateColFields(col_sum)); + for(i=1; row_sum; 1){ + var row = {}; + for (j=1; #t.fields; 1) { + row[t.fields[j]] = ""; + } + ..table.push(t, row); + } + fc.AutoRedraw = false; + fc.setTable(t, t.fields, t.fields); + fc.column(0).AutoFit(); + fc.AutoRedraw = true; + fc.Refresh(); +} + +insertFlexCellNewRow = function(flexcell, start_row, add_row_count, colCount){ + var t = {}; + t.fields = {}; + t.fields = ..table.append(t.fields, generateColFields(colCount)); + for(i=1; add_row_count; 1){ + var row = {}; + for (j=1; #t.fields; 1) { + row[t.fields[j]] = ""; + } + ..table.push(t, row); + } + flexcell.insertRow(start_row/*插入行号*/, t/*插入行的数据表*/); +} + +insertFlexCellNewCol = function(flexcell, start_col, add_col_count, colCount){ + var new_fields = generateColFields(colCount + add_col_count); + flexcell.insertCol(start_col, add_col_count, new_fields); +} + +getTxtTableData = function(reference_row = 2){ + var fileName = ..fsys.dlg.open("txt file(*.txt)|*.txt|db file(*.db)|*.db|sqlite file(*.sqlite)|*.sqlite|","打开","./"); + + if(!fileName){ + return; + } + + setCurFilePath(fileName); + + var str = ..fsys.codepage.load(fileName,"UTF-16LE") + + var row_count = 0; + var col_count = 0; + for i in ..string.lines(str,'\r\n','\t'){ + row_count += 1; + if(row_count == reference_row){ + for(n=1;#i;1){ + if(..string.trim(i[n]) == ""){ + break; + } + col_count += 1; + } + break; + } + } + + var t = {}; + t.fields = {}; + t.fields = ..table.append(t.fields, generateColFields(col_count)); + var temp_cur_line = 0; + for i in ..string.lines(str,'\r\n','\t', col_count){ + var col_values = {}; + var isEmptyLine = false; + temp_cur_line += 1; + for (j=1; col_count; 1) { + if(#i == 0){ + isEmptyLine = true; + break; + } + + if(i[j] == null){ + i[j] = ""; + } + + if(j == col_count){//去除每一行末尾多余的\t + i[j] = ..string.replace(i[j], '\t',""); + } + + col_values[t.fields[j]] = i[j]; + } + if (!isEmptyLine) { + ..table.push(t, col_values); + } + } + return t; +} + +var writeTxtFile = function(file_path, vlist_data){ + var file = ..io.open(file_path,"w"); + for(i=1;#vlist_data;1){ + var arrLine = {}; + for(j=1;#vlist_data.fields;1){ + ..table.push(arrLine, vlist_data[i][vlist_data.fields[j]]); + } + + str = ..string.join(arrLine, '\t', 1, #vlist_data.fields); + str = str ++ '\t';// 每行最后一列之后添加一个\t + + if(i != #vlist_data){ + file.write(str,'\n'); + } + else { + file.write(str); + } + } + file.close(); + + var str2 = ..fsys.codepage.load(file_path,"UTF-8") + ..fsys.codepage.save(file_path,str2,"UTF-16LE") +} + +saveTxtTableData = function(vlist_data){ + var curFilePath = getCurFilePath(); + if(!curFilePath){ + return; + } + writeTxtFile(curFilePath, vlist_data); +} + +saveAsTxtTableData = function(vlist_data){ + var newFilePath = ..fsys.dlg.saveOp("txt file(*.txt)|*.txt|db file(*.db)|*.db|sqlite file(*.sqlite)|*.sqlite|","保存","./"); + if(!newFilePath){ + return; + } + setCurFilePath(newFilePath); + writeTxtFile(newFilePath, vlist_data); +} + diff --git a/main.aardio b/main.aardio new file mode 100644 index 0000000..44fd94e --- /dev/null +++ b/main.aardio @@ -0,0 +1,442 @@ +//RUNAS +import win; +import win.ui; +import win.ui.mask; +import win.ui.toolbar; +import win.ui.accelerator; +import fonts.fontAwesome; +import console; +import config; +import flexcell; +import teUtils; +import teMenu; +/*DSG{{*/ +var mainForm = win.form(text="TabEditor--";right=1399;bottom=799;bgcolor=16777215) +mainForm.add( +custom={cls="custom";text="自定义控件";left=0;top=36;right=1400;bottom=800;ah=1;aw=1;bgcolor=12639424;db=1;dl=1;dr=1;dt=1;z=2}; +plus={cls="plus";left=0;top=0;right=1400;bottom=36;bgcolor=16777215;border={left=1;top=1;right=1;color=-6250332};clipBk=false;clipch=1;dl=1;dr=1;dt=1;font=LOGFONT(h=-18);forecolor=16777215;notify=1;repeat="stretch";z=1} +) +/*}}*/ + +//整理内存 +import process; +import raw; +EmptyWorkingSet := ::Psapi.api("EmptyWorkingSet","bool(pointer hanld)") +mainForm.release = function(){ + var hanld = process.OpenProcess(0x1f0fff,false,process.getId()) + EmptyWorkingSet(hanld) + raw.closehandle(hanld) +} +var frmChild = mainForm.loadForm("\dlg\searchForm.aardio"); + +//菜单控件初始化 +g_teMenus = teMenu.TeMenu(mainForm.plus); + +//flexcell控件初始化 +g_flexcell = flexcell.FlexGrid(mainForm.custom,,,1); +g_flexcell.setTheme(flexcell.FlexGrid.themeWps); +g_flexcell.isModified = false; +g_flexcell.ShowResizeTip = true; +teUtils.initFlexCellShow(g_flexcell); +g_flexcell.AllowFilter = false; + +var showModifyStyle = function(){ + g_flexcell.isModified = true; + if(teUtils.getCurFilePath() == null){ + g_teMenus.disabled(0, 3, true); + } + else { + g_teMenus.disabled(0, 3, false); + } + g_teMenus.disabled(0, 4, false); + mainForm.text = string.replace(mainForm.text, '[ ][\*]', ""); + mainForm.text += " *"; +} + +var showUnmodifyStyle = function(){ + g_flexcell.isModified = false; + g_teMenus.disabled(0, 3, true); + g_teMenus.disabled(0, 4, true); + mainForm.text = string.replace(mainForm.text, '[ ][\*]', ""); +} +showUnmodifyStyle(); + +/*菜单{{*/ +//menu-新建 +g_teMenus.newFile = function(ctrl){ + return function(){ + var curRow = g_flexcell.ActiveCell().Row; + var curCol = g_flexcell.ActiveCell().Col; + g_flexcell.FrozenRows = 0; + g_flexcell.FrozenCols = 0; + g_flexcell.range(0,0,0,g_flexcell.colCount).ClearBackColor(); + g_flexcell.range(0,0,g_flexcell.rowCount,0).ClearBackColor(); + + g_flexcell.isModified = true;//避免 ModifyStyle, UnmodifyStyle 切换闪烁 + g_flexcell.clear(); + teUtils.initFlexCellShow(g_flexcell); + showUnmodifyStyle(); + } +} + +//menu-打开 +g_teMenus.openFile = function(ctrl){ + return function(){ + var curRow = g_flexcell.ActiveCell().Row; + var curCol = g_flexcell.ActiveCell().Col; + g_flexcell.FrozenRows = 0; + g_flexcell.FrozenCols = 0; + g_flexcell.range(0,0,0,g_flexcell.colCount).ClearBackColor(); + g_flexcell.range(0,0,g_flexcell.rowCount,0).ClearBackColor(); + var frmMask = win.ui.mask(mainForm,true) + frmMask.show(true); + var t = teUtils.getTxtTableData(); + if(t){ + g_flexcell.AutoRedraw = false; + g_flexcell.setTable(t,,t.fields); + g_flexcell.column(0).AutoFit(); + g_flexcell.AutoRedraw = true; + g_flexcell.Refresh(); + } + frmMask.show(false); + showModifyStyle(); + } +} + +//menu-保存 +g_teMenus.saveFile = function(ctrl){ + return function(){ + teUtils.saveTxtTableData(g_flexcell.getVlistData()); + showUnmodifyStyle(); + } +} + +//menu-另存为 +g_teMenus.saveAsFile = function(ctrl){ + return function(){ + teUtils.saveAsTxtTableData(g_flexcell.getVlistData()); + showUnmodifyStyle(); + } +} + +//menu-设置背景色 +g_teMenus.setBackground = function(ctrl){ + return function(){ + g_flexcell.selection().BackColor = color.rgbReverse(ctrl.backgroundColor); + } +} +import win.ui.ctrl.pick; +g_teMenus.setBackgroundRClick = function(ctrl){ + var colorPick = win.ui.ctrl.pick(mainForm); + colorPick.onColorChange = function(clr){ + ctrl.skin({ + background={ + active=clr; + default=clr; + hover=clr + }; + foreground={ + hover = color.argb(0,0,0,20); + active = color.argb(0,0,0,40) + }; + color={ + active=0xE8000000; + default=0xFF000000; + disabled=0xFF6D6D6D + } + }) + } + colorPick.setColor(ctrl.backgroundColor); + var x,y = win.getMessagePos(); + colorPick.setPos(x,y); + colorPick.doModal(); +} + +//menu-设置前景色 +g_teMenus.setForeground = function(ctrl){ + return function(){ + g_flexcell.selection().ForeColor = color.rgbReverse(ctrl.argbColor); + } +} +g_teMenus.setForegroundRClick = function(ctrl){ + var colorPick = win.ui.ctrl.pick(mainForm); + colorPick.onColorChange = function(clr){ + ctrl.skin({ + background={}; + foreground={ + hover = color.argb(0,0,0,20); + active = color.argb(0,0,0,40) + }; + color={ + active=clr; + default=clr; + disabled=clr + } + }) + } + colorPick.setColor(ctrl.argbColor); + var x,y = win.getMessagePos(); + colorPick.setPos(x,y); + colorPick.doModal(); +} + +class FlexFreeeItem { + bool change = false; + int start_row = 0; + int start_col = 0; + int end_row = 0; + int end_col = 0; +} +var flexFreeeCol = FlexFreeeItem(); +var flexFreeeRow = FlexFreeeItem(); + +var setFlexFreee = function(freee){ + if(flexFreeeCol.change){ + g_flexcell.range(flexFreeeCol.start_row, + flexFreeeCol.start_col, + flexFreeeCol.end_row, + flexFreeeCol.end_col).setBorders(2/*_FlexCell2_Edge_Right*/, 0/*_FlexCell2_BorderStyle_cellFlat*/ ); + } + if(flexFreeeRow.change){ + g_flexcell.range(flexFreeeRow.start_row, + flexFreeeRow.start_col, + flexFreeeRow.end_row, + flexFreeeRow.end_col).setBorders(8/*_FlexCell2_Edge_Bottom*/ , 0/*_FlexCell2_BorderStyle_cellFlat*/ ); + } + if(!freee){return true;} + g_flexcell.range(flexFreeeCol.start_row, flexFreeeCol.start_col, flexFreeeCol.end_row, flexFreeeCol.end_col + ).setBorders(2/*_FlexCell2_Edge_Right*/, 1/*_FlexCell2_BorderStyle_cellFlat*/); + g_flexcell.range(flexFreeeRow.start_row, flexFreeeRow.start_col, flexFreeeRow.end_row, flexFreeeRow.end_col + ).setBorders(8/*_FlexCell2_Edge_Bottom*/ , 1/*_FlexCell2_BorderStyle_cellFlat*/);; +} + +//menu-冻结行&列 +g_teMenus.freeeRowCol = function(ctrl){ + return function(){ + var curRow = g_flexcell.ActiveCell().Row; + var curCol = g_flexcell.ActiveCell().Col; + + setFlexFreee(false); + + //绘制冻结列的右侧边框线 + flexFreeeCol.change = true; + flexFreeeCol.start_row = curRow+1; + flexFreeeCol.start_col = curCol; + flexFreeeCol.end_row = g_flexcell.rowCount; + flexFreeeCol.end_col = curCol; + + //绘制冻结行的底部边框线 + flexFreeeRow.change = true; + flexFreeeRow.start_row = curRow; + flexFreeeRow.start_col = curCol+1; + flexFreeeRow.end_row = curRow; + flexFreeeRow.end_col = g_flexcell.colCount; + + setFlexFreee(true); + + //冻结行 + g_flexcell.FrozenRows = curRow; + //冻结列 + g_flexcell.FrozenCols = curCol; + } +} + +//menu-取消冻结 +g_teMenus.unfreeeRowCol = function(ctrl){ + return function(){ + setFlexFreee(false); + g_flexcell.FrozenRows = 0; + g_flexcell.FrozenCols = 0; + } +} + +//menu-导出 Sqlite3 +g_teMenus.exportSqlite3 = function(ctrl){ + return function(){ + } +} + +//menu-导出 txt +g_teMenus.exportTxt = function(ctrl){ + return function(){ + } +} + +//menu-关于 +g_teMenus.showAbout = function(ctrl){ + return function(){ + //g_flexcell.AboutBox(); + } +} + +//menu-帮助 +g_teMenus.showHelp = function(ctrl){ + return function(){ + mainForm.release(); + } +} + +g_teMenus.setCommandFunc(0, 1, g_teMenus.newFile); +g_teMenus.setCommandFunc(0, 2, g_teMenus.openFile); +g_teMenus.setCommandFunc(0, 3, g_teMenus.saveFile); +g_teMenus.setCommandFunc(0, 4, g_teMenus.saveAsFile); +g_teMenus.setCommandFunc(0, 5, g_teMenus.setBackground); +g_teMenus.setRightClickFunc(0, 5, g_teMenus.setBackgroundRClick); +g_teMenus.setCommandFunc(0, 6, g_teMenus.setForeground); +g_teMenus.setRightClickFunc(0, 6, g_teMenus.setForegroundRClick); +g_teMenus.setCommandFunc(0, 7, g_teMenus.freeeRowCol); +g_teMenus.setCommandFunc(0, 8, g_teMenus.unfreeeRowCol); +g_teMenus.setCommandFunc(0, 9, g_teMenus.exportSqlite3); +g_teMenus.setCommandFunc(0, 10, g_teMenus.exportTxt); +g_teMenus.setCommandFunc(0, 11, g_teMenus.showAbout); +g_teMenus.setCommandFunc(1, 1, g_teMenus.showHelp); +/*}}*/ + +/*消息回调{{*/ +g_flexcell.onCellChange = function(Row,Col){ + if(!g_flexcell.isModified){ + showModifyStyle(); + } + g_flexcell.isModified = true; +} + +g_flexcell.onClick = function(Row,Col){ + var row,col=owner.toRelativeRow(Row),owner.toRelativeCol(Col); +} + +g_flexcell.onMouseUp = function(Button , Shift, x, y){ + /*** 鼠标按键放开。 + Button 当前按下的鼠标按钮:1:左按钮;2:右按钮;4:中间按钮;同时按下时执行位或操作。 + Shift 功能键状态:1:SHIFT;2:CTRL;4:ALT;同时按下时执行位或操作。 + x,y 鼠标指针当前位置 ***/ + if(Button == 2){ + g_flexcell.cell(g_flexcell.MouseRow,g_flexcell.MouseCol).Select(); + } +} +/*}}*/ + +//搜索窗口 +var openSearchForm = function(){ + frmChild.show(); +} + +var accelerator = win.ui.accelerator({ + { + ctrl = true; vkey = 'F'#; + oncommand = function() openSearchForm(); + }; +},mainForm ); + +pre_searched_row = null; +pre_searched_col = null; +research_flag = true; +searchNextContent = function(data, firstRow, firstCol, lastRow, lastCol, isRangeSearch, selFirstRow, selFirstCol, str){ + if(isRangeSearch){// 从一个范围开始搜索 + //console.dump("从一个范围开始搜索"); + var tempRow = firstRow; + var tempCol = firstCol; + firstRow = pre_searched_row != null and research_flag ? pre_searched_row : firstRow; + firstCol = pre_searched_col != null and research_flag ? pre_searched_col : firstCol; + for i,v in table.eachIndex(data){ + if(i < firstRow or i > lastRow){ + continue; + } + for i2,v2 in table.eachIndex(data.fields){ + //console.debug("当前搜索行列:", i, i2); + if(i2 < firstCol or i2 > lastCol){ + continue; + } + if (i == pre_searched_row and i2 == pre_searched_col){ + continue; + } + if(v[v2] == str){ + research_flag = true; + pre_searched_row = i; + pre_searched_col = i2; + return i, i2; + } + } + firstCol = tempRow; + firstCol = tempCol; + } + // 搜不到了,重头搜索 + if(research_flag){ + research_flag = false; + row, col = searchNextContent(data, selFirstRow, selFirstCol, lastRow, lastCol, isRangeSearch, selFirstRow, selFirstCol, str); + return row, col; + } + research_flag = true; + } + else {// 从一个点开始搜索 + //console.dump("从一个点开始搜索"); + for i,v in table.eachIndex(data){ + if(i < firstRow){ + continue; + } + for i2,v2 in table.eachIndex(data.fields){ + //console.debug("当前搜索行列:", i, i2); + if(i2 < firstCol){ + continue + } + if(i == firstRow and i2 == firstCol){ + continue; + } + if(v[v2] == str){ + research_flag = true; + return i, i2; + } + } + firstCol = 1; + } + // 搜不到了,重头搜索 + if(research_flag){ + research_flag = false; + //console.dump("搜不到了,重头搜索"); + row, col = searchNextContent(data, 1, 1, 1, 1, isRangeSearch, selFirstRow, selFirstCol, str); + return row, col; + } + research_flag = true; + } +} + +subscribe("search_prev",function(...){ + console.dump(...); +} ) + + +subscribe("search_next",function(...){ + var curSelection = g_flexcell.selection(); + var firstRow = curSelection.FirstRow; + var firstCol = curSelection.FirstCol; + var lastRow = curSelection.LastRow; + var lastCol = curSelection.LastCol; + var isRangeSearch = false; + if(firstRow != lastRow or firstCol != lastCol){ + isRangeSearch = true; + } + var row, col = searchNextContent(g_flexcell.getVlistData(), firstRow, firstCol, lastRow, lastCol, isRangeSearch, firstRow, firstCol, ...); + //console.dump(row, col); + if(row != null && col != null){ + if(isRangeSearch){ + if(pre_searched_row != null and pre_searched_col != null){ + g_flexcell.Cell(pre_searched_row, pre_searched_col).BackColor = 0xff00ff; + } + g_flexcell.Cell(row, col).EnsureVisible(); + } + else { + pre_searched_row = null; + pre_searched_col = null; + g_flexcell.cell(row, col).Select(); + } + } + else { + frmChild.msgbox("找不到正在搜索的数据") + } + curSelection.release(); +} ) + +import win.ui.minmax; +win.ui.minmax(mainForm,860,400); + +mainForm.show(); +return win.loopMessage(); diff --git a/res/app.ico b/res/app.ico new file mode 100644 index 0000000..e9d401a Binary files /dev/null and b/res/app.ico differ diff --git a/res/iconfont.ttf b/res/iconfont.ttf new file mode 100644 index 0000000..568a981 Binary files /dev/null and b/res/iconfont.ttf differ