跟脚本分析02:创建一个简单的窗口差不多,稍微复杂一些,主要是针对使用 add() 方法。
还是要注意组、面板和控件的边界问题,最好按着边界距离手动画出一份,能对排版理解的更好。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
/** * 展示窗口和容器的 add() 方法的用法 * 创建一个简单的浮动面板 * 包含各种组件 */ function SnpCreateUIAddMethod() { /** * 这段代码可以运行的环境 * @type 字符串 * 想要在注释中使用 @ ,必须在这种注释风格中才可以 * 不然会报错 */ this.requiredContext = "\t在ESTK中执行"; $.level = 1; // 测试等级 this.windowRef = null; } /** * 这段代码的函数部分 * 创建一个窗口和一个容纳组件的容器面板 * 向面板中添加组件,包括嵌套单选按钮组容器 * 向 OK 和 Cancel 按钮添加行为,然后显示窗口 * @return True 如果此代码片段可以正常执行,否则为false * @type 布尔 */ SnpCreateUIAddMethod.prototype.run = function() { var retval = true; // 创建一个浮动窗口(一个非模态对话框) var win = new Window("palette", "SnpCreateUIAddMethod"); this.windowRef = win; // 为组件创建一个容器面板 win.pnl = win.add("Panel", [5,5,225,150], "一个面板"); // 使用面板的 add() 方法创建组件 win.pnl.txt = win.pnl.add("edittext", [15,15,200,35], "编辑我!"); win.pnl.chkb1 = win.pnl.add("checkbox", [25,45,105,65], "选项A"); win.pnl.chkb2 = win.pnl.add("checkbox", [155,45,205,65], "选项B"); // 在面板内添加嵌套容器来为组件分组 win.pnl.grp = win.pnl.add("panel", [15,75,200,105]); // 向组内添加一对单选框,因为它们在同一个容器内,所以自动为一个互斥选择组 win.pnl.grp.rb1 = win.pnl.grp.add("radiobutton", [5,5,50,25], "一个"); win.pnl.grp.rb2 = win.pnl.grp.add("radiobutton", [135,5,180,25], "两个"); // 添加 OK/Cancel 按钮 win.pnl.okBtn = win.pnl.add("button", [25,110,105,130], "确定"); win.pnl.cnBtn = win.pnl.add("button", [120,110,190,130], "取消"); // 定义按钮的行为 win.pnl.okBtn.onClick = function() { $.writeln(win.pnl.txt.text); win.close(); }; win.pnl.cnBtn.onClick = function() { $.writeln("点击了取消按钮"); win.close(); } // 显示窗口 win.show(); return retval; }; new SnpCreateUIAddMethod().run(); |