# fscript 的 widget 扩展函数 ## 1. 介绍 [fscript](fscript.md) 的 widget 扩展函数只能在 widget 的事件处理函数中使用,包括传统的 AWTK 应用程序和 AWTK-MVVM 应用程序的事件处理函数。 fscript 和其它主流脚本 (lua/js) 相比,最大的优势就是体积小巧,而且 AWTK 本身依赖于 fscript,所以使用 fscript 增加额外代码可以忽略不计数。 fscript 并不是要取代 C 或 JS 来开发 AWTK 应用程序,而是一个有益的补充,加快应用程序的开发,在 AWTK 的 UI 文件中直接嵌入 fscript, 有如下优势: * 1. 在特定情况下,可以极大简化程序的实现。 >比如下面的代码,点击按钮时打开指定的窗口就非常简洁。 ```xml ``` > 如果处理逻辑太复杂,请不要用 fscript 实现,否则不好调试。要善用 fscript 的优点而回避它的缺点。 ## 3. 目前支持的事件 * global\_key\_up * global\_key\_down * global\_key\_long\_press * key\_up * key\_down * key\_long\_press * key\_down\_before\_children * key\_up\_before\_children > 按键事件处理函数可以从 key 变量获取当前的键值。可以从 alt, ctrl, cmd 和 menu 变量中获取相应控制键的状态。如: ```xml print("global keydown:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu); print("global keyup:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu); print("global key_long_press:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu); print("keydown:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu); print("keyup:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu); print("keyup:", key, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu); ``` * pointer\_up * pointer\_down * pointer\_move * click > 指针事件处理函数可以从 x/y 变量获取当前指针的位置。可以从 alt, ctrl, cmd 和 menu 变量中获取相应控制键的状态。如: ```xml print("pointerdown:", x, y, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu); print("pointerup:", x, y, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu); print("click:", x, y, "alt=", alt, "ctrl=", ctrl, "cmd=", cmd, "menu=", menu); ``` * timer 示例: ```xml ``` * window\_close * window\_open * window\_will\_open > 窗口事件只适用于窗口。 ```xml print("window_open") print("window_will_open") print("window_close") ``` * value\_changed ```xml ``` * focus * blur 示例: ``` ``` * value\_changed\_by\_ui (仅 MVVM 支持) > 在 MVVM 中,除了支持以上方式编写 fscript,也可以通过 v-on: 和 v-data: 的方式使用 fscript,请参考 MVVM 的文档。 ## 4. 事件的返回值 * 事件缺省返回 RET\_OK。 * 如果需要在执行完成后移除事件处理函数,可以设置 RET\_REMOVE 为 true。 ``` RET_REMOVE=true ``` * 如果需要在执行完成后停止后续事件处理,可以设置 RET\_STOP 为 true。 ``` RET_STOP=true ``` ## 5. widget 相关的扩展函数 ### 5.1 open > 打开窗口。 ---------------------------- #### 原型 ```js open(name, close_current, switch_to_if_exist) ``` * close\_current 可选。为 true 时关闭当前窗口。 * switch\_to\_if\_exist 可选。为 true 时,如果同名窗口存在,直接切换到指定窗口。 ### 示例 ```xml ``` ### 5.12 stop_timer > 停止指定控件的定时器 ---------------------------- #### 原型 ```js stop_timer() stop_timer(widget) ``` * 不指定 widget 是停止当前控件的定时。 * widget 可以是 widget 对象,也可以是 widget 的路径。 ### 示例 ```js stop_timer(parent.timer) ``` ### 5.13 send_key > 向指定控件发生按键事件 ---------------------------- #### 原型 ```js send_key(widget, key_name) ``` * widget 可以是 widget 对象,也可以是 widget 的路径。 ### 示例 ```js