### 附录：关于TableLayout

TableLayout 和 Html中的 Table 很相似，用于方便地书写布局，例如：

    <TableLayout y=".bottom+2" width="100%">
     <col width="20%"/>
     <col width="15%"/>
     <col width=".1"/>
     <col width="15%"/>
     <col width="20%"/>
     <col width="20%"/>
     <tr height="15"/>
     <tr height="21">
      <td><input id="id" LeftText="单证号: " width="2" nullAble="false"/></td>
      <td/>
      <td/>
      <td><input id="dt" LeftText="发货日期: " width="2" defaultvalue="=now()" datatype="date"/></td>
     </tr>
     <tr height="4"/>
     <tr height="21">
      <td><input id="rate" LeftText="汇率: " width="2" editmask="#,###.0000" datatype="double" /></td>
      <td/>
      <td/>
      <td><input id="cust" LeftText="客户: " width="2" type="droptreelist" droplistID="customer"/></td>
     </tr>
    </TableLayout>

可见，使用了TableLayout后，就不需要为每个对象书写令人讨厌的 x、x、x1、x2 等坐标信息了，并且位置容易辨认，便于修改。
TableLayout规则如下：
1.列宽在<col>中统一定义;
2.行高在<tr>中统一定义;
3.只能在<td>...</td>中嵌入对象;
4.内嵌对象将自动拉伸，在所在单元格满格显示;
5.内嵌对象 width、Height 属性的含义表示跨越的列数和行数;
6.除了 width、Height 和<Line>的x1,x2,y1,y2，内嵌对象其它坐标定位属性无效;
7.内嵌 input 对象的 leftSize、editSize 含义表示跨越的列数;
8.如果内嵌对象有leftText、且leftSize和editSize未定义时，如果width=2, 那么左列分配给leftText，右列分配给输入控件;
9.如果内嵌对象同上，当 width=3 时, 中间列自动作分隔用;
10.一个 Freeform 中允许有多个 TableLayout, 且支持 TableLayout 层层嵌套;
11.未包含嵌入对象的右侧的 <td> 可以省略;