文本框控件支持库
文本框控件
用于在 wndproc 回调中提前调用默认消息回调函数,
所有窗口和控件定义了 wndproc 回调以后会自动创建这个函数,
调用此函数以后,wndproc 必须指定非 null 返回值,
以避免再次重复调用默认回调函数
创建该控件的父窗口(win.form对象),
设计时窗体容器是所有拖放在窗体上的控件的 _parentForm,
即使窗口移除子窗口样式、更改父子关系,或以 orphanWindow显示,
控件的 _parentForm 始终都不会改变
editObject.addCtrl(
spin={
cls="spin";marginRight=4;marginTop=1;marginBottom=4;width=16;
oncommand = function(id,event,pos){
if( pos & event == 0x4/*_SB_THUMBPOSITION*/ ){
winform.edit.text = string.format("%.2f",pos / 100 )
}
}
}
)/*在edit控件窗口内添加子窗口*/
editObject.adjust = function( cx,cy,wParam ) {
/*窗口缩放时会自动触发此函数。
cx 参数为窗口宽度,cy 参数为窗口高度,
wParam 参数请参考 _WM_SIZE 消息参数说明,一般不用管。
所有 win.form 创建的窗体和控件都支持此事件,
重复赋值只会追加而不会覆盖此事件。
一般不建议添加一个 wndproc 仅仅是为了处理 _WM_SIZE 消息,
定义 adjust 事件是更好的选择。
可主动调用此事件,省略参数时 cx,cy 参数默认设为窗口大小*/
};
追加文本并移动光标插入点到文本尾部。
追加文本并移动光标插入点到文本尾部。
可指定零个、或多个参数,参数可以是字符串、buffer、数值。
传入其他类型参数会抛出异常。
返回文本总长度
获取或修改景颜色数值
底部坐标
能否复制,
实际上也就是判断是否存在选区
能否粘贴
能否重做
能否撤消
是否捕获全局鼠标消息
运行时类名
清除选中文本
关闭控件窗
设计时类名
获取或修改字体颜色数值
复制
剪切
取消选定
在此控件中关闭输入法, 仅支持英文输入
控件时否禁用
当指定文本时,禁用此控件并显示指定文本。
指定为 null 时,启用此控件并恢复控件之前的正常文本。
显示变量的值,支持多参数
注意仅显示普通table,string,number等类型的值,不显示函数等
editObject.enablePopMenu(function(){
return {
{ /*分隔线*/ };
{ "自定义菜单项"; function(id){
/*enablePopMenu 用于启用文本框的右键菜单。
可选指定要增加的菜单配置表(或返回菜单配置表的函数)作为参数。
菜单配置表将作为参数传给 win.ui.popmenu 对象的 addTable 函数。
格式请查看该函数说明函数。
调用此函数必须事先引用 win.ui.menu 。*/
}; !owner.canCopy() ? 1/*_MF_GRAYED*/ : 0};
}
})
控件字体(LOGFONT 结构体),
注意获取该属性总是返回新的 LOGFONT 对象,
修改返回字体并不会更新控件字体,
除非重新赋值。
建议尽量优先使用 getFont 或 setFont 函数,
以增强代码可读性
字体会根据控件设置自动处理 DPI 缩放,不需要事先缩放字体大小
控件文本客户区块位置(::RECT结构体)
返回控件 LOGFONT 字体,
返回对象的 h 值会按控件的 DPI 缩放设置自动还原为缩放前大小。
返回控件 LOGFONT 字体,
返回对象的 h 值为字体实际大小,不会按控件 DPI 设置还原。
返回字体会设置 noScale 属性为 true,
使用控件的 setFont 函数或赋值 font 属性时,
noScale 属性为 true 的字体同样不会进行自动 DPI 缩放
获取文本长度
注意是按字符计数,而不是按字节计数
返回父窗口
返回相对坐标,宽,高
x,y,cx,cy=win.getPos(hwnd)
控件区块位置(::RECT结构体)
控件屏幕区块位置(::RECT结构体)
获取顶层父窗口,这个函数会查找 orphanWindow 的父窗口
获取选区起始位置,结束位置
选区包含起始与结束位置的字符,首字符位置为1
开始位置在指定的字符前面,结束位置表示指定的字符后面
只有一个返回值时表示无选区,并表示输入光标在指定字符后面
返回0表示输入光标在最前面,并且无选区
滚动到右侧
滚动横向滚动条
高度
当前控件窗口是否隐藏。
仅检查当前窗口的可见性样式(窗口 是否移除了 _WS_VISIBLE 样式)。
不考虑父窗口是否可见,不考虑是否被其他窗口遮挡。
如果需要同时判断父窗口的可见性,应改用 win.isVisible 函数。
控件句柄
控件ID
正数增大,负数缩小文本客户区
文本框必须在设计时指定为多行
在文本框改变大小必须重新设置
使窗口绘图区无效
使窗口绘图区无效
不刷新背景
editObject.isDialogMessage = function(hParent,msg){/*在控件范围内替代父窗口的 isDialogMessage,
可用于在控件范围内屏蔽对话框快捷键。
可用于禁用 tab 控制键的多行文本框支持按 tab 输入制表符*/}
左侧坐标
字符数限制,注意不是以字节为单位,
此限制主要用于限制用户输入,对读写text属性无效,
如果设为0,单行文本框指定为0x7FFFFFFE,多行文本框指定为-1
如果用于限制log,print等函数输出字符数时,值不能设置过大或设为0、负数等
获取行数
不指定参数则返回当前行
返回指定位置行数
返回指定行字符数
省略参数表示当前行,小于0表示自尾部倒数到指定行,-1表示最后一行
滚动条移动到指定行
如果不指定参数则滚动到最后一行
选择指定的行的全部文本,
行号为-1时表示选取最后一行,
可选使用参数@2指定一个字符串用于替换该行文本
获取指定行文本
错误行号返回null空值
省略参数表示当前行,小于0表示自尾部倒数到指定行,-1表示最后一行
获取当前选定行首字符位置
获取指定行首字符位置
省略参数表示当前行,小于0表示自尾部倒数到指定行,-1表示最后一行
for line in editObject.lines(true){
/*遍历所有文本行,
如果迭代器参数为true则清除每行首尾空格,并忽略空行*/
}
自参数 @1 指定的文件路径加载文本。
追加字符串到文本框,可输入多个参数
如果超出limit属性设定的字符数限制则移除头部多余的字符
为提升性能,limit不可过大
文本内容是否已修改,可修改此属性。
修改 text 属性、以及调用 log,print 等函数不会自动变更此属性。
用户输入、selText 变更、 appendTexxt,appendLink 调用都会变更此属性为 true。
修改窗口样式,所有参数都是可选参数,
@remove 用数值指定要移除的样式,可使用 WS 前缀的常量
@add 用数值指定要添加的样式,可使用 WS 前缀的常量
@swpFlags 可选用数值指定调整窗口选项,可使用 SWP 前缀的常量
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos
细节请参考 win.modifyStyle 函数源码
修改窗口扩展样式,所有参数都是可选参数,
@remove 用数值指定要移除的样式,可使用 WS_EX 前缀的常量
@add 用数值指定要添加的样式,可使用 WS_EX 前缀的常量
@swpFlags 可选用数值指定调整窗口选项,可使用 SWP 前缀的常量
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos
细节请参考 win.modifyStyle 函数源码
editObject.onCancel = function(){
/*当前已按下ESC,返回true阻止默认事件*/
return true;
}
editObject.onChange = function(){
if(owner.onModified)owner.onModified(true);
owner.validateText("<\d+\.\d\d>|<\d+\.\d>|<\d+\.>|<\d+>"
,"请输入金额,小数点后不能超过 2 位!");
/*响应事件,文本内容已变更,
edit 控件启用多行时用 text 属性赋值文本不会触发此事件。
log,print 函数调用也是基于修改 text 属性实现,也不会触发此事件。
但 appendText,selText 修改插入点文本的调用会触发此事件。*/
}
editObject.onFocusGot = function(){
/*响应事件,文本框已获得输入焦点*/
}
editObject.onFocusLost = function(){
/*响应事件,文本框已失去输入焦点*/
}
editObject.onModified = function(modified){
/*使用代码变更 modified 属性后触发此事件,
用户编辑文本导致变更 modified 属性不会触发此事件,
可在 onChange 事件内主动调用此事件*/
}
editObject.onOk = function(){
/*当前已按下回车,返回true阻止默认事件*/
return true;
}
创建悬浮窗口。
悬浮窗口是模仿子窗口外观效果的独立窗口,父窗口可自动调整子窗口到设定位置。
可选参数 @transparent 为 true 则转换为分层透明窗口。
可选利用 @hwndBuddy 参数指定外部进程窗口句柄的并附加在内部控件上以实现相同的效果。
伙伴窗口总是会保持在悬浮窗口前面,并保持相同的大小、位置。
可重复调用此函数更换伙伴窗口,旧的伙伴窗口必须自行关闭。
可选指定 @borderless 参数 为 true 以移除 @hwndBuddy 的窗口边框。
文本边距
应通过 setPadding 函数设置该值
指定隐藏密码的占位字符,该字符使用UTF-16编码,
例如指定为'*'u隐藏密码,指定为null正常显示文本
粘贴
投递窗口消息到消息队列中
此函数用法请参考 ::User32.PostMessage
editObject.preadjust = function( cx,cy,wParam ) {
/*窗口缩放后重绘前、触发 adjust 事件之前触发此事件。
所有 win.form 创建的窗体和控件都支持此事件,
与 adjust 事件不同,对 preadjust 重复赋值则覆盖而不是追加事件。
cx 参数为窗口宽度,cy 参数为窗口高度,
wParam 为 _WM_SIZE 消息参数。*/
};
将多个参数转换为字符串,
并使用制表符分隔各参数追加到文本尾部
并追加换行
如果超出limit属性设定的字符数限制则移除头部多余的字符
为提升性能,limit不可过大
对于table对象,aardio会序列化为文本然后输出,
如果当前已经导入了web.json,则自动转换为json后输出,
可以用于调试代码显示变量的值
将多个参数调用string.format格式化后追加到文本尾部
并追加换行
在窗口所在界面线程发布消息,
运行界面线程所有所有调用subscribe函数订阅此消息的函数,
可添加任意个触发参数
是否只读
只读时禁止编辑
重做
刷新
按设计时位置参数、重新调整控件位置以适应窗口当前缩放比例。
父窗口缩放时会自动执行此操作。
默认在启动窗口消息循环时会自适应调整所有控件。
所以在启动消息循环前添加控件不必调用此函数。
如果指定了参数则调整窗口大小,
无论是否实际调整窗口大小,发送 _WM_SIZE 消息给窗口
右侧坐标
保存控件文本到参数 @1 指定的文件路径。
根据控件当前位置、缩放比例,更新控件的设计时位置参数。
以避免下次窗口缩放自适应调整控件当前位置更改被清除,
控件所有调整位置的属性或成员函数已自动调用此函数。
滚动到光标处
获取或设置当前行,
光标移动到该行开始处,并且滚动到该行,
设为-1跳转到最后一行
获取或替换选区文本
全选
发送窗口消息
此函数用法请参考 ::User32.SendMessage
参数为指定文本客户区的RECT结构体
文本框必须在设计时指定为多行
在文本框改变大小必须重新设置
指定单行文本框文本为空时的显示的默认提示文本
指定单行文本框默认提示文本。
参数 @1 必须是字符串,
参数 @2 可省略,默认仅失去焦点时显示。
XP 系统不支持此函数、但调用不报错。
注意 plus 控件提供支持XP系统的 setCueBannerText 函数
设置焦点,可指定选区参数
设置焦点到文本框尾部
设置焦点到文本框的指定位置
全选并设置焦点
指定 LOGFONT 字体对象,或逻辑字体句柄
如果不指定 point 值并指定 h 值,字体会按控件的 DPI 缩放设置自动缩放。
editObject.setFont(h=-12;name="Tahoma");
设置文本边距,所有参数都可以省略。
文本框必须在设计时指定为多行,
在文本框改变大小后仍然可以保持此边距。
边距默认应设置缩放前的原始值
如果参数为 @5 为 true 则边距应为当前 DPI 缩放后的值
改变父窗口
调整窗口位置或排序,所有参数可选
同时指定x,y坐标则移动位置
同时指定宽高则改变大小
指定插入位置(句柄或_HWND前缀常量)则调整Z序
设置控件区块位置(::RECT结构体)
设置控件屏幕区块位置(::RECT结构体)
禁止重绘
恢复重绘
无选区,
移动光标到指定位置的字符后面
设置选区,以字符为单位
1为首字符,选区包含起始与结束位置
如果结束位置小于开始位置,自动交换参数位置
显示控件
显示气泡提示,
建议直接调用showInfoTip,showWarningTip 或 showErrorTip
在输入光标处显示汽泡提示,
@text参数指定文本
在输入光标处显示汽泡提示,
@title参数指定标题,
@text参数指定文本,
icon指定图标句柄,可省略
在输入光标处显示汽泡提示,使用错误图标
在输入光标处显示汽泡提示,使用错误图标,
@text参数指定文本
在输入光标处显示汽泡提示,使用错误图标,
@title参数指定标题,
@text参数指定文本,
large指定是否使用大图标,可省略
在输入光标处显示汽泡提示
在输入光标处显示汽泡提示,使用提示信息图标,
@text参数指定文本
在输入光标处显示汽泡提示,使用提示信息图标,
@title参数指定标题,
@text参数指定文本,
large指定是否使用大图标,可省略
在输入光标处显示汽泡提示,使用警告图标
在输入光标处显示汽泡提示,使用警告图标,
@text参数指定文本
在输入光标处显示汽泡提示,使用警告图标,
@title参数指定标题,
@text参数指定文本,
large指定是否使用大图标,可省略
获取下一个支持tab控制焦点的控件
参数@1为true会自动移动焦点到该控件
参数@2为true则获取上一个控件,否则获取下一个控件
获取或写入编辑控件文本属性。
可写入 UTF8 或 UTF16 字符串,写入 null 值转换为空字符串,
其他类型值用 tostring 转为字符串后写入。
注意 edit 控件使用'\r\
'表示换行,而 richedit 控件则使用'\
'表示换行,
用双引号或反引号包含字符串赋值时换行会自动将换行解析为'\
',
用块注释赋值为字符串时会自动将换行规范化解析为'\r\
',
例如 winform.edit.txt = /*文本
第二行文本*/
外观主题,例如
winform.button.theme = "Explorer"
winform.button.theme = false
开启此控件的跨线程调用功能
顶部坐标
editObject.translateAccelerator = function(msg){
var vk = msg.wParam;
if( (vk == 0x9/*_VK_TAB*/ ) || (vk = 0xD/*_VK_RETURN*/) ){
if( msg.message == 0x100/*_WM_KEYDOWN*/) {
owner.tabNext(true);
return true;/*在此事件中可拦截键盘消息并自定义快捷键
tabNext函数切换到下一个支持tab控制键的控件
如果这是一个快捷键返回true以取消该消息的默认行为*/
}
}
}
允许转发转发子窗口的命令(_WM_COMMAND)与通知(_WM_NOTIFY)消息,
避免子窗口 oncommand,onnotify 等回调失效。
同时会处理子窗口的 _WM_CTLCOLORSTATIC 等消息,
以避免部分外观属性失效
撤消
重绘invalidate函数指定的区块
滚动到底部
滚动竖向滚动条
窗口是否有效,
窗口未关闭返回 true ,
窗口已关闭或正在关闭返回 false
校验输入文本。
全部文本完全符合要求返回 true,否则返回 false。
可在 onChange 事件内调用此函数实时校验输入。
如果需要限制数字,
更简单的方法是在窗体设计器中设置控件的『限制数字』属性为 true,
也就是指定控件的创建参数 num 的值为 true。
调用参数 @1 指定的函数校验控件的文本属性,
该函数必须自参数中接收当前文本并返回合法文本或 null。
然后将文本设为符合合法的文本,如果校验函数返回 null 设为空字符串。
如果修改了文本且指定了字符串参数 @2 ,则在控件内用气泡提示显示参数 @2 指定的错误信息,
并且将焦点切换到该控件,然后将输入光标设置到文本尾部。
用字符串参数 @1 指定的模式串校验控件的文本属性。
将文本设为符合匹配的文本,如果找不到匹配文本设为空字符串。
如果修改了文本且指定了字符串参数 @2 ,
则在控件内用气泡提示显示参数 @2 指定的错误信息,
并且将焦点切换到该控件,然后将输入光标设置到文本尾部。
用字符串参数 @1 指定的模式串校验控件的文本属性。
将文本设为符合匹配的文本,如果找不到匹配文本设为空字符串。
如果修改了文本且指定了字符串参数 @2,@3 ,
则在控件内用气泡提示显示参数 @2,@3 指定的错误信息,
并且将焦点切换到该控件,然后将输入光标设置到文本尾部。
editObject.validateText("<\d+\.\d\d>|<\d+\.\d>|<\d+\.>|<\d+>",
"不能接受的字符","只能在此输入金额,小数点后不能超过 2 位!")
宽度
是否启用自动换行,仅richedit支持