aardio 文档

win.ui.ctrl.richedit 库模块帮助文档

必读文档

设置文本样式

使用 COM 接口实现的 TOM 文本对象设置样式

以下是一个简单示例:

textDoc = winform.richedit.createTextDocument()
textDoc.Selection.Text = "这是红色加粗的文本"
textDoc.Selection.Font.ForeColor = gdi.RGB(255,0,0)  // 红色
textDoc.Selection.Font.Bold = textDoc.tomTrue  // 加粗

TOM 文档

使用 CHARFORMAT2 结构体设置样式

以下函数会用到 CHARFORMAT2(这里指的是 win.ui.ctrl.CHARFORMAT2 类) 结构体。

设置样式的函数可直接指定普通表参数(不需要指定全部 CHARFORMAT2 字段), aardio 会自动将这些表转换为完整的 CHARFORMAT2 结构体。 并且会自动设置 mask 字段的掩码。 在 aardio 会自动设置值,所以这个最复杂的部分可以不用管了。 所以只要字段名写对就可以了。

CHARFORMAT2 有以下字段

注意修改字体大小请在窗体显示并且 DPI 初始化缩放完成以后再设置,不然会被重复放大。 如果要在窗体显示前设置,请在设置字体大小前主动调用 winform.enableDpiScaling("init");

参考文档:

https://learn.microsoft.com/en-us/windows/win32/controls/about-rich-edit-controls https://github.com/MicrosoftDocs/win32/blob/docs/desktop-src/Controls/about-rich-edit-controls.md https://learn.microsoft.com/zh-cn/windows/win32/api/richedit/ns-richedit-charformatw https://learn.microsoft.com/zh-cn/windows/win32/api/richedit/ns-richedit-charformat2w

API 常量在 aardio 里需要在前面加一个下划线,然后利用 IDE 的自动完成可自动转换为实际的常量值。

win.ui.ctrl 成员列表 #

win.ui.ctrl.CHARFORMAT2() #

用于创建 richedit 支持的 CHARFORMAT2 结构体。
因为 richedit 提供的函数可将样式表参数自动转换为此结构,
所以一般不需要手动创建此结构体。

注意 aardio 中的 CHARFORMAT2 结构体字段命名与 MSDN 有微小差别。

返回对象:charformat2Object

win.ui.ctrl.richedit #

多功能文本框控件支持库

win.ui.ctrl.richedit() #

多功能文本框控件

返回对象:richeditObject

richeditObject 成员列表 #

richeditObject._defWindowProc(hwnd,message,wParam,lParam) #

用于在 wndproc 回调中提前调用默认消息回调函数,
所有窗口和控件定义了 wndproc 回调以后会自动创建这个函数,
调用此函数以后,wndproc 必须指定非 null 返回值,
以避免再次重复调用默认回调函数

richeditObject._parentForm #

返回创建控件的容器窗口(win.form对象),所有窗口控件都拥有此只读属性。
对于使用窗体设计器创建的窗口,也就是返回设计时窗体容器。

即使子窗口移除子窗口样式、更改父子关系,或以 orphanWindow显示,
控件的 _parentForm 始终都不会改变

返回对象:winform

richeditObject.addCtrl(tParam) #

richeditObject.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控件窗口内添加子窗口*/

richeditObject.adjust #

richeditObject.adjust = function( cx,cy,wParam ) {     
    /*父窗口改变大小后会自动触发此事件函数。  
注意 onSize 是 adjust 事件的别名,作用相同。  
所有 win.form 创建的窗体和控件都支持 adjust 事件,  
重复赋值 adjust 会追加事件触发器而非替换原来的值。  

cx 参数为窗口客户区宽度,cy 参数为窗口客户区高度,  
wParam 参数来自 _WM_SIZE 消息的 wParam 参数,一般不用管。  
一般不建议添加一个 wndproc 仅仅是为了处理  _WM_SIZE 消息,  
定义 adjust 事件是更好的选择。  

如果主动调用此函数,则检查并执行所有之前添加的 adjust 事件函数。  
省略调用参数时 cx,cy 参数默认设为窗口大小*/    
};

richeditObject.appendLink #

在文本尾部追加超链接。
如果未定义 onHyperlink 事件,
则添加默认 onHyperlink 调用 raw.execute 函数打开链接。

此函数会自动禁用自动识别超链接功能,但不会取消之前自动识别的超链接。

richeditObject.appendLink(title,href,charFormat2) #

在文本尾部追加超链接。
参数 @title 指定显示文本。
参数 @href 指定超链接或文件路径。
参数 @charFormat2 可选指定包含 win.ui.ctrl.CHARFORMAT2 部分字段的表

默认会通过插入位置获取超链接,
如果超链接位置改变而获取失败,则通过 title 指定显示名称获取链接。

richeditObject.appendText #

追加文本并移动光标插入点到文本尾部。
用法细节请参考 richedit 库函数文档。

richeditObject.appendText(追加文本-..) #

追加文本并移动光标插入点到文本尾部。
可指定零个、或多个参数,参数可以是字符串、buffer、数值。
如果参数是表对象,则将该表作为 setSelCharformat 的参数修改插入点样式。
如果修改字体大小请在窗体显示 DPI 缩放以后设置。
如果传入了样式参数,在函数调用结束总是会恢复为默认样式。
传入其他类型参数会抛出异常。

函数返回插入文本以后控件的文本总长度。

richeditObject.bgcolor #

获取或修改背景颜色、数值

richeditObject.bottom #

底部坐标

richeditObject.canCopy() #

能否复制

richeditObject.canPaste() #

能否粘贴

richeditObject.canRedo() #

能否重做

richeditObject.canUndo() #

能否撤消

richeditObject.capture #

是否捕获全局鼠标消息

richeditObject.caretPos #

输入光标所在文本插入点位置,以字符为单位。
有选区则返回选区最后一个字符的位置,
无选区则返回插入点前面的字符位置。
获取文本选区请改用 getsel 函数。

richeditObject.charFromPoint(x,y) #

返回 x,y 指定的控件客户区坐标所在的字符索引,
第一个字符索引为 1 。

richeditObject.className #

运行时类名

richeditObject.clear() #

清除选中文本

richeditObject.close() #

关闭控件窗

richeditObject.cls #

设计时类名

richeditObject.color #

取或修改字体颜色、数值

richeditObject.copy() #

复制选区。
如果要复制全部 RTF 文档,
可用 win.clip.data("Rich Text Format") 复制

richeditObject.createTextDocument() #

返回 COM 接口的TOM 文本对象

返回对象:TextDocumentObject

richeditObject.cut() #

剪切选区

richeditObject.deselect() #

取消选定

richeditObject.disableInputMethod() #

在此控件中关闭输入法, 仅支持英文输入

richeditObject.disabled #

控件时否可见

richeditObject.disabledText #

当指定文本时,禁用此控件并显示指定文本。
指定为 null 时,启用此控件并恢复控件之前的正常文本。

richeditObject.dump(变量) #

显示变量的值,支持多参数
注意仅显示普通table,string,number等类型的值,不显示函数等

richeditObject.enablePopMenu() #

richeditObject.enablePopMenu(function(){  
    return {   
        { /*分隔线*/ };   
        { "自定义菜单项";  function(id){  
            /*enablePopMenu 用于启用文本框的右键菜单。  
可选指定要增加的菜单配置表(或返回菜单配置表的函数)作为参数。  
菜单配置表将作为参数传给 win.ui.popmenu 对象的 addTable 函数。  
格式请查看该函数说明*/  
        }; !owner.canCopy() ? 1/*_MF_GRAYED*/ : 0};       
    }  
})

richeditObject.findText #

查找文本

richeditObject.findText(查找字符串,选项,开始位置,结束位置) #

查找
选项可使用 win.dlg.findReplace 对象的 flags 属性,
不指定查找范围时,aardio 根据选区自动确定下次替换的范围
替换完全部文本会重新重新设置查找范围为全部文本

此函数返回2个数值,表示查找到的字符串起始、结束位置
如果参数中未指定查找位置,会自动选中查找到的字符串

richeditObject.font #

控件字体(LOGFONT 结构体),
注意获取该属性总是返回新的 LOGFONT 对象,
修改返回字体并不会更新控件字体,
除非重新赋值。

建议尽量优先使用 getFont 或 setFont 函数,
以增强代码可读性

字体会根据控件设置自动处理 DPI 缩放,不需要事先缩放字体大小

richeditObject.getCharformat() #

返回对象:charformat2Object

richeditObject.getCharformat(mask) #

返回 win.ui.ctrl.CHARFORMAT2 结构体。
参数 @mask 指定获取字段掩码,省略获取全部值

richeditObject.getClientRect() #

控件客户区块位置(::RECT结构体)

返回对象:rectObject

richeditObject.getFont() #

返回控件 LOGFONT 字体,
返回对象的 h 值会按控件的 DPI 缩放设置自动还原为缩放前大小。

返回对象:logfontObject

richeditObject.getFont(true) #

返回控件 LOGFONT 字体,
返回对象的 h 值为字体实际大小,不会按控件 DPI 设置还原。
返回字体会设置 noScale 属性为 true,
使用控件的 setFont 函数或赋值 font 属性时,
noScale 属性为 true 的字体同样不会进行自动 DPI 缩放

返回对象:logfontObject

richeditObject.getLength() #

获取文本长度
注意是按字符计数,而不是按字节计数

richeditObject.getParent() #

返回父窗口

返回对象:staticObject

richeditObject.getPos() #

返回相对坐标,宽,高
x,y,cx,cy=win.getPos(hwnd)

richeditObject.getRect() #

控件区块位置(::RECT结构体)

richeditObject.getRect(true) #

控件屏幕区块位置(::RECT结构体)

richeditObject.getRoot() #

获取顶层父窗口,这个函数会查找 orphanWindow 的父窗口

richeditObject.getSelCharformat() #

返回对象:charformat2Object

richeditObject.getSelCharformat(mask) #

返回选区 win.ui.ctrl.CHARFORMAT2 结构体。
参数 @mask 指定获取字段掩码,省略获取全部值

richeditObject.getsel() #

获取选区起始位置,结束位置。
选区包含起始与结束位置的字符,首字符位置为 1 。
开始位置在指定的字符前面,结束位置表示指定的字符后面。
只有一个返回值时表示无选区,并表示输入光标在返回的字符位置后面。
返回单个 0 表示输入光标在最前面,并且无选区。

richeditObject.hScroll() #

滚动到右侧

richeditObject.hScroll(_SB) #

滚动横向滚动条

richeditObject.height #

高度

richeditObject.hide #

当前控件窗口是否隐藏。
仅检查当前窗口的可见性样式(窗口 是否移除了 _WS_VISIBLE 样式)。
不考虑父窗口是否可见,不考虑是否被其他窗口遮挡。
如果需要同时判断父窗口的可见性,应改用 win.isVisible 函数。

. 前导的 .hide() 作为成员函数被调用时,
作用等价于将 hide 属性设为 null 。

richeditObject.hwnd #

控件句柄

richeditObject.id #

控件ID

richeditObject.inflateClientRect(dx,dy) #

正数增大,负数缩小文本客户区
文本框必须在设计时指定为多行
在文本框改变大小必须重新设置

richeditObject.invalidate(/*可选使用::RECT()对象指定客户区*/) #

使窗口绘图区无效

richeditObject.invalidate(/*可选使用::RECT()对象指定客户区*/,0) #

使窗口绘图区无效
不刷新背景

richeditObject.isDialogMessage #

richeditObject.isDialogMessage = function(hParent,msg){/*在控件范围内替代父窗口的 isDialogMessage,  
可用于在控件范围内屏蔽对话框快捷键。  
可用于禁用 tab 控制键的多行文本框支持按 tab 输入制表符*/}

richeditObject.langOptions #

设置输入和远东语言选项
选项为数值,使用_IMF_前缀常量表示

richeditObject.left #

左侧坐标

richeditObject.leftText() #

获取参数 @1 指定位置之前的文本,
以字符为单位,负数自右侧倒计数。
不指定参数获取输和光标所在插入点之前的文本。

richeditObject.limit #

字符数限制

richeditObject.lineCount #

获取行数

richeditObject.lineFromChar() #

不指定参数则返回当前行

richeditObject.lineFromChar(指定位置) #

返回指定位置行数

richeditObject.lineLength(指定行号) #

返回指定行字符数
省略参数表示当前行,小于0表示自尾部倒数到指定行,-1表示最后一行

richeditObject.lineScroll(滚动到指定行) #

滚动条移动到指定行
如果不指定参数则滚动到最后一行

richeditObject.lineSel(行号,替换文本) #

选择指定的行的全部文本,
行号为-1时表示选取最后一行,
可选使用参数@2指定一个字符串用于替换该行文本

richeditObject.lineText() #

不指定行号参数,则获取当前行文本

richeditObject.lineText(指定行号) #

获取指定行文本
省略参数表示当前行,小于0表示自尾部倒数到指定行,-1表示最后一行

richeditObject.lineToChar(指定行号) #

获取指定行首字符位置
省略参数表示当前行,小于0表示自尾部倒数到指定行,-1表示最后一行

richeditObject.lines(忽略空白) #

for line in richeditObject.lines(true){ 
    /*遍历所有文本行,  
如果迭代器参数为true则清除每行首尾空格,并忽略空行*/
}

richeditObject.link #

控件是否自动识别超链接。
启用此属性会重新设置控件文本内容并丢失选区样式。
如果未定义 onHyperlink 事件,
则添加默认 onHyperlink 调用 raw.execute 函数打开链接。

禁用此属性不会重置文本内容,之前识别的超链接不会失效。

richeditObject.load() #

自参数 @1 指定的文件路径加载文本。
如果文件后缀为 .rtf 则加载 RTF 格式文本。
此函数内部调用 streamIn 函数。

richeditObject.log( ,'\r\n' ) #

追加字符串到文本框,可输入多个参数
如果超出limit属性设定的字符数限制则移除头部多余的字符
为提升性能,limit不可过大

richeditObject.modified #

文本内容是否已修改。
修改 text 属性、以及调用 log,print 等函数不会自动变更此属性。
用户输入、selText 变更、 appendTexxt,appendLink 调用都会变更此属性为 true。

richeditObject.modifyEvent(移除通知,添加通知) #

启用或禁用通知消息,返回EVENTMASK值

richeditObject.modifyStyle(remove,add,swpFlags) #

修改窗口样式,所有参数都是可选参数,
@remove 用数值指定要移除的样式,可使用 WS 前缀的常量
@add 用数值指定要添加的样式,可使用 WS 前缀的常量
@swpFlags 可选用数值指定调整窗口选项,可使用 SWP 前缀的常量
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos
细节请参考 win.modifyStyle 函数源码

richeditObject.modifyStyleEx(remove,add,swpFlags) #

修改窗口扩展样式,所有参数都是可选参数,
@remove 用数值指定要移除的样式,可使用 WS_EX 前缀的常量
@add 用数值指定要添加的样式,可使用 WS_EX 前缀的常量
@swpFlags 可选用数值指定调整窗口选项,可使用 SWP 前缀的常量
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos
细节请参考 win.modifyStyle 函数源码

richeditObject.oleCallback(implTable) #

import com.interface.IRichEditOleCallback;  

richeditObject.oleCallback(  

    /*自定义 OLE 回调事件,细节请参考 IRichEditOleCallback 接口文档。  
使用此函数必须先导入 com.interface.IRichEditOleCallback 接口。*/  
    GetDragDropEffect = function(drag,grfKeyState,effect){  

        /*所有 COM 实现的原生接口,第一个返回值为 0 表示执行成功。  
        返回值 2 指定拖放效果(effect),不指定则鼠标指针显示禁止拖放图标。*/  
        return 0,1/*_DROPEFFECT_COPY*/  
    }  

    QueryAcceptData = function(ptrDataObj,format,reco,really,hMetaPict){  

        /*really 表示放开鼠标,接收拖放数据*/  
        if(really){  

            /*用法请参考 com.interface.IDataObject 库参考文档*/  
            var dataObj = com.interface.IDataObject(ptrDataObj);  
            var txt = dataObj.getText();  

            /*返回 0 继续默认处理,文本放入控件,返回 _S_FALSE 阻止默认处理。*/  
            return 1/*_S_FALSE*/  
        }  

        return 0;   
    }  
)

richeditObject.onCancel() #

richeditObject.onCancel = function(){ 
    /*当前已按下ESC,返回true阻止默认事件*/
    return true;    
}

richeditObject.onChange() #

richeditObject.onChange = function(){ 
    if(owner.onModified)owner.onModified(true);

    owner.validateText("<\d+\.\d\d>|<\d+\.\d>|<\d+\.>|<\d+>"
        ,"请输入金额,小数点后不能超过 2 位!"); 

    /*响应事件,文本内容已变更,  
对于 richedit 修改 text 属性赋值文本会触发此事件。  
但可以通过 modified 属性判断是否由赋值 text 而触发。  
*/
}

richeditObject.onClipFormat() #

richeditObject..onClipFormat = function(format){
    /*特定的剪贴板格式发生粘贴。  
format 为数值表示的剪贴板格式,可用 `_CF_` 前缀常量表示。  
例如 _CF_UNICODETEXT ,细节可参考 win.clip 名字空间的库。  
仅支持 Win8 之后的操作系统。*/
}

richeditObject.onDpiFontChange #

richeditObject.onDpiFontChange = function(f){  
    return owner.setFont(f);/*自定义DPI字体缩放*/  
};

richeditObject.onFocusGot() #

richeditObject.onFocusGot = function(){ 
    /*响应事件,文本框已获得输入焦点*/
}

richeditObject.onFocusLost() #

richeditObject.onFocusLost = function(){
    /*响应事件,文本框已失去输入焦点*/
}

richeditObject.onHyperlink #

richeditObject.onHyperlink =function(message,href){  

    if( message = 0x202/*_WM_LBUTTONUP*/ ) {  
        raw.execute(href);  
    }  
}

richeditObject.onModified #

richeditObject.onModified = function(modified){ 
    /*使用代码变更modified属性后触发此事件,  
用户编辑文本导致变更modified属性不会触发此事件,  
可在onChange事件内主动调用此事件*/
}

richeditObject.onOk() #

richeditObject.onOk = function(ctrl,alt,shift){ 
    /*在控件内按下回车触发此事件,返回 true 阻止默认事件。  
回调参数分别表示对应按钮是否已同时按下。*/
    return true;    
}

richeditObject.onProtected #

richeditObject.onProtected = function(b,e,message){ 
    /*修改保护样式文本触发此事件。  
b,e 为被修改的选区,message 为触发消息。  
返回 true 禁止修改*/
    return true;    
}

richeditObject.onSize #

richeditObject.onSize = function( width,height,wParam ) {      
    /*父窗口改变大小后会自动触发此事件函数。  
注意 onSize 是 adjust 事件的别名,作用相同  
所有 win.form 创建的窗体和控件都支持 onSize(或 adjust)事件,  
重复赋值 onSize(或 adjust)会追加事件触发器而非替换原来的值。  

width 参数为窗口客户区宽度,height 参数为窗口客户区高度,  
wParam 参数来自 _WM_SIZE 消息的 wParam 参数,一般不用管。  
一般不建议添加一个 wndproc 仅仅是为了处理  _WM_SIZE 消息,  
定义 onSize 事件是更好的选择。  

};*/

richeditObject.orphanWindow(transparent,hwndBuddy,borderless) #

创建悬浮窗口。
悬浮窗口是模仿子窗口外观效果的独立窗口,父窗口可自动调整子窗口到设定位置。
可选参数 @transparent 为 true 则转换为分层透明窗口。
可选利用 @hwndBuddy 参数指定外部进程窗口句柄的并附加在内部控件上以实现相同的效果。
伙伴窗口总是会保持在悬浮窗口前面,并保持相同的大小、位置。
可重复调用此函数更换伙伴窗口,旧的伙伴窗口必须自行关闭。
可选指定 @borderless 参数 为 true 以移除 @hwndBuddy 的窗口边框。

richeditObject.padding #

文本边距
应通过setPadding函数设置该值

richeditObject.passwordChar #

指定隐藏密码的占位字符,该字符使用UTF-16编码,
例如指定为'*'u隐藏密码,指定为null正常显示文本

richeditObject.paste() #

粘贴

richeditObject.pointFromChar() #

返回参数 @1 指定索引的字符所在的客户区坐标。
第一个字符索引为 1,不指定参数则默认取当前输入光标所在字符位置。
函数返回两个值,分别为坐标 x,y 。

richeditObject.popMenu() #

弹出右键菜单

richeditObject.postMessage(msg,wParam,lParam) #

投递窗口消息到消息队列中
此函数用法请参考 ::User32.PostMessage

richeditObject.preadjust #

richeditObject.preadjust = function( cx,cy,wParam ) {      
    /*窗口缩放后重绘前、触发 adjust 事件之前触发此事件。  
所有 win.form 创建的窗体和控件都支持此事件,  
与 adjust 事件不同,对 preadjust 重复赋值则覆盖而不是追加事件。   

cx 参数为窗口宽度,cy 参数为窗口高度,  
wParam 为 _WM_SIZE 消息参数。*/    
};

richeditObject.print(...) #

将多个参数转换为字符串,
并使用制表符分隔各参数追加到文本尾部并追加换行。

对于 table 对象,aardio 会将其序列化为文本然后输出,
如果当前已经导入了 JSON 库,则将 table 对象自动转换为 JSON 后输出,
可以用于调试代码显示变量的值

richeditObject.printf(...) #

将多个参数调用string.format格式化后追加到文本尾部
并追加换行

richeditObject.publish("字符串参数",) #

在窗口所在界面线程发布消息,
运行界面线程所有所有调用subscribe函数订阅此消息的函数,
可添加任意个触发参数

richeditObject.rangeText(起始位置,结束位置) #

返回指定位置文本
1表示首字符

richeditObject.readonly #

是否只读
只读时禁止编辑

richeditObject.redo() #

重做

richeditObject.redraw() #

刷新

richeditObject.replaceAll #

全部替换查找到的文本

richeditObject.replaceAll(查找字符串,替换字符串,选项) #

全部替换查找到的文本
选项可使用win.dlg.findReplace对象的flags属性

richeditObject.replaceText #

替换替换文本

richeditObject.replaceText(查找字符串,替换字符串,选项,开始位置,结束位置) #

替换当前选区并查找下一个,
选项可使用 win.dlg.findReplace 对象的 flags 属性,
不指定查找范围时,aardio 根据选区自动确定下次替换的范围
替换完全部文本会重新重新设置查找范围为全部文本,
此函数返回2个数值,表示下一个找到的字符串起始、结束位置

richeditObject.resize(宽度,高度) #

如果指定了参数则调整窗口大小,
无论是否实际调整窗口大小,发送 _WM_SIZE 消息给窗口

richeditObject.right #

右侧坐标

richeditObject.rightText() #

获取参数 @1 指定位置之后的文本,
以字符为单位,负数自左侧倒计数。
不指定参数获取输和光标所在插入点之后的文本。

richeditObject.rtf #

获取或写入 RTF 格式文本。
读写此属性会自动转换为调用 streamIn,streamOut 函数。

richeditObject.save() #

保存控件文本到参数 @1 指定的文件路径。
如果文件后缀为 .rtf 则保存 RTF 格式文本。
此函数内部调用 streamOut 函数。

richeditObject.saveScale(scaleX,scaleY,dpiScaleX,dpiScaleY) #

根据控件当前的运行时位置更新设计时大小\如果控件允许自动缩放,窗口缩放时依据设计时大小按比例缩放
所有参数可省略,并且不建议写参数

richeditObject.scrollCaret() #

滚动到输入光标处,可选用一个数值参数指定新的输入光标位置。

richeditObject.scrollToLine(指定行) #

将光标移动到指定行,并滚动到该行。

richeditObject.selLine #

获取或设置当前行,
光标移动到该行开始处,并且滚动到该行,
设为-1跳转到最后一行

richeditObject.selText #

获取或写入选区文本
可写入 UTF-8 或 UTF-16 字符串。
指定 null 值设为空字符串,其他类型转为字符串写入。

richeditObject.selectAll() #

全选

richeditObject.sendMessage(msg,wParam,lParam) #

发送窗口消息
此函数用法请参考 ::User32.SendMessage

richeditObject.setCharformat #

修改样式,
如果修改字体大小请在窗体显示 DPI 缩放以后设置。
用法细节请参考 richedit 库函数文档。

richeditObject.setCharformat(charformat2,wParam) #

参数 @charformat2 使用 win.ui.ctrl.CHARFORMAT2 结构体设置文本样式,
可仅指定部分字段
wParam可省略,可选值参考EM_SETCHARFORMAT消息。\例如修改字体颜色可传入 {textColor=0x00ff00}

richeditObject.setClientRect(RECT区块) #

参数为指定文本客户区的RECT结构体
文本框必须在设计时指定为多行
在文本框改变大小必须重新设置

richeditObject.setFocus() #

设置焦点

richeditObject.setFont(指定字体) #

指定 LOGFONT 字体对象,或逻辑字体句柄
如果不指定 point 值并指定 h 值,字体会按控件的 DPI 缩放设置自动缩放。

richeditObject.setFont(混入字体属性) #

richeditObject.setFont(h=-12;name="Tahoma");

richeditObject.setLink #

设置当前选区为超链接。
如果未定义 onHyperlink 事件,
则添加默认 onHyperlink 调用 raw.execute 函数打开链接。

此函数会自动禁用自动识别超链接功能,但不会取消之前自动识别的超链接。

richeditObject.setLink(href,charFormat2) #

设置当前选区为超链接。
参数 @href 指定超链接或文件路径。
参数 @charFormat2 可选指定包含 win.ui.ctrl.CHARFORMAT2 部分字段的表

默认会通过插入位置获取超链接,
如果超链接位置改变而获取失败,则通过 title 指定显示名称获取链接

richeditObject.setPadding(上,右,下,左) #

设置文本边距
文本框必须在设计时指定为多行
在文本框改变大小后仍然可以保持此边距

richeditObject.setParent(控件对象) #

改变父窗口

richeditObject.setPos(x坐标,y坐标,宽,高,插入位置,参数) #

调整窗口位置或排序,所有参数可选
同时指定x,y坐标则移动位置
同时指定宽高则改变大小
指定插入位置(句柄或_HWND前缀常量)则调整Z序

richeditObject.setRect(rc) #

设置控件区块位置(::RECT结构体)

richeditObject.setRect(rc,true) #

设置控件屏幕区块位置(::RECT结构体)

richeditObject.setSelCharformat #

设置选区样式。
用法细节请参考 richedit 库函数文档。
如果当前没有选区则修改插入点样式,新的样式仅在插入位置修改前有效。

可调用控件的 setFocus,setsel 函数修改选区或光标插入位置。

richeditObject.setSelCharformat(charformat2) #

参数 @charformat2 使用 win.ui.ctrl.CHARFORMAT2 结构体设置文本样式,
传入仅指定部分字段的表将自动转换为 CHARFORMAT2 结构体。\例如修改字体颜色可传入 {textColor=0x00ff00}

richeditObject.setSelCharformat(null) #

将选区或光标插入点样式设为默认样式。

richeditObject.setsel(当前位置) #

无选区,
移动光标到指定位置的字符后面

richeditObject.setsel(起始位置,结束位置) #

设置选区,以字符为单位
1为首字符,选区包含起始与结束位置
如果结束位置小于开始位置,自动交换参数位置,
注意richedit实际以\n换行,输入字符中的\r\n作为一个字符计数
可以用-1表示文本尾部

richeditObject.show(true) #

显示控件

richeditObject.streamIn #

读入 RTF 文档或普通文档

richeditObject.streamIn(RTF文本) #

加载字符串参数 @1 指定的 RTF 格式文本

richeditObject.streamIn(格式,RTF文件路径) #

读入 RTF 文档或普通文档,
格式参数默认为 _SF_RTF 用于读入 RTF 文档,
指定为 _SF_TEXT 则读入普通文本

richeditObject.streamIn(格式,输入函数) #

richeditObject.streamIn(,function(format,buf,len){    
    return 0,file.readBuffer(buf,len);/*格式参数默认为 _SF_RTF,用于读入 RTF 文档,  
指定为 _SF_TEXT 则读入普通文本。  
成功读取文件回调函数应返回 0 与读取长度,  
否则请返回错误代码*/  
} )

richeditObject.streamOut #

输出 RTF 文档或普通文档

richeditObject.streamOut(格式) #

直接返回 RTF 格式或普通文本。
格式参数默认为 _SF_RTF 用于输出 RTF 文档,
指定为 _SF_TEXT 则输出普通文本

richeditObject.streamOut(格式,RTF文件路径) #

输出 RTF 文档或普通文档,
格式参数默认为 _SF_RTF 用于输出 RTF 文档,
指定为 _SF_TEXT 则输出普通文本

richeditObject.streamOut(格式,输出函数) #

richeditObject.streamOut(,function(format,buf,len){    
    var ok,bytes = file.writeBuffer(buf,len);/*保存RTF文档*/   
    return 0,bytes;  
} )

richeditObject.tabNext() #

返回对象:staticObject

richeditObject.tabNext(移动焦点,是否反向) #

获取下一个支持tab控制焦点的控件
参数@1为true会自动移动焦点到该控件
参数@2为true则获取上一个控件,否则获取下一个控件

richeditObject.text #

获取或写入编辑控件文本属性。
可写入 UTF8 或 UTF16 字符串,写入 null 值转换为空字符串,
其他类型值用 tostring 转为字符串后写入。
注意 edit 控件使用'\r\
'表示换行,而 richedit 控件则使用'\
'表示换行,
用双引号或反引号包含字符串赋值时换行会自动将换行解析为'\
',
例如 winform.richedit.txt = "文本
第二行文本"

richeditObject.theme #

外观主题,例如
winform.button.theme = "Explorer"
winform.button.theme = false

richeditObject.threadCallable() #

开启此控件的跨线程调用功能

richeditObject.top #

顶部坐标

richeditObject.translateAccelerator(msg) #

richeditObject.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以取消该消息的默认行为*/
        }
    }   
}

richeditObject.translateCommand() #

允许转发转发子窗口的命令(_WM_COMMAND)与通知(_WM_NOTIFY)消息,
避免子窗口 oncommand,onnotify 等回调失效。
同时会处理子窗口的 _WM_CTLCOLORSTATIC 等消息,
以避免部分外观属性失效

richeditObject.undo() #

撤消

richeditObject.update() #

重绘invalidate函数指定的区块

richeditObject.vScroll() #

滚动到底部

richeditObject.vScroll(_SB) #

滚动竖向滚动条

richeditObject.valid #

窗口是否有效,
窗口未关闭返回 true ,
窗口已关闭或正在关闭返回 false

richeditObject.validateText #

校验输入文本。
全部文本完全符合要求返回 true,否则返回 false。

可在 onChange 事件内调用此函数实时校验输入。

richeditObject.validateText(校验输入函数,是否设置光标) #

调用参数 @1 指定的函数校验控件的文本属性,
该函数必须自参数中接收当前文本并返回合法文本或 null。
然后将文本设为符合合法的文本,如果校验函数返回 null 设为空字符串。

如果修改了文本且指定了参数 @2 为 true,\则将焦点切换到该控件,然后将输入光标设置到文本尾部。
注意仅 edit 控件可直接显示气泡提示,
richedit 无此功能可使用其他控件显示错误信息。

richeditObject.validateText(模式串,是否设置光标) #

用字符串参数 @1 指定的模式串校验控件的文本属性。
将文本设为符合匹配的文本,如果找不到匹配文本设为空字符串。

如果修改了文本且指定了参数 @2 为 true,\则将焦点切换到该控件,然后将输入光标设置到文本尾部。
注意仅 edit 控件可直接显示气泡提示,
richedit 无此功能可使用其他控件显示错误信息。

richeditObject.validateText(限制金额示例,是否设置光标) #

richeditObject.validateText("<\d+\.\d\d>|<\d+\.\d>|<\d+\.>|<\d+>",true)

richeditObject.width #

宽度

richeditObject.wrap #

是否启用自动换行,仅 richedit 支持

richeditObject.zoom #

缩放比例,必须大于 1/32 并小于 32
Richedit 存在一个 BUG:如果不是左对齐,只要设置缩放 —— 包含中文就会偏移错乱,
所以右对齐或居中对齐后,自动 DPI 缩放将会更改为设置文本框默认字体,
这会导致局部字体样式被重置为默认字体

TextDocumentObject 成员列表 #

TextDocumentObject.BeginEditCollection() #

开始编辑

TextDocumentObject.DefaultTabStop #

制表符宽度

TextDocumentObject.EndEditCollection() #

结束编辑

TextDocumentObject.Name #

文件名

TextDocumentObject.New() #

新建文件

TextDocumentObject.Open(filename,flags,codepage) #

打开文档

TextDocumentObject.Range(first,lim) #

返回选区

TextDocumentObject.RangeFromPoint(x,y) #

指定坐标返回选区

TextDocumentObject.Redo(number) #

重做

TextDocumentObject.Save(filename,flags,codepage) #

保存文档

TextDocumentObject.Saved #

是否保存

TextDocumentObject.Selection #

选区对象

TextDocumentObject.Selection.Font #

字体

返回对象:TomTextFontObject

TextDocumentObject.Undo(number) #

撤消

TextDocumentObject.tomFalse #

假值

TextDocumentObject.tomToggle #

切换原来的值

TextDocumentObject.tomTrue #

真值

TextDocumentObject.tomUndefined #

未定义值

TomTextFontObject 成员列表 #

TomTextFontObject.Bold #

是否粗体,
可使用tomTrue,tomFalse等值

TomTextFontObject.ForeColor #

字体颜色

TomTextFontObject.Name #

字体名

TomTextFontObject.Size #

字体大小

charformat2Object 成员列表 #

charformat2Object.backColor #

背景颜色,GDI 颜色格式( 0xBBGGRR )。

charformat2Object.bold #

是否粗体,仅用于写入样式。
设置了这个值会在应用样式前自动修改 weight 属性。

charformat2Object.charSet #

字符集

charformat2Object.disabled #

偏移一个像素,仅用于写入样式。

charformat2Object.effects #

效果

charformat2Object.faceName #

字体名

charformat2Object.getFont() #

返回LOGFONT对象

返回 LOGFONT 对象

返回对象:logfontObject

charformat2Object.italic #

是否斜体,仅用于写入样式。

charformat2Object.lcid #

区域ID

charformat2Object.mask #

掩码,这个一般不用管

charformat2Object.pitchAndFamily #

字体族

charformat2Object.point #

字体大小,以 pt 为单位。仅用于写入样式。
在设置样式时指定 point 会在应用样式前自动修改 yHeight 的值。
修改字体大小请在窗体显示并且 DPI 初始化缩放完成以后再设置,不然会被重复放大。

charformat2Object.protected #

保护文本,修改时触发 onProtected 事件。
仅用于整个控件,不适用于部分选区。
此属性仅用于写入样式。

charformat2Object.spacing #

字体间距

charformat2Object.strikeout #

是否显示删除线,仅用于写入样式。

charformat2Object.textColor #

字体颜色,GDI 颜色格式( 0xBBGGRR )。

charformat2Object.underline #

是否粗体,仅用于写入样式。

charformat2Object.underlineType #

下划线类型

charformat2Object.weight #

字体重量

charformat2Object.yHeight #

字体大小,以 twips 为单位。
修改字体大小请在窗体显示并且 DPI 初始化缩放完成以后再设置,不然会被重复放大。

charformat2Object.yOffset #

偏移

自动完成常量

_CFE_ALLCAPS=0x80
_CFE_AUTOBACKCOLOR=0x4000000
_CFE_AUTOCOLOR=0x40000000
_CFE_BOLD=1
_CFE_DISABLED=0x2000
_CFE_EMBOSS=0x800
_CFE_HIDDEN=0x100
_CFE_IMPRINT=0x1000
_CFE_ITALIC=2
_CFE_LINK=0x20
_CFE_OUTLINE=0x200
_CFE_PROTECTED=0x10
_CFE_REVISED=0x4000
_CFE_SHADOW=0x400
_CFE_SMALLCAPS=0x40
_CFE_STRIKEOUT=8
_CFE_SUBSCRIPT=0x10000
_CFE_SUPERSCRIPT=0x20000
_CFE_UNDERLINE=4
_CFM_ALL=-134217665
_CFM_ALL2=-16777217
_CFM_ALLCAPS=0x80
_CFM_ANIMATION=0x40000
_CFM_BACKCOLOR=0x4000000
_CFM_BOLD=1
_CFM_CHARSET=0x8000000
_CFM_COLOR=0x40000000
_CFM_DISABLED=0x2000
_CFM_EFFECTS=0x4000003F
_CFM_EFFECTS2=0x44037FFF
_CFM_EMBOSS=0x800
_CFM_FACE=0x20000000
_CFM_HIDDEN=0x100
_CFM_IMPRINT=0x1000
_CFM_ITALIC=2
_CFM_KERNING=0x100000
_CFM_LCID=0x2000000
_CFM_LINK=0x20
_CFM_OFFSET=0x10000000
_CFM_OUTLINE=0x200
_CFM_PROTECTED=0x10
_CFM_REVAUTHOR=0x8000
_CFM_REVISED=0x4000
_CFM_SHADOW=0x400
_CFM_SIZE=0x80000000
_CFM_SMALLCAPS=0x40
_CFM_SPACING=0x200000
_CFM_STRIKEOUT=8
_CFM_STYLE=0x80000
_CFM_SUBSCRIPT=0x30000
_CFM_SUPERSCRIPT=0x30000
_CFM_UNDERLINE=4
_CFM_UNDERLINETYPE=0x800000
_CFM_WEIGHT=0x400000
_CFU_CF1UNDERLINE=0xFF
_CFU_INVERT=0xFE
_CFU_UNDERLINE=1
_CFU_UNDERLINEDASH=5
_CFU_UNDERLINEDASHDOT=6
_CFU_UNDERLINEDASHDOTDOT=7
_CFU_UNDERLINEDOTTED=4
_CFU_UNDERLINEDOUBLE=3
_CFU_UNDERLINEDOUBLEWAVE=0xB
_CFU_UNDERLINEHAIRLINE=0xA
_CFU_UNDERLINEHEAVYWAVE=0xC
_CFU_UNDERLINELONGDASH=0xD
_CFU_UNDERLINENONE=0
_CFU_UNDERLINETHICK=9
_CFU_UNDERLINETHICKDASH=0xE
_CFU_UNDERLINETHICKDASHDOT=0xF
_CFU_UNDERLINETHICKDASHDOTDOT=0x10
_CFU_UNDERLINETHICKDOTTED=0x11
_CFU_UNDERLINETHICKLONGDASH=0x12
_CFU_UNDERLINEWAVE=8
_CFU_UNDERLINEWORD=2
_ENM_CHANGE=0x1
_ENM_CORRECTTEXT=0x400000
_ENM_DRAGDROPDONE=0x10
_ENM_DROPFILES=0x100000
_ENM_IMECHANGE=0x800000
_ENM_KEYEVENTS=0x10000
_ENM_LANGCHANGE=0x1000000
_ENM_LINK=0x4000000
_ENM_LOWFIRTF=0x8000000
_ENM_MOUSEEVENTS=0x20000
_ENM_NONE=0x0
_ENM_OBJECTPOSITIONS=0x2000000
_ENM_PAGECHANGE=0x40
_ENM_PARAGRAPHEXPANDED=0x20
_ENM_PROTECTED=0x200000
_ENM_REQUESTRESIZE=0x40000
_ENM_SCROLL=0x4
_ENM_SCROLLEVENTS=0x8
_ENM_SELCHANGE=0x80000
_ENM_UPDATE=0x2
_IMF_AUTOFONT=2
_IMF_AUTOFONTSIZEADJUST=0x10
_IMF_AUTOKEYBOARD=1
_IMF_CLOSESTATUSWINDOW=8
_IMF_DUALFONT=0x80
_IMF_FORCEACTIVE=0x40
_IMF_FORCEDISABLE=4
_IMF_FORCEENABLE=2
_IMF_FORCEINACTIVE=0x80
_IMF_FORCENONE=1
_IMF_FORCEREMEMBER=0x100
_IMF_IMEALWAYSSENDNOTIFY=8
_IMF_IMECANCELCOMPLETE=4
_IMF_MULTIPLEEDIT=0x400
_IMF_SMODE_NONE=2
_IMF_SMODE_PLAURALCLAUSE=1
_IMF_UIFONTS=0x20
_IMF_VERTICAL=0x20
_SCF_ALL=4
_SCF_ASSOCIATEFONT=0x10
_SCF_ASSOCIATEFONT2=0x40
_SCF_DEFAULT=0
_SCF_NOKBUPDATE=0x20
_SCF_SELECTION=1
_SCF_USEUIRULES=8
_SCF_WORD=2
_SFF_PWI=0x800
_SF_PWI=0x10802
_SF_RTF=2
_SF_TEXT=1
_SF_UNICODE=0x10
_SF_UTEXT=0x11

Markdown 格式