//static 静态文本框 import win.ui.ctrl.metaProperty;//导入控件属性元表支持 namespace win.ui.ctrl; class static{ ctor(parent,tParam){ if(tParam){ if(tParam.edge) tParam.exstyle |= 0x20000/*_WS_EX_STATICEDGE*/; if(tParam.transparent)tParam.exstyle |= 0x20/*_WS_EX_TRANSPARENT*/; if(tParam.notify)tParam.style |= 0x100/*_SS_NOTIFY*/ if(tParam.nWrap) tParam.style |= 0xC/*_SS_LEFTNOWORDWRAP*/ else{ select(tParam.align) { case "center" tParam.style |= 0x1/*_SS_CENTER*/; case "right" tParam.style |= 0x2/*_SS_RIGHT*/; else tParam.style |= 0x0/*_SS_LEFT*/; } } if(tParam.center || tParam.valign=="center") tParam.style |= 0x200/*_SS_CENTERIMAGE*/ } } @_metaProperty; } static._metaProperty = metaProperty( ellipsis = { _set = function(v){ var style = ..win.getStyle(owner.hwnd); style = ( style & ~0xC000 ); if(v) style = style | ( ({"path":0x8000;"end":0x4000;"word":0xC000})[v] : 0); ::SetWindowLong(owner.hwnd,0xFFFFFFF0/*_GWL_STYLE*/,style); owner.redrawTransparent(); }; _get = function(){ var style = ..win.getStyle(owner.hwnd); if(style&0x8000) return "path"; if(style&0x4000) return "end"; if(style&0xC000) return "word"; } } ) /***intellisense() !static.cls = 设计时类名 !static.color = 获取或修改字体颜色数值 !static.bgcolor= 获取或修改景颜色数值 !static.className = 运行时类名 !static.hwnd = 控件句柄 !static.id = 控件ID !static.text = 控件文本 !static.value = 控件文本,text 属性的别名。 !static.ellipsis = 超出显示范围如何显示省略号,可选值:\n"path" 单行显示,在最后一个反斜杠前显示省略号\n"end" 单行显示,字符串末尾超出显示范围则显示省略号\nnull 不显示省略号 !static.disabledText = 指定文本时,禁用此控件,并显示指定文本,\n指定为null时,启用此控件,并恢复控件之前的正常文本 !static.isForm = 标准库 win.ui 创建的所有窗体与控件对象都拥有此属性。\nwin.form 创建的窗体对象返回 true,其他控件对象返回 false 。 !static.getForm() = 标准库 win.ui 创建的所有窗体与控件对象都拥有此属性。\nwin.form 创建的窗体对象返回自身,其他控件对象返回创建控件的容器窗口( _parentForm 属性 ) !static._parentForm = 返回创建控件的容器窗口(win.form对象),所有窗口控件都拥有此只读属性。\n对于使用窗体设计器创建的窗口,也就是返回设计时窗体容器。\n\n即使子窗口移除子窗口样式、更改父子关系,或以 orphanWindow显示,\n控件的 _parentForm 始终都不会改变\n!winform. !static.getParent() = 返回父窗口\n!static. !static.setParent(__/*控件对象*/) = 改变父窗口 !static.addCtrl(controlsPropertiesTable) = @.addCtrl(\n cls="plus";\n text="4";\n font=LOGFONT(name='Marlett';h=-16);\n marginRight=0;marginBottom=2;\n width=32;__/*在 plus 控件内部添加子控件。\n 参数 @1 可指定以下三种类型参数:\n - 指定包含名值对的表,名为添加到父窗体的控件名称,值为控件构造参数表。返回值为名值对(值为控件对象)。\n - 包含一个或多个创建匿名控件参数表的数组。返回值为数组(数组元素为创建的控件对象)。\n - 直接指定创建单个控件的构造参数表,必须指定 cls 字段。返回创建的控件对象。\n */\n) !static.translateAccelerator = @.translateAccelerator = function(msg){\n if( msg.wParam == 0x20/*_VK_SPACE*/ && msg.message = 0x101/*_WM_KEYUP*/){ \n return true;__/*返回是否快捷键,适用窗体或普通控件对象\n仅当前窗口内的按键触发此事件\n\nmsg 参数为包含窗口按键消息的 ::MSG 结构体*/\n } \n} !static.onSize = @.onSize = function( width,height,wParam ) { \n __/*父窗口改变大小后会自动触发此事件函数。\n注意 onSize 是 adjust 事件的别名,作用相同\n所有 win.form 创建的窗体和控件都支持 onSize(或 adjust)事件,\n重复赋值 onSize(或 adjust)会追加事件触发器而非替换原来的值。\n\nwidth 参数为窗口客户区宽度,height 参数为窗口客户区高度,\nwParam 参数来自 _WM_SIZE 消息的 wParam 参数,一般不用管。\n一般不建议添加一个 wndproc 仅仅是为了处理 _WM_SIZE 消息,\n定义 onSize 事件是更好的选择。\n \n};*/ !static.adjust = @.adjust = function( cx,cy,wParam ) { \n __/*父窗口改变大小后会自动触发此事件函数。\n注意 onSize 是 adjust 事件的别名,作用相同。\n所有 win.form 创建的窗体和控件都支持 adjust 事件,\n重复赋值 adjust 会追加事件触发器而非替换原来的值。\n\ncx 参数为窗口客户区宽度,cy 参数为窗口客户区高度,\nwParam 参数来自 _WM_SIZE 消息的 wParam 参数,一般不用管。\n一般不建议添加一个 wndproc 仅仅是为了处理 _WM_SIZE 消息,\n定义 adjust 事件是更好的选择。\n\n如果主动调用此函数,则检查并执行所有之前添加的 adjust 事件函数。\n省略调用参数时 cx,cy 参数默认设为窗口大小*/ \n}; !static.preadjust = @.preadjust = function( cx,cy,wParam ) { \n __/*窗口缩放后重绘前、触发 adjust 事件之前触发此事件。\n所有 win.form 创建的窗体和控件都支持此事件,\n与 adjust 事件不同,对 preadjust 重复赋值则覆盖而不是追加事件。 \n\ncx 参数为窗口宽度,cy 参数为窗口高度,\nwParam 为 _WM_SIZE 消息参数。*/ \n}; !static._embedObject = 嵌入 COM 控件的容器对象\n!embedObject. !static.createEmbed( = 创建嵌入控件,返回控件容器对象,\n容器对象的 _object 成员是创建的 COM 对象,\n容器对象可通过添加成员函数响应 COM 对象事件,\n容器对象的主要作用是充当访问 COM 对象的中间代理对象。\n通常使用 util.metaProperty 为容器对象添加属性元表,\n属性元表可拦截属性、函数调用并调用 _object 对象,\n\ncreateEmbedEx 返回的容器已添加默认代理以直接访问 COM 对象 !static.createEmbed(.(clsId,embedObj) = 创建嵌入控件,返回控件容器对象,\n容器对象的 _object 成员是创建的 COM 对象,\n容器对象可通过添加成员函数响应 COM 对象事件,\n容器对象的主要作用是充当访问 COM 对象的中间代理对象,\n@clsId 指定控件 CLSID,\n可选在参数@2中指定 COM 对象绑定的容器对象\n\n此函数失败会抛出异常 !static.createEmbed(.(comObject,embedObj) = 嵌入 COM 控件,返回控件容器对象,\n容器对象的 _object 成员是传入的 COM 对象,\n容器对象可通过添加成员函数响应 COM 对象事件,\n容器对象的主要作用是充当访问 COM 对象的中间代理对象,\n@comObject 指定已创建成功的 COM 对象,\n可选在参数@2中指定 COM 对象绑定的容器对象\n\n此函数失败会抛出异常 !static.tryCreateEmbed( = 创建嵌入控件,返回控件容器对象,\n容器对象的 _object 成员是创建的 COM 对象,\n容器对象可通过添加成员函数响应 COM 对象事件,\n容器对象的主要作用是充当访问 COM 对象的中间代理对象。\n通常使用 util.metaProperty 为容器对象添加属性元表,\n属性元表可拦截属性、函数调用并调用 _object 对象,\n\ncreateEmbedEx 返回的容器已添加默认代理以直接访问 COM 对象 !static.tryCreateEmbed(.(clsId,embedObj) = 创建嵌入控件,返回控件容器对象,\n容器对象的 _object 成员是创建的 COM 对象,\n容器对象可通过添加成员函数响应 COM 对象事件,\n容器对象的主要作用是充当访问 COM 对象的中间代理对象,\n@clsId 指定控件 CLSID,\n可选在参数@2中指定 COM 对象绑定的容器对象\n\n成功返回容器对象,失败返回false,错误信息 !static.createEmbedEx( = 创建嵌入 COM 控件,返回控件容器对象。\n容器对象的 _object 成员是创建的 COM 对象。\n容器对象的 __event__ 成员为 COM 对象默认事件监听器。\n在窗口销毁时解除默认事件监听器并释放 COM 对象。\n\n返回容器已添加元表,可通过容器对象的成员代理访问 COM 对象成员。\n也可以通过指定容器对象的成员函数响应 COM 对象事件 !static.createEmbedEx(.(clsId,embedObj) = 创建嵌入 COM 控件,返回控件容器对象。\n此函数返回的容器已添加元表并创建代理以直接访问 COM 对象,\n也可以通过指定容器对象的成员函数响应 COM 对象事件。\n\n@clsId 指定控件 CLSID,\n可选在参数 @2 中指定 COM 对象绑定的容器对象。\n\n此函数失败会抛出异常 !static.createEmbedEx(.(comObject,embedObj) = 嵌入 COM 控件,返回控件容器对象。\n此函数返回的容器已添加元表并创建代理以直接访问 COM对象,\n也可以通过指定容器对象的成员函数响应 COM 对象事件。\n\n参数 @comObject 指定已创建成功的 COM 对象,\n可选在参数 @2 中指定 COM 对象绑定的容器对象。\n\n此函数失败会抛出异常 !static.createEmbedEx() = !embedObject. !static.createEmbed() = !embedObject. !static.tryCreateEmbed() = !embedObject. !static.autoResize = 是否允许跟随父窗体自动缩放 !static.hide = 当前控件窗口是否隐藏。\n仅检查当前窗口的可见性样式(窗口 是否移除了 _WS_VISIBLE 样式)。\n不考虑父窗口是否可见,不考虑是否被其他窗口遮挡。\n如果需要同时判断父窗口的可见性,应改用 win.isVisible 函数。\n\n以 `.` 前导的 `.hide()` 作为成员函数被调用时,\n作用等价于将 hide 属性设为 null 。 !static.disabled = 是否禁用 !static.left = 左侧坐标 !static.right = 右侧坐标 !static.top = 顶部坐标 !static.bottom = 底部坐标 !static.width = 宽度 !static.height = 高度 !static.redraw() = 刷新 !static.setRedraw(false) = 禁止重绘 !static.setRedraw(true) = 恢复重绘 !static.redrawTransparent() = 刷新\n透明背景时请使用此函数替代redraw() !static.show(true__) = 显示控件 !static.getRect() = 控件区块位置(::RECT结构体) !static.getRect(true) = 控件屏幕区块位置(::RECT结构体) !static.setRect(rc) = 设置控件区块位置(::RECT结构体) !static.setRect(rc,true) = 设置控件屏幕区块位置(::RECT结构体) !static.getClientRect() = 控件客户区块位置(::RECT结构体)\n!rect. !static.clientWidth = 控件窗口客户区宽度,只读属性。 !static.clientHeight = 控件窗口客户区宽度,只读属性。 !static.getFont() = 返回控件 LOGFONT 字体,\n返回对象的 h 值会按控件的 DPI 缩放设置自动还原为缩放前大小。\n!logfont. !static.getFont(true) = 返回控件 LOGFONT 字体,\n返回对象的 h 值为字体实际大小,不会按控件 DPI 设置还原。\n返回字体会设置 noScale 属性为 true,\n使用控件的 setFont 函数或赋值 font 属性时,\nnoScale 属性为 true 的字体同样不会进行自动 DPI 缩放\n!logfont. !static.setFont(__/*指定字体*/) = 指定 LOGFONT 字体对象,或逻辑字体句柄\n如果不指定 point 值并指定 h 值,字体会按控件的 DPI 缩放设置自动缩放。 !static.setFont(混入字体属性) = @.setFont(h=-12;name="Tahoma"); !static.font = 控件字体(LOGFONT 结构体),\n注意获取该属性总是返回新的 LOGFONT 对象,\n修改返回字体并不会更新控件字体,\n除非重新赋值。\n\n建议尽量优先使用 getFont 或 setFont 函数,\n以增强代码可读性\n\n字体会根据控件设置自动处理 DPI 缩放,不需要事先缩放字体大小 !static.theme = 外观主题,例如\nwinform.button.theme = "Explorer"\nwinform.button.theme = false !static.modifyStyle(.(remove,add,swpFlags) = 修改窗口样式,所有参数都是可选参数,\n@remove 用数值指定要移除的样式,可使用 _WS_ 前缀的常量\n@add 用数值指定要添加的样式,可使用 _WS_ 前缀的常量\n@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量\n如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos\n细节请参考 win.modifyStyle 函数源码 !static.modifyStyleEx(.(remove,add,swpFlags) = 修改窗口扩展样式,所有参数都是可选参数,\n@remove 用数值指定要移除的样式,可使用 _WS_EX_ 前缀的常量\n@add 用数值指定要添加的样式,可使用 _WS_EX_ 前缀的常量\n@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量\n如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos\n细节请参考 win.modifyStyle 函数源码 !static.capture = 是否捕获全局鼠标消息 !static.close() = 关闭控件窗口 !static.invalidate(__/*可选使用::RECT()对象指定客户区*/) = 使窗口绘图区无效 !static.invalidate(__/*可选使用::RECT()对象指定客户区*/,0) = 使窗口绘图区无效\n不刷新背景 !static.update() = 重绘invalidate函数指定的区块 !static.setFocus() = 设置焦点 !static.tabNext(.(移动焦点,是否反向) = 获取下一个支持tab控制焦点的控件\n参数@1为true会自动移动焦点到该控件\n参数@2为true则获取上一个控件,否则获取下一个控件 !static.tabNext() = !static. !static.center(.(目标窗口) = 在目标窗口区域内居中,并调整以保证显示在父窗口或屏幕工作区内。\n\n参数 @1 可指定目标窗口或者目标窗口句柄,设为 0 表示桌面,\n省略目标窗口则默认取父窗口或所有者窗口。 !static.setPos(.(x坐标,y坐标,宽,高,插入位置,参数) = 调整窗口位置或排序,所有参数可选\n同时指定x,y坐标则移动位置\n同时指定宽高则改变大小\n指定插入位置(句柄或_HWND前缀常量)则调整Z序 !static.getPos() = 返回相对父窗口客户区的坐标,宽,高,\n参数为true返回屏幕坐标,宽,高,\nx,y,cx,cy=win.getPos(hwnd) !static.messageOnly() = 将窗口转换为message-only window\n该窗口不可见,仅用于消息分发 !static.setTimeout(.(函数或代码,延时,其他附加参数) = 推迟执行指定的函数或代码\n此函数异步执行参数中指定的函数,不会阻塞当前代码继续执行,\n延时参数是可选参数,以毫秒为单位,默认为0毫秒\n可选用附加参数指定调用延时函数的实参\n返回值为定时器ID !static.setInterval(回调函数,延时毫秒数,->->->) = @.setInterval( \n function(){\n __/*参数@1指定执行函数,参数@2指定执行间隔,\n可选指定一个或多个回调参数,不指定回调参数则默认为:\n hwnd,message,timerId,tick,\n\n如果在定时器中执行了win.delay等继续消息循环的代码,\n在定时器退出前不会再触发同一定时器(重入)。\n\n定时器回调函数返回数值可修改时间间隔,\n返回false取消该定时器*/\n },1000 \n) !static.changeInterval(.(定时器ID,间隔时间,回调函数) = 重新设置间隔时间或回调函数 !static.clearTimeout(.(定时器ID) = 删除定时器。\n参数如果为 null 则忽略不执行,\n否则定时器ID必须是 setInterval 函数或setTimeout函 数的返回值。\n\n请注意如果定时器被删除,ID 可能被重新分配给其他定时器。\n在定时器回调函数中返回 0,false 以删除定时器是更稳妥的方式 !static.clearInterval(.(定时器ID) = 删除定时器。\n参数如果为 null 则忽略不执行,\n否则定时器ID必须是 setInterval 函数或setTimeout函数的返回值。\n\n请注意如果定时器被删除,ID 可能被重新分配给其他定时器。\n在定时器回调函数中返回 0,false 以删除定时器是更稳妥的方式 !static.msgbox(.(text,title,style,timeout) = 弹出对话框\n1. 参数 @text 指定显示的数据,如果指表对象则先序列化为文本。\n参数 @text 是其他类型则调用 tostring 转换为文本。\n2. 可选参数 @title 用于指定信息框标题。\n3. 可选参数 @style 可用字符串或数值指定图标样式(参考 _MB_ 前缀常量值,设为 0 去掉图标与提示音),也可以指定字符串值:\n * "error","stop","hand" 错误图标\n * "question" 询问图标,显示是、否、取消按钮,返回值为 `6/*_IDYES*/,7/*_IDNO*/, 2/*_IDCANCEL*/` 之一。\n * "confirm","test" 询问图标,显示确定与取消按钮,返回值为 `1/*_IDOK*/,2/*_IDCANCEL*/` 之一。\n- "warn" 警告图标\n * "info" 信息图标。\n4. 可选用参数 @timeout 限定显示时间,以毫秒为单位,超时自动关闭。 !static.msgboxErr(.(text,title) = 弹出错误对话框\n参数 @text 指定显示的信息,如果指定表对象先序列化为文本。\n其他对象调用 tostring 转换为文本\n可选参数 @title 用于指定信息框标题。\n\n此函数调用 win.msgbox,并设定所有者窗口为当前窗体。 !static.msgboxTest(.(text,title) = 弹出询问对话框\n参数 @text 指定显示的信息,如果指定表对象先序列化为文本。\n其他对象调用 tostring 转换为文本\n可选参数 @title 用于指定信息框标题。\n\n此函数调用 win.msgbox,并设定所有者窗口为当前窗体。 !static.msgInfo(.(text,timeout) = 显示提示框。\n参数 @text 指定要显示的文本信息。\n可选使用参数 @timeout 指定延时自动关闭提示框的毫秒数。\n请先导入 win.dlg.message 库以安装此函数 !static.msgWarn(.(text,timeout) = 显示警告提示框。\n参数 @text 指定要显示的文本信息。\n可选使用参数 @timeout 指定延时自动关闭提示框的毫秒数。\n请先导入 win.dlg.message 库以安装此函数 !static.msgOk(.(text,timeout) = 显示正确提示框。\n参数 @text 指定要显示的文本信息。\n可选使用参数 @timeout 指定延时自动关闭提示框的毫秒数。\n请先导入 win.dlg.message 库以安装此函数 !static.msgErr(.(text,timeout) = 显示错误提示框。\n参数 @text 指定要显示的文本信息。\n可选使用参数 @timeout 指定延时自动关闭提示框的毫秒数。\n请先导入 win.dlg.message 库以安装此函数 !static.msgGreat(.(text,timeout) = 显示竖大拇指图标提示框。\n参数 @text 指定要显示的文本信息。\n可选使用参数 @timeout 指定延时自动关闭提示框的毫秒数。\n请先导入 win.dlg.message 库以安装此函数 !static.msgSorry(.(text,timeout) = 显示倒竖大拇指图标提示框。\n参数 @text 指定要显示的文本信息。\n可选使用参数 @timeout 指定延时自动关闭提示框的毫秒数。\n请先导入 win.dlg.message 库以安装此函数 !static.msgSmile(.(text,timeout) = 显示微笑图标提示框。\n参数 @text 指定要显示的文本信息。\n可选使用参数 @timeout 指定延时自动关闭提示框的毫秒数。\n请先导入 win.dlg.message 库以安装此函数 !static.msgFrown(.(text,timeout) = 显示皱眉图标提示框。\n参数 @text 指定要显示的文本信息。\n可选用参数 @2 指定延时关闭的毫秒数,\n请先导入 win.dlg.message 库以安装此函数 !static.msgAsk(.(text) = 显示询问提示框。\n参数 @text 指定要显示的文本信息。\n用户按确定或回车返回 true ,其他返回 false 或 null 。\n请先导入 win.dlg.message 库以安装此函数 !static.threadCallable() = 开启此控件的跨线程调用功能 !static.saveScale() = 根据控件当前位置、缩放比例,更新控件的设计时位置参数。\n以避免下次窗口缩放自适应调整控件当前位置更改被清除,\n控件所有调整位置的属性或成员函数已自动调用此函数。 !static.reloadScale() = 按设计时位置参数、重新调整控件位置以适应窗口当前缩放比例。\n父窗口缩放时会自动执行此操作。\n默认在启动窗口消息循环时会自适应调整所有控件。\n所以在启动消息循环前添加控件不必调用此函数 !static.orphanWindow( = 如果当前是子窗口,\n移除窗口的WS_CHILD样式,使窗口孤立出来悬浮于原位置,\n悬浮窗口如影随形的跟随父窗口移动或改变大小,控件原来的固定边距等参数仍然有效 !static.orphanWindow(.(transparent,hwndBuddy,borderless) = 创建悬浮窗口。\n悬浮窗口是模仿子窗口外观效果的独立窗口,父窗口可自动调整子窗口到设定位置。\n可选参数 @transparent 为 true 则转换为分层透明窗口。\n可选利用 @hwndBuddy 参数指定外部进程窗口句柄的并附加在内部控件上以实现相同的效果。\n伙伴窗口总是会保持在悬浮窗口前面,并保持相同的大小、位置。\n可重复调用此函数更换伙伴窗口,旧的伙伴窗口必须自行关闭。\n可选指定 @borderless 参数 为 true 以移除 @hwndBuddy 的窗口边框。 !static.group() = 将在此控件范围内的所有其他控件设为此控件的子窗口 !static.translateCommand() = 允许转发转发子窗口的命令(_WM_COMMAND)与通知(_WM_NOTIFY)消息,\n避免子窗口 oncommand,onnotify 等回调失效。\n同时会处理子窗口的 _WM_CTLCOLORSTATIC 等消息,\n以避免部分外观属性失效 !static.resize(.(宽度,高度) = 如果指定了参数则调整窗口大小,\n无论是否实际调整窗口大小,发送 _WM_SIZE 消息给窗口 !static.onDestroy = @.onDestroy = function(){\n __/*窗口销毁前触发*/\n} !static.onnotify = @.onnotify = function(id,code,ptr){\n __/*通知事件触发*/\n} !static.oncommand = @.oncommand = function(id,event){\n __/*命令事件触发*/\n} !static.wndproc = @.wndproc = function(hwnd,message,wParam,lParam){\n __/*窗口消息回调,返回任意非null值阻止默认回调\nwndproc重复赋值时追加函数而不是覆盖之前的回调\n设为null添除所有消息回调函数\nwndproc也可以是一个表,键要为处理的消息,值为对应的消息回调函数*/ \n} !static.wait(.(等待函数,超时,延时间隔) = 循环执行等待函数,并等待返回值\n直到等待函数返回非空值,或存在第二个返回值,或当前窗口关闭\n等待函数返回的值就是wait函数的返回值,\n如果指定超时,超过指定毫秒时返回null,\n除等待函数以外,所有参数可选 !static.sendMessage(.(msg,wParam,lParam) = 发送窗口消息\n此函数用法请参考 ::User32.SendMessage !static.postMessage(.(msg,wParam,lParam) = 投递窗口消息到消息队列中\n此函数用法请参考 ::User32.PostMessage !static.publish("__/*发布消息名*/",) = 在窗口所在界面线程发布消息,\n运行界面线程所有所有调用 subscribe 函数订阅此消息的函数,\n可添加任意个触发参数 !static.reduce(array,callback,debounce) = @.reduce(\n [__/*参数 1 @array 指定要循环处理每个元素的数组或表。\n@array 指定为 false 则取消之前创建的防抖单例循环。\n\n参数 2 @callback 指定回调函数。\n\n 回调函数中可返回本次间隔延时,以毫秒为单位。\n 返回 0、null、false、以及不能转换为非 0 数的值中断处理。\n 回调参数为:当前数组元素值,当前索引,数组长度,本轮动画已执行毫秒数,\n 处理到数组尾部时回调参数 @1 为 null,\n 如果此时仍然返回可转换为非 0 数的值,将转到第一个数组元素重复循环。\n\n参数 3 @debounce 指定是否创建为防抖单例循环,默认为 true。*/],\n function(value,index,length,currentTime){\n if(value){\n var duration = 2000;\n var x = currentTime/duration;\n var change = 1+length*(x * x * x * x);\n var delay = (duration / length) / change;\n return delay;\n }\n } \n) !static.enableDpiScaling(false) = 禁用DPI自动缩放,\n不指定参数启用DPI自动缩放,默认已启用 !static.dpiScaleX = 窗口当前使用的DPI横坐标缩放系数,\n该值由界面系统自动维护,任何情况下都不应手动修改,\n\n这是一个以小数表示百分比的数,例如 1.25 表示 125%,\n窗口未使用缩放或未完成缩放初始化时,值可能为 null,\n如果要获取屏幕缩放设置应改用 gdi.getDpiScale 函数 !static.dpiScaleY = 窗口当前使用的DPI纵坐标缩放系数,\n该值由界面系统自动维护,任何情况下都不应手动修改,\n\n这是一个以小数表示百分比的数,例如 1.25 表示 125%,\n窗口未使用缩放或未完成缩放初始化时,值可能为 null,\n如果要获取屏幕缩放设置应改用 gdi.getDpiScale 函数 !static.dpiScale(.(x,y) = 将 @x,@y 表示的像素值乘以窗体当前 DPI 缩放倍数并返回,\n省略 @y 参数时仅返回 @x 转换后的值,\n所有 win.ui 创建的窗口或控件都提供这个函数 !static.getRoot() = 获取顶层父窗口,这个函数会查找 orphanWindow 的父窗口 !static.isDialogMessage = @.isDialogMessage = function(hParent,msg){__/*在控件范围内替代父窗口的 isDialogMessage,\n可用于在控件范围内屏蔽对话框快捷键。\n可用于禁用 tab 控制键的多行文本框支持按 tab 输入制表符*/} !static._defWindowProc(hwnd,message,wParam,lParam) = 用于在 wndproc 回调中提前调用默认消息回调函数,\n所有窗口和控件定义了 wndproc 回调以后会自动创建这个函数,\n调用此函数以后,wndproc 必须指定非 null 返回值,\n以避免再次重复调用默认回调函数 !static.valid = 窗口是否有效,\n窗口未关闭返回 true ,\n窗口已关闭或正在关闭返回 false !static.addCtrl() = !static. ?win.ui.ctrl.static =!static. win.ui.ctrl.static() = 静态文本控件\n!static. win.ui.ctrl.static = 静态文本控件支持库 end intellisense***/