FlexCell控件例子.docx
《FlexCell控件例子.docx》由会员分享,可在线阅读,更多相关《FlexCell控件例子.docx(7页珍藏版)》请在冰豆网上搜索。
FlexCell控件例子
FlexCell控件例子
FlexCell控件例子
FlexCell控件另一个比较强的特点是支持多种文件格式,这节我们来正式开始使用该控件。
我做了个类似FlexCell控件自带演示程序的界面,使用CVI来使用实现该控件的所有操作。
1、添加菜单
从本节开始,我们将全面进行该控件的操作。
菜单的制作方法我这里就不再说明,不知道的朋友可以参考我的视频教程,其中有菜单制作的所有过程。
2、格式说明
FlexCell控件支持自己格式的导入导出(.Cel)。
XML文件的导入。
EXCEL格式的导出,HTML格式的导出,XML格式的导出,CSV文件的导出。
可以发现控件不能支持读取EXECL文件是一个比较遗憾的地方。
所有的这些功能控件都已经为我们封装好了函数,无需我们CVI来操心。
//新建文件
voidCVICALLBACKNewFile(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
intRow,Colunm;
//得到当前行列数
FlexCell__GridGetRows(FlexTable,NULL,&Row);
FlexCell__GridGetCols(FlexTable,NULL,&Colunm);
FlexCell__GridNewFile(FlexTable,NULL,NULL);
//设置行列数
FlexCell__GridSetRows(FlexTable,NULL,Row);
FlexCell__GridSetCols(FlexTable,NULL,Colunm);
}
函数名称大家可以自己修改。
这个函数比较有用,当你的控件已经进行了大量的读取和赋值后此时如果要清除所有单元格中的数据我们上一节使用过这种方法:
//设置为100行
FlexCell__GridSetRows(FlexTable,NULL,101);
//选择处理的行列范围
FlexCell__GridRange(FlexTable,NULL,1,1,100,10,FlexTableRange);
//删除现有行
FlexCell__RangeDeleteByRow(FlexTableRange,NULL);
//添加新的100行
FlexCell__GridSetRows(FlexTable,NULL,101);
我们先心中当前所有的单元格,将它们删除,然后再添加同样的行数。
这个方法在行列数多时会极大影响速度。
现在我们使用控件提供的新建文件的方法来实现。
FlexCell__GridNewFile(FlexTable,NULL,NULL);这个函数不需要任何其它参数,给出控件的CA对象句柄即可。
此时大家可以看到控件马上恢复为添加控件时初始状态。
但是这样做会自己恢复为控件默认的5列10行。
这和我们在CVI定义的100行10列不一样。
每个用户也都有自己的初始数量。
因此,我们在使用该函数前先得到下目前控件的行列数量,在新建文件后马上设置回来。
这里的新建文件和WORD中新建文件是一样的,它之所以就像清除所有单元格是因为该控件是一个单文档界面,所以新建文件就等于清除了现在的内容直接显示为一个新的表格。
在多文档形式中这样新建会出现一个新的窗口,当前的窗口内容没有变化。
//打开文件
voidCVICALLBACKOpenedFile(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
FlexCell__GridOpenFile(FlexTable,NULL,"",NULL);
}
该控件给我们高度封装了很多函数,我们后面使用的函数都是如此,这个打开文件的函数也不给任何参数,给了一个空字符串,函数定义如果给的是空字符串函数会自己先调用API的打开文件对话框(CVI中函数为FileSelectPopup)电你选择好需要打开的文件后函数自己处理将你选中的文件打开。
省去了我们CVI打开文件的很多代码。
当然你可以直接给函数传递一个文件路径“c:
\\1.txt"。
注意该函数打开的文件只能是CEL文件(控件自己的格式)。
且为十六进制加密文件。
一般不能破解。
//保存文件
voidCVICALLBACKSaveFile(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
char*FileName;
//得到文件路径
FlexCell__GridGetFilename(FlexTable,NULL,&FileName);
if(strlen(FileName)==0)//如果是新文件
{
FlexCell__GridSaveFile(FlexTable,NULL,"",NULL);
}
else//如果是打开的文件
{
FlexCell__GridSaveFile(FlexTable,NULL,FileName,NULL);
}
}
保存文件也可以直接使用一个函数,传递空字符串,函数会先打开一文件保存对话框。
这里我们不能这样使用,因为我们有两种情况:
一个新文件、一个打开的文件。
所以要分别对待。
对于新文件我们可以直接使用FlexCell__GridSaveFile(FlexTable,NULL,"",NULL);对于已经打开的文件我们应该直接保存在该文件中。
FlexCell__GridSaveFile(FlexTable,NULL,FileName,NULL);控件为我们提供了一个函数来得到上次打开或保存的文件路径FlexCell__GridGetFilename(FlexTable,NULL,&FileName);如果我们打开了一个"c:
\1.txt"这个字符串会保存到GridGetFilename中。
如果新建的文件,就返回空字符串。
//另存为文件
voidCVICALLBACKSaveAsFile(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
FlexCell__GridSaveFile(FlexTable,NULL,"",NULL);
}
//导入XML文件
voidCVICALLBACKImportFile(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
FlexCell__GridLoadFromXML(FlexTable,NULL,"",NULL);
}
//导出EXCEL文件
voidCVICALLBACKExportXLS(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
FlexCell__GridExportToExcel(FlexTable,NULL,"",VTRUE,VTRUE,NULL);
}
//导出CSV文件
voidCVICALLBACKExportCSV(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
FlexCell__GridExportToCSV(FlexTable,NULL,"",VFALSE,VFALSE,NULL);
}
//导出XML文件
voidCVICALLBACKExportXML(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
FlexCell__GridExportToXML(FlexTable,NULL,"",NULL);
}
//导出HTML文件
voidCVICALLBACKExportHTML(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
FlexCell__GridExportToHTML(FlexTable,NULL,"",NULL);
}
这些函数同样不需要给任何其它参数,传递空字符串,函数自己打开一个对话框选择文件。
//打印设置
voidCVICALLBACKPageSet(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
FlexCell__GridPrintDialog(FlexTable,NULL,NULL);
}
//打印预览
voidCVICALLBACKPrintView(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
FlexCell__GridPrintPreview(FlexTable,NULL,CA_DEFAULT_VAL);
}
//打印
voidCVICALLBACKPrintOut(intmenuBar,intmenuItem,void*callbackData,
intpanel)
{
FlexCell__GridDirectPrint(FlexTable,NULL,CA_DEFAULT_VAL,NULL);
}
我们WORD中常用的打印功能也这样使用,大家知道在CVI中实现这样的功能不是一行函数就能完成的。
现在大家就可以编译程序,来使