除了怎样创建滑动条和它的onChanging响应函数外,还要注意一点是为了给滑动条添加文本说明标签,需要手动添加静态文本控件,没有专门的为滑动条添加数值显示文本的控件。
另外这种先创建构造函数然后又实例化的流程不推荐学,我觉得是还是以简洁为主。直接创建窗口就行了。
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 65 66 67 68 69 70 71 72 73 |
/** * 创建一个对话框,包含一个滑动条和文本组件 * 当前值会反应在标签的文本中 * @constructor 构造函数 */ function SnpCreateSlider() { this.windowRef = null; } /** * 创建一个对话框,包含一个滑动条控件和文本标签 * 为滑动条定义行为用来更新标签内的文本 * @return True 如果该片段运行正常,否则返回false * @type 布尔 */ SnpCreateSlider.prototype.run = function() { var retval = true; // 创建一个浮动类型窗口(一个非模态或者说浮动对话框) var win = new Window("palette", "SnpCreateSlider", [150,150,600,300]); this.windowRef = win; // 添加一个面板来容纳这些组件 win.pnl = win.add("panel", [10,10,440,100], "移动滑动条"); // 添加一些描述滑动条状态的标签 win.pnl.minLbl = win.pnl.add("statictext", [20,47,35,60], "0"); win.pnl.curLbl = win.pnl.add("statictext", [115,47,170,60], "100"); win.pnl.maxLbl = win.pnl.add("statictext", [210,47,250,60], "200"); win.pnl.displayTextLbl = win.pnl.add("statictext", [290,20,380,40], "当前值:"); win.pnl.displayLbl = win.pnl.add("statictext", [385,20,425,40], "100"); // 添加滑动条 // winObject.add("slider"[, bounds, value, minvalue, maxvalue, {creation_properties}]) // 可以试试将 slider 改为 scrollbar win.pnl.sliderCtrl = win.pnl.add("slider", [20,20,230,45], 100, 0, 200); // 添加按钮 win.resetBtn = win.add("button", [25,110,125,140], "复位"); win.doneBtn = win.add("button", [320,110,420,140], "完成"); // 定义滑动条值改变时的行为 win.pnl.sliderCtrl.onChanging = function() { // Math.round() 把一个数字舍入为最接近的整数 var val = Math.round(win.pnl.sliderCtrl.value); // 使用当前滑动条值更新标签内文本 win.pnl.displayLbl.text = val; }; // 定义“完成”按钮行为 win.doneBtn.onClick = function() { win.close(); }; // 定义“重置”按钮行为 win.resetBtn.onClick = function() { win.pnl.sliderCtrl.value = 100; win.pnl.curLbl.text = 100; // 这个有必要吗?建议去掉 win.pnl.displayLbl.text = 100; }; // 显示窗口 win.show(); // 有了 win.center() 窗口显示的时候就会在屏幕居中 // 即使最开始定义了窗口的边界,win.center() 还是会重写窗口的 left,right 属性 // 如果定义窗口时将边界参数改为 undefined ,窗口当然还会居中 // 但是定义的两个按钮也会居中并上下排列,面板组内的组件因为父级是 panel 所以没有受影响 // 可以自己修改一下试试 // 所以想让窗口居中的话,除了使用 center() 外也得定义一下边界,虽然会被 center() 重写 // 这也算是个经验吧,最起码定义边界的时候可以把窗口大小定义出来 win.center(); return retval; }; /** * “main program”: 构建一个匿名示例并运行 */ new SnpCreateSlider().run(); |