| 演示了事件、工具条及菜单、各式各样的按钮。请任意输入、点击按钮，感受控件所触发的页面事件：

ID: | 值: | 文字串:
选中行的整行内容(客户、城市的下拉Treelist):

| 如果您关心工具条，也可以考虑使用 Toolbar 对象，使用更为简单：

1.可查看创建上面的 Freeform 的XML描述文件freeform4.xml、下面工具条的XML描述文件freeform41.xml、 freeform42.xml；
2.在XML中，图片资源都在buttons.zip中，请注意硕正对图片的扩展URL的支持；
3.请分析源码：

    var countForFirefox=0;

    function OnReady(id)
    {
     cooper(id);
    }
    function onLoadPage( )
    {
     if($B.type == "firefox") cooper('');
    }
    function cooper(id)
    {
     if($B.type == "firefox") {
      countForFirefox++;
      if(countForFirefox != 4) return;
      id='';
     }
     if(id == 'AF' || id=='') {
      AF.func("Build", "treelist/freeform4.xml");
     }
     if(id == 'AF2' || id=='') {
      AF2.func("Build", "treelist/freeform41.xml");
      AF2.func("SetMenuItemProp", "menu1 \r\n 103 \r\n enable \r\n false");
     }
     if(id == 'AF3' || id=='') {
      AF3.func("Build", "treelist/freeform42.xml");
     }
    }

    //所有事件全部在这里：
    function OnEvent(id, Event, p1, p2, p3, p4)
    {
     var obj1 = document.getElementById('lb1');
     var obj2 = document.getElementById('lb2');
     var obj3 = document.getElementById('lb3');
     var obj4 = document.getElementById('lb4');
     if( Event == "EditChanged" || Event == "ButtonClicked" ) { //来自输入Edit、按钮
      obj1.innerHTML = p1 + (Event == "ButtonClicked" ? " (按钮)":"");
      obj2.innerHTML = AF.func("getValue", p1);	//值
      obj3.innerHTML = AF.func("getText", p1);	//显示串
      obj4.innerHTML = "";
      //可能是下拉Treelist
      var handle = AF.func("GetHandle", p1);	//取得下拉Treelist的句柄
      if(handle!="") obj4.innerHTML = getRowInfo(handle);
     }
     else if( Event == "MenuClicked") {	//来自菜单的消息
      obj1.innerHTML = p1;	//菜单项的ID号
      obj2.innerHTML = "";
      obj3.innerHTML = "";
      obj4.innerHTML = "";
     }
    }

    //js函数：显示下拉的整行内容，注意Treelist扩展函数的用法
    function getRowInfo(handle)
    {
     var Text="";
     var row  = AF.func(handle + "GetCurrentRow", "");
     var sCol = AF.func(handle + "GetNextValidCol", "");
     for(; sCol!=""; sCol=AF.func(handle + "GetNextValidCol", sCol)) {
      Text += AF.func(handle + "GetCellData", row + "\r\n" + sCol);
      Text +=", ";
     }
     return Text;
    }

4.在下面的工具条例子中，用到了 Toolbar 对象；

    <Toolbar id="tool1" menuId="menu1" width="9"/>

Toolbar 对象的优点是使用简单，您不必一个个加按钮；缺点是背景固定的，缺少可配置性，因为它是直接从操作系统的工具条继承过来的.