C++ Bulider之ActiveX控件之TF1Book的使用

    这段时间项目中用到了报表控件TF1Book控件,感觉用起来特别费劲,推荐不要用这个控件。一个原因就是这个控件的帮助文档特别少,在网上找到的例子都是delphi的,还好delphi与C++Bulider的函数大多数都相同,要不然一点帮助信息都难找...用起来也纠结死了。

(1)在【工程选项】中的【组建包】下要把“与运行时组件一起编译”勾选,否则调用ActiveX的方法在运行的时候会报“未知接口”的异常

(2)使用ActiveX控件的软件拷贝到别人的电脑上与运行需要将ocx文件进行注册。具体注册代码如下:

        HINSTANCE hLib=LoadLibrary("C:\\a.ocx");//指定要注册的ocx文件的路径及文件名。
if (hLib==NULL)
{
return false;
}

//获取注册函数DllRegisterServer地址
FARPROC lpDllEntryPoint;
lpDllEntryPoint
= GetProcAddress(hLib,"DllRegisterServer");

//调用注册函数DllRegisterServer
if(lpDllEntryPoint==NULL)
return false;

if(FAILED((*lpDllEntryPoint)()))
{
FreeLibrary(hLib);
return false;
}
FreeLibrary(hLib);

(3)下面是一些对TF1Book控件的相关操作。

  <1>设置F1Book某一列只读

  在网上搜索找到的方法如下:

       F1Book2->EnableProtection=true;

          F1Book2->SetSelection(1,1,F1Book2->LastRow,1);

          F1Book2->SetProtection(true,true);  

但上面方法不能实现这种效果,上面方法是将整个报表保护起来,当试图要更改时就会弹出对话框。

上面方法不可行,那么可采用什么方法呢?F1Book可以设置最左端有几列的固定的,固定就是这和表格中标识列的数字1,2,3等这样,用户不可编辑,选择这个方格会将整行选中,而且当存在水平滚动条时,滚动时固定的列和1,2,3这样的数字一样不随滚动条滚动而被隐藏。

F1Book1->FixedCols=1;//第一列不能编辑了

还原

F1Book1->FixedCols=0;

  F1Book1->LeftCol=1;//使得视野中有A1

  <2>如果设置F1Book是可编辑的,那么右键双击会弹出类似excel界面的对话框,可以进行编辑(当然原先的表格直接编辑也是可以的),如果想通过编程显示此对话框 

       F1Book->AllowDesigner=true;

       F1Book->LaunchDesigner();

但应该注意的是在弹出的对话框中不能点击保存,所在会报错。

  <3>关于单元格内容的更改,如果直接修改,比方说现在在A1单元格输入,如果想使A1的值更新,要将A1的键盘焦点去除,也就是说选中其他单元格,如果不这样,比方说在表格下有个保存按钮,点击按钮A1的值还是原来的值

(4)还有个有趣的现象----对于AnsiString str=“1234”,如果这样进行运算----str[4]='\0';那么str值为"123",但如果str+="5";时,这时候调用ShowMessage,会只显示123.可能的原因在于str[4]='\0';之后,AnsiString不负责检查字符串长度是否更新,当str+="5";时,str的值相当于"123\05"所以显示出来的是123

    

posted @ 2011-09-19 18:19  小二来壶酒  阅读(1105)  评论(0编辑  收藏  举报