### Supcan FreeForm组件

Supcan FreeForm组件是插件/加载项的一个功能组件，和Supcan TreeList有类似之处，但是一次只显示一条记录，且显示方式也不是表格，而是自由格式。
在企业应用中，大量的表单通常是Master-Detail格式，即表头和表体两部分，表体通常是Grid，而表头就是自由格式, Supcan FreeForm 加 Supcan TreeList 就能轻松实现这类表单的需求。
Supcan FreeForm封装了和TreeList类似的富输入功能，如输入掩码、各种下拉、各式按钮、表达式等等，大大减少了纯页面的js程序量。
Supcan FreeForm支持2种布局： 基于 TableLayout 辅助的布局, 和以绝对/相对坐标定位的布局。TableLayout 布局类似 Html 的 Table 布局，输入控件被固定在网格内，其语法请参见《Freeform XML文档规范》。硕正公司还提供了基于 TableLayout 的可视化设计器，方便了 Freeform 的书写、开发.
1.创建实例

Supcan FreeForm组件是通过插件/加载项创建的，所以应该用使用指南 \ 页面语法中叙述的插件/加载项的页面创建语法创建， <Object>中的某几个Param参数规则如下:

    <Object ...(略)>
    <Param name="CtlName" value="BCV1.FreeForm">　　//固定
    <Param name="ZipUrl" value="BCV1.bin">	　　//也可以是绝对URL
    <Param name="CtlPara" value="Border=single; bgColor=white">	//例子
    ...

如果页面是直接调用dynaload.js，那么可能就是这样:

    insertFreeForm('AF', 'Border=single; bgColor=white')

CtlPara参数决定了如何在页面上展现Supcan FreeForm实例，在上面的例子中，参数串中可包含多个子串，子串间以 "；" 分隔。
子串的名值对的规范如下：

子串名 | 含义 | 可用值 | 默认值
Border | 边界 | 1.none - 无边界 2.single - 单线条边界 3.3dLower(或3d) - 3D凹进边界 4.3dRaise - 3D凸起边界 | single
BorderColor | 边界色 | 颜色，仅用于Border=single | #7f9db9
Hue | 强制更改色调 | LightGray - 浅灰色 Caramel - 焦糖色 Lilian - 百合花色 Lividity - 青黑色 注：更改结果将保存至系统文件，永久有效. | (无)
isUseContextFont | 是否采用页面上下文字体 注：仅对IE有效 | true/false | true
bgColor 或BackColor | 背景色 | 颜色串，也可以是以逗号分隔的多个颜色串 | 空，表示采用页面上下文背景色
workMode | 当前工作模式 | runtime - 普通的发布运行时; designTime - 设计时. 注：在designTime时, TableLayout将显示表格虚线. | runtime
EventLog | 事件日志 | 文件名，建议后缀是txt, 不必带路径，系统将自动在 BC 目录下创建. 该文件能自动记录本组件实例的所有事件, 用于程序调试. 注：正式运行时请不要使用，因为频繁读写磁盘会导致性能下降. | 无
FuncLog | 函数调用日志 | 文件名，建议后缀是txt, 不必带路径，系统将自动在 BC 目录下创建. 该文件能自动记录本组件实例被调用的所有函数, 用于程序调试. 注：正式运行时请不要使用，因为频繁读写磁盘会导致性能下降. | 无
FuncParaChars | 函数日志中参数最大字数 | 数字，当启用函数日志时，函数的参数最多保留字数. | 128
FuncReturnChars | 函数日志中返回值最大字数 | 数字，当启用函数日志时，函数的返回值最多保留字数. | 0

2.函数

Supcan FreeForm的函数是通过插件/加载项的 func( string funcname, string paras ) 函数间接调用的，Supcan FreeForm组件的可用funcname及用途说明如下:
3.扩展函数

普通的扩展函数使用方法与Supcan Treelist相同，请参见Treelist的扩展函数。
对于嵌入的普通的大粒度组件(即<Component>)，扩展函数还有另一种使用方法，函数名可以直接写成 "ID号.函数名" 这样的格式，例如：

     AF.func("Te1.Load", xml);   // Te1是内部Treelist的ID

与如下常规用法效果一样：

     var h = AF.func("GetHandle", "Te1");  //先取得内嵌Treelist  Te1的句柄
     AF.func(h + "Load", xml);

在Freeform的演示页“20.Freeform框架”中有这样的实例，请参考。
对于选项卡(Tab)中嵌入的大粒度组件(即<Component>)，扩展函数的函数名可以直接写成 "Tab的ID号.ID号.函数名" 这样的格式，例如：

     AF.func("Tab1.T1.Load", xml);   // Tab1是选项卡的ID号，t1是Tab1的内部Treelist的ID

对应的XML结构如下：
当然，这样写也可以：

     var h = AF.func("GetHandle", "Tab1.t1");  //先取得内嵌Treelist  T1的句柄
     AF.func(h + "Load", xml);