# win.ui.ctrl.richedit 库模块帮助文档

<details>  <summary>必读文档</summary>  <p>

## 字符计数规则

虽然控件的 text 属性返回的是 UTF-8 编码的文本。
但窗口控件内部以 UTF-16 编码处理文本，需要以代理对编码的字符会计为 2 个字符单位。
edit,richedit 的所有与字符位置有关的方法、属性、参数都按 UTF-16 编码计算字符位置。
例如 getSel,setSel 方法，caretPos 属性等。

实际上获取所有窗口控件文本的 win.getText 函数也是按 UTF-16 编码规则计算字符长度与位置。

aardio 的 string.slice,string.left,string.right 等字符串函数
在指定以字符单位计数时是按 UTF-8 编码规则计数，多字节字符总是计为 1 个单位。
请注意与 edit,richedit 等返回的 UTF-16 编码的字符位置进行区别。

需要以代理对表示的字符并不多见，如果文本不包含代理对编码，
则 UTF-8 或 UTF-16 编码计算的字符数与字符位置是等价的。

## 文本框、富文本框的不同换行规则

在窗口程序中，要注意以下规则：

- 文本框（win.ui.ctrl.edit）始终必须以 `'\r\n'` 换行，
并在计算选区时将 `'\r\n'`  计为两个字符单位。
如果传入文本为单个 `'\n'` 换行则在 edit 控件内不会显示为有效换行。

- 无论输入文本使用回车换行（ `'\r\n'` ）还是单个 `'\n'` 换行，
富文本框（win.ui.ctrl.richedit） 都会将文本转换为规范化为以  `'\r\n'` 换行，
并在渲染和计算选区时将 `'\r\n'` 视为单个 `'\n'` 换行。

edit 控件的 `getLength()` 方法返回的长度将有效换行计为 2 个单位（`'\r\n'` ）。
richedit 控件的 `getLength()` 方法默认将换行计为 1 个单位（`'\n'` ） 。

另外，richedit 控件可使用 `getLength(true)` 返回将换行计为 2 个单位的字符计数长度。
而且 richedit 控件额外提供 `getLengthEx(flags)` 方法（基于 `0x45F/*_EM_GETTEXTLENGTHEX*/` 消息）。

## 设置文本样式

### 使用 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 文档](https://learn.microsoft.com/zh-cn/windows/win32/controls/text-object-model?redirectedfrom=MSDN)

### 使用 CHARFORMAT2 结构体设置样式

以下函数会用到 CHARFORMAT2（这里指的是 win.ui.ctrl.CHARFORMAT2 类） 结构体。

- appendText 支持任意个文本参数与任意个表参数，
表参数转换为 CHARFORMAT2 并修改当前插入样式，默认对后续参数生效。
参数为空表 `{}` 恢复默认样式，函数退出时也会恢复默认样式。

	[示例](https://www.aardio.com/zh-cn/doc/example/Windows/edit/CHARFORMAT2.html);

- setSelCharformat 修改当前选区或插入点样式，传入指定 CHARFORMAT2 部分字段的表即可。
- getSelCharformat 获取当前选区或插入点样式，返回 CHARFORMAT2
- setCharformat 修改样式 ，传入指定 CHARFORMAT2 部分字段的表即可。
- getCharformat 获取样式，返回 CHARFORMAT2
- setLink 设置超链接样式
- appendLink 追加超链接

设置样式的函数可直接指定普通表参数（不需要指定全部 CHARFORMAT2 字段），
aardio 会自动将这些表转换为完整的 CHARFORMAT2 结构体。 
并且会自动设置 mask 字段的掩码。
在 aardio 会自动设置值，所以这个最复杂的部分可以不用管了。
所以只要字段名写对就可以了。

CHARFORMAT2 有以下字段

- backColor: 背景颜色，GDI 颜色格式（ 0xBBGGRR ）。
- textColor: 字体颜色，GDI 颜色格式（ 0xBBGGRR ）。
- faceName: 字体名
- bold = 是否粗体，仅用于写入样式。\n设置了这个值会在应用样式前自动修改 weight 属性。
- underline = 是否粗体，仅用于写入样式。 
- italic = 是否斜体，仅用于写入样式。 
- strikeout = 是否显示删除线，仅用于写入样式。  
- disabled = 偏移一个像素，仅用于写入样式。
- protected = 保护文本，修改时触发 onProtected 事件。\n仅用于写入样式，仅用于设置全部文本，不适用选区。
- weight: 字体重量，一般不要改，改 bold 即可
- spacing: 字体间距
- effects: 效果
- yHeight: 字体大小，以 twips  为单位
- point: 字体大小，以 pt 为单位。设置样式时指定 point 会在应用样式前自动修改 yHeight 的值。
- yOffset: 偏移 
- charSet: 字符集
- pitchAndFamily: 字体族 
- lcid: 区域ID
- underlineType: 下划线类型 
- mask 掩码，这个一般不用管
- getFont() 返回LOGFONT对象

注意修改字体大小请在窗体显示并且 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 的自动完成可自动转换为实际的常量值。
</p></details>

## win.ui.ctrl 成员列表 <a id="win.ui.ctrl" href="#win.ui.ctrl">&#x23;</a>

### win.ui.ctrl.CHARFORMAT2() <a id="win.ui.ctrl.CHARFORMAT2" href="#win.ui.ctrl.CHARFORMAT2">&#x23;</a>
用于创建 richedit 支持的 CHARFORMAT2 结构体。  
因为 richedit 提供的函数可将样式表参数自动转换为此结构，  
所以一般不需要手动创建此结构体。  

注意 aardio 中的 CHARFORMAT2 结构体字段命名与 MSDN 有微小差别。  

[返回对象:charformat2Object](#charformat2Object)

### win.ui.ctrl.richedit <a id="win.ui.ctrl.richedit" href="#win.ui.ctrl.richedit">&#x23;</a>
多功能文本框控件支持库

### win.ui.ctrl.richedit() <a id="win.ui.ctrl.richedit" href="#win.ui.ctrl.richedit">&#x23;</a>
多功能文本框控件  

[返回对象:richeditObject](#richeditObject)

## richeditObject 成员列表 <a id="richeditObject" href="#richeditObject">&#x23;</a>

### richeditObject._defWindowProc(hwnd,message,wParam,lParam) <a id="richeditObject._defWindowProc" href="#richeditObject._defWindowProc">&#x23;</a>
用于在 wndproc 回调中提前调用默认消息回调函数,  
所有窗口和控件定义了 wndproc 回调以后会自动创建这个函数,  
调用此函数以后,wndproc 必须指定非 null 返回值,  
以避免再次重复调用默认回调函数

### richeditObject._parentForm <a id="richeditObject._parentForm" href="#richeditObject._parentForm">&#x23;</a>
返回创建控件的容器窗口（win.form对象），所有窗口控件都拥有此只读属性。  
对于使用窗体设计器创建的窗口，也就是返回设计时窗体容器。  

即使子窗口移除子窗口样式、更改父子关系，或以 orphanWindow显示，  
控件的 _parentForm 始终都不会改变  

[返回对象:winform](https://www.aardio.com/zh-cn/doc/library-reference/win/ui/_.html#winform)

### richeditObject.addCtrl() <a id="richeditObject.addCtrl" href="#richeditObject.addCtrl">&#x23;</a>
[返回对象:staticObject](https://www.aardio.com/zh-cn/doc/library-reference/win/ui/ctrl/static.html#staticObject)

### richeditObject.addCtrl(controlsPropertiesTable) <a id="richeditObject.addCtrl" href="#richeditObject.addCtrl">&#x23;</a>

```aardio
richeditObject.addCtrl(  
	cls="spin";marginRight=2;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 )  
		}  
	}  
)/*在 richedit 控件窗口内添加子窗口*/
```

### richeditObject.adjust <a id="richeditObject.adjust" href="#richeditObject.adjust">&#x23;</a>

```aardio
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 <a id="richeditObject.appendLink" href="#richeditObject.appendLink">&#x23;</a>
在文本尾部追加超链接。  
如果未定义 onHyperlink 事件，  
则添加默认 onHyperlink 调用 raw.execute 函数打开链接。  

此函数会自动禁用自动识别超链接功能，但不会取消之前自动识别的超链接。

### richeditObject.appendLink(title,href,charFormat2) <a id="richeditObject.appendLink" href="#richeditObject.appendLink">&#x23;</a>
在文本尾部追加超链接。  
参数 @title 指定显示文本。  
参数 @href 指定超链接或文件路径。  
参数 @charFormat2 可选指定包含 win.ui.ctrl.CHARFORMAT2 部分字段的表  

默认会通过插入位置获取超链接，  
如果超链接位置改变而获取失败，则通过 title 指定显示名称获取链接。

### richeditObject.appendText <a id="richeditObject.appendText" href="#richeditObject.appendText">&#x23;</a>
追加文本并移动插入点（caretPos）到文本尾部。  
用法细节请参考 richedit 库函数文档。

### richeditObject.appendText(追加文本-..) <a id="richeditObject.appendText" href="#richeditObject.appendText">&#x23;</a>
追加文本并移动插入点（caretPos）到文本尾部。  
可指定零个、或多个参数，参数可以是字符串、buffer、数值。  
如果参数是表对象，则将该表作为 setSelCharformat 的参数修改插入点样式。  
如果修改字体大小请在窗体显示 DPI 缩放以后设置。  
如果传入了样式参数，在函数调用结束总是会恢复为默认样式。  
传入其他类型参数会抛出异常。  

函数返回插入文本以后控件的文本总长度。

### richeditObject.bgcolor <a id="richeditObject.bgcolor" href="#richeditObject.bgcolor">&#x23;</a>
获取或修改背景颜色、数值

### richeditObject.bottom <a id="richeditObject.bottom" href="#richeditObject.bottom">&#x23;</a>
底部坐标

### richeditObject.canCopy() <a id="richeditObject.canCopy" href="#richeditObject.canCopy">&#x23;</a>
能否复制

### richeditObject.canPaste() <a id="richeditObject.canPaste" href="#richeditObject.canPaste">&#x23;</a>
能否粘贴

### richeditObject.canRedo() <a id="richeditObject.canRedo" href="#richeditObject.canRedo">&#x23;</a>
能否重做

### richeditObject.canUndo() <a id="richeditObject.canUndo" href="#richeditObject.canUndo">&#x23;</a>
能否撤消

### richeditObject.capture <a id="richeditObject.capture" href="#richeditObject.capture">&#x23;</a>
是否捕获全局鼠标消息

### richeditObject.caretPos <a id="richeditObject.caretPos" href="#richeditObject.caretPos">&#x23;</a>
获取或设置文本插入点（输入位置），以字符为单位。  
输入焦点在当前控件时插入点显示输入光标，仅设置插入点并不会获得焦点。  
此属性以 UTF-16 编码规则计算字符数，代理对计为 2 个单位。  

获取值时如果有选区则返回选区最后一个字符的位置，  

无选区则返回插入点前面的字符位置。  

仅在设置值时可以用负数则表示尾部倒计数，-1 表示文本尾部。  
> 调用 setSel 方法并指定单个参数改变插入点位置（caretPos）时  
> 负数相对当前位置（前提是当前插入点位置大于 0）或者相对文本尾部记数（无插入点时）

### richeditObject.center(目标窗口) <a id="richeditObject.center" href="#richeditObject.center">&#x23;</a>
在目标窗口区域内居中，并调整以保证显示在父窗口或屏幕工作区内。  

参数 @1 可指定目标窗口或者目标窗口句柄，设为 0 表示桌面，  
省略目标窗口则默认取父窗口或所有者窗口。

### richeditObject.charFromPoint(x,y) <a id="richeditObject.charFromPoint" href="#richeditObject.charFromPoint">&#x23;</a>
返回 x,y 指定的控件客户区坐标所在的字符索引，  
第一个字符索引为 1 。

### richeditObject.className <a id="richeditObject.className" href="#richeditObject.className">&#x23;</a>
运行时类名

### richeditObject.clear() <a id="richeditObject.clear" href="#richeditObject.clear">&#x23;</a>
清除选中文本

### richeditObject.clientHeight <a id="richeditObject.clientHeight" href="#richeditObject.clientHeight">&#x23;</a>
控件窗口客户区宽度，只读属性。

### richeditObject.clientWidth <a id="richeditObject.clientWidth" href="#richeditObject.clientWidth">&#x23;</a>
控件窗口客户区宽度，只读属性。

### richeditObject.close() <a id="richeditObject.close" href="#richeditObject.close">&#x23;</a>
关闭控件窗

### richeditObject.cls <a id="richeditObject.cls" href="#richeditObject.cls">&#x23;</a>
设计时类名

### richeditObject.color <a id="richeditObject.color" href="#richeditObject.color">&#x23;</a>
取或修改字体颜色、数值

### richeditObject.copy() <a id="richeditObject.copy" href="#richeditObject.copy">&#x23;</a>
复制选区。  
如果要复制全部 RTF 文档，  
可用 win.clip.data("Rich Text Format") 复制

### richeditObject.createTextDocument() <a id="richeditObject.createTextDocument" href="#richeditObject.createTextDocument">&#x23;</a>
返回 COM 接口的[TOM 文本对象](https://learn.microsoft.com/zh-cn/windows/win32/controls/text-object-model?redirectedfrom=MSDN)  

[返回对象:TextDocumentObject](#TextDocumentObject)

### richeditObject.cut() <a id="richeditObject.cut" href="#richeditObject.cut">&#x23;</a>
剪切选区

### richeditObject.deselect() <a id="richeditObject.deselect" href="#richeditObject.deselect">&#x23;</a>
取消选定

### richeditObject.disableInputMethod() <a id="richeditObject.disableInputMethod" href="#richeditObject.disableInputMethod">&#x23;</a>
在此控件中关闭输入法, 仅支持英文输入

### richeditObject.disabled <a id="richeditObject.disabled" href="#richeditObject.disabled">&#x23;</a>
控件时否可见

### richeditObject.disabledText <a id="richeditObject.disabledText" href="#richeditObject.disabledText">&#x23;</a>
当指定文本时，禁用此控件并显示指定文本。  
指定为 null 时，启用此控件并恢复控件之前的正常文本。

### richeditObject.dump(变量) <a id="richeditObject.dump" href="#richeditObject.dump">&#x23;</a>
显示变量的值,支持多参数  
注意仅显示普通table,string,number等类型的值,不显示函数等

### richeditObject.enablePopMenu() <a id="richeditObject.enablePopMenu" href="#richeditObject.enablePopMenu">&#x23;</a>

```aardio
richeditObject.enablePopMenu(function(){  
	return {   
		{ /*分隔线*/ };   
		{ "自定义菜单项";  function(id){  
			/*enablePopMenu 用于启用文本框的右键菜单。  
可选指定要增加的菜单配置表（或返回菜单配置表的函数）作为参数。  
菜单配置表将作为参数传给 win.ui.popmenu 对象的 addTable 函数。  
格式请查看该函数说明*/  
		}; !owner.canCopy() ? 1/*_MF_GRAYED*/ : 0}; 	  
	}  
})
```

### richeditObject.findText <a id="richeditObject.findText" href="#richeditObject.findText">&#x23;</a>
查找文本

### richeditObject.findText(查找字符串,选项,开始位置,结束位置) <a id="richeditObject.findText" href="#richeditObject.findText">&#x23;</a>
查找  
选项可使用 win.dlg.findReplace 对象的 flags 属性,  
不指定查找范围时,aardio 根据选区自动确定下次替换的范围  
替换完全部文本会重新重新设置查找范围为全部文本  

此函数返回2个数值，表示查找到的字符串起始、结束位置  
如果参数中未指定查找位置,会自动选中查找到的字符串

### richeditObject.firstVisibleLine <a id="richeditObject.firstVisibleLine" href="#richeditObject.firstVisibleLine">&#x23;</a>
获取或设置控制最上面的可见行。  
设为 1 则滚动到首行，设为 -1 则滚动到最后一行可见

### richeditObject.font <a id="richeditObject.font" href="#richeditObject.font">&#x23;</a>
控件字体（LOGFONT 结构体），  
注意获取该属性总是返回新的 LOGFONT 对象，  
修改返回字体并不会更新控件字体，  
除非重新赋值。  

建议尽量优先使用 getFont 或 setFont 函数，  
以增强代码可读性  

字体会根据控件设置自动处理 DPI 缩放，不需要事先缩放字体大小

### richeditObject.getCharformat() <a id="richeditObject.getCharformat" href="#richeditObject.getCharformat">&#x23;</a>
[返回对象:charformat2Object](#charformat2Object)

### richeditObject.getCharformat(mask) <a id="richeditObject.getCharformat" href="#richeditObject.getCharformat">&#x23;</a>
返回 win.ui.ctrl.CHARFORMAT2 结构体。  
参数 @mask 指定获取字段掩码,省略获取全部值

### richeditObject.getClientRect() <a id="richeditObject.getClientRect" href="#richeditObject.getClientRect">&#x23;</a>
控件客户区块位置(::RECT结构体)  

[返回对象:rectObject](https://www.aardio.com/zh-cn/doc/library-reference/global/_.html#rectObject)

### richeditObject.getFont() <a id="richeditObject.getFont" href="#richeditObject.getFont">&#x23;</a>
返回控件 LOGFONT 字体，  
返回对象的 h 值会按控件的 DPI 缩放设置自动还原为缩放前大小。  

[返回对象:logfontObject](#logfontObject)

### richeditObject.getFont(true) <a id="richeditObject.getFont" href="#richeditObject.getFont">&#x23;</a>
返回控件 LOGFONT 字体，  
返回对象的 h 值为字体实际大小，不会按控件 DPI 设置还原。  
返回字体会设置 noScale 属性为 true,  
使用控件的 setFont 函数或赋值 font 属性时，  
noScale 属性为 true 的字体同样不会进行自动 DPI 缩放  

[返回对象:logfontObject](#logfontObject)

### richeditObject.getLength <a id="richeditObject.getLength" href="#richeditObject.getLength">&#x23;</a>
获取文本长度（字符数）

### richeditObject.getLength(raw) <a id="richeditObject.getLength" href="#richeditObject.getLength">&#x23;</a>
默认将回车换行计为 1 个单位。  
如果参数为 true 则将回车换行计为 2 个单位。  

richedit 的 setSel,getSel,caretPos 都将回车换行计为 1 个单位。  
这与 edit 控件将回车换行计为 2 个单位是不同的。

### richeditObject.getLengthEx <a id="richeditObject.getLengthEx" href="#richeditObject.getLengthEx">&#x23;</a>
获取文本长度

### richeditObject.getLengthEx(flags) <a id="richeditObject.getLengthEx" href="#richeditObject.getLengthEx">&#x23;</a>
可选用参数 @flags 指定选项。  
一个或多个 _GTL 前缀的常量数值，多个值用 `|` 组合。  

默认返回字符数，回车换行计为 1 个单位。

### richeditObject.getParent() <a id="richeditObject.getParent" href="#richeditObject.getParent">&#x23;</a>
返回父窗口  

[返回对象:staticObject](https://www.aardio.com/zh-cn/doc/library-reference/win/ui/ctrl/static.html#staticObject)

### richeditObject.getPos() <a id="richeditObject.getPos" href="#richeditObject.getPos">&#x23;</a>
返回相对坐标,宽,高  
x,y,cx,cy=win.getPos(hwnd)

### richeditObject.getRect() <a id="richeditObject.getRect" href="#richeditObject.getRect">&#x23;</a>
控件区块位置(::RECT结构体)

### richeditObject.getRect(true) <a id="richeditObject.getRect" href="#richeditObject.getRect">&#x23;</a>
控件屏幕区块位置(::RECT结构体)

### richeditObject.getRoot() <a id="richeditObject.getRoot" href="#richeditObject.getRoot">&#x23;</a>
获取顶层父窗口，这个函数会查找 orphanWindow 的父窗口

### richeditObject.getSel() <a id="richeditObject.getSel" href="#richeditObject.getSel">&#x23;</a>
获取选区起始位置，结束位置。  
选区包含起始与结束位置的字符，首字符位置为 1 。  
开始位置在指定的字符前面，结束位置表示指定的字符后面。  
只有一个返回值时表示无选区，并表示插入点（caretPos）在返回的字符位置后面。  
返回单个 0 表示插入点（caretPos）在最前面，并且无选区。  

此函数以 UTF-16 编码规则计算字符数，代理对计为 2 个单位。

### richeditObject.getSelCharformat() <a id="richeditObject.getSelCharformat" href="#richeditObject.getSelCharformat">&#x23;</a>
[返回对象:charformat2Object](#charformat2Object)

### richeditObject.getSelCharformat(mask) <a id="richeditObject.getSelCharformat" href="#richeditObject.getSelCharformat">&#x23;</a>
返回选区 win.ui.ctrl.CHARFORMAT2 结构体。  
参数 @mask 指定获取字段掩码,省略获取全部值

### richeditObject.hScroll() <a id="richeditObject.hScroll" href="#richeditObject.hScroll">&#x23;</a>
滚动到右侧

### richeditObject.hScroll(_SB) <a id="richeditObject.hScroll" href="#richeditObject.hScroll">&#x23;</a>
滚动横向滚动条

### richeditObject.height <a id="richeditObject.height" href="#richeditObject.height">&#x23;</a>
高度

### richeditObject.hide <a id="richeditObject.hide" href="#richeditObject.hide">&#x23;</a>
当前控件窗口是否隐藏。  
仅检查当前窗口的可见性样式（窗口 是否移除了 _WS_VISIBLE 样式）。  
不考虑父窗口是否可见，不考虑是否被其他窗口遮挡。  
如果需要同时判断父窗口的可见性，应改用 win.isVisible 函数。  

以 `.` 前导的 `.hide()` 作为成员函数被调用时，  
作用等价于将 hide 属性设为 null 。

### richeditObject.hwnd <a id="richeditObject.hwnd" href="#richeditObject.hwnd">&#x23;</a>
控件句柄

### richeditObject.id <a id="richeditObject.id" href="#richeditObject.id">&#x23;</a>
控件ID

### richeditObject.inflateClientRect(dx,dy) <a id="richeditObject.inflateClientRect" href="#richeditObject.inflateClientRect">&#x23;</a>
正数增大,负数缩小文本客户区  
文本框必须在设计时指定为多行  
在文本框改变大小必须重新设置

### richeditObject.invalidate(/*可选使用::RECT()对象指定客户区*/) <a id="richeditObject.invalidate(/*可选使用::RECT" href="#richeditObject.invalidate(/*可选使用::RECT">&#x23;</a>
使窗口绘图区无效

### richeditObject.invalidate(/*可选使用::RECT()对象指定客户区*/,0) <a id="richeditObject.invalidate(/*可选使用::RECT" href="#richeditObject.invalidate(/*可选使用::RECT">&#x23;</a>
使窗口绘图区无效  
不刷新背景

### richeditObject.isDialogMessage <a id="richeditObject.isDialogMessage" href="#richeditObject.isDialogMessage">&#x23;</a>

```aardio
richeditObject.isDialogMessage = function(hParent,msg){/*在控件范围内替代父窗口的 isDialogMessage，  
可用于在控件范围内屏蔽对话框快捷键。  
可用于禁用 tab 控制键的多行文本框支持按 tab 输入制表符*/}
```

### richeditObject.langOptions <a id="richeditObject.langOptions" href="#richeditObject.langOptions">&#x23;</a>
设置输入和远东语言选项  
选项为数值,使用_IMF_前缀常量表示

### richeditObject.left <a id="richeditObject.left" href="#richeditObject.left">&#x23;</a>
左侧坐标

### richeditObject.leftText() <a id="richeditObject.leftText" href="#richeditObject.leftText">&#x23;</a>
获取参数 @1 指定位置之前的文本，  
以字符为单位，负数自右侧倒计数。  
不指定参数获取输和插入点（caretPos）之前的文本。

### richeditObject.limit <a id="richeditObject.limit" href="#richeditObject.limit">&#x23;</a>
字符数限制

### richeditObject.lineCount <a id="richeditObject.lineCount" href="#richeditObject.lineCount">&#x23;</a>
获取行数

### richeditObject.lineFromChar() <a id="richeditObject.lineFromChar" href="#richeditObject.lineFromChar">&#x23;</a>
不指定参数则返回当前行

### richeditObject.lineFromChar(指定位置) <a id="richeditObject.lineFromChar" href="#richeditObject.lineFromChar">&#x23;</a>
返回指定位置行数

### richeditObject.lineLength(指定行号) <a id="richeditObject.lineLength" href="#richeditObject.lineLength">&#x23;</a>
返回指定行字符数  
省略参数表示当前行,小于0表示自尾部倒数到指定行,-1表示最后一行

### richeditObject.lineRange(行号) <a id="richeditObject.lineRange" href="#richeditObject.lineRange">&#x23;</a>
返回指定行的开始位置与结束位置。  
参数 @1 指定行号，起始行号为 1，可用 -1 表示最后一行。

### richeditObject.lineScroll(滚动行数) <a id="richeditObject.lineScroll" href="#richeditObject.lineScroll">&#x23;</a>
滚动条垂直滚动指定行数（相对于滚动条当前位置移动）。  
参数为负数时向上滚动，参数为 0 时垂直滚动到最后一行。

### richeditObject.lineText() <a id="richeditObject.lineText" href="#richeditObject.lineText">&#x23;</a>
不指定行号参数,则获取当前行文本

### richeditObject.lineText(指定行号) <a id="richeditObject.lineText" href="#richeditObject.lineText">&#x23;</a>
获取指定行文本  
省略参数表示当前行,小于0表示自尾部倒数到指定行,-1表示最后一行

### richeditObject.lineToChar(指定行号) <a id="richeditObject.lineToChar" href="#richeditObject.lineToChar">&#x23;</a>
获取指定行首字符位置  
省略参数表示当前行,小于0表示自尾部倒数到指定行,-1表示最后一行

### richeditObject.lines(忽略空白) <a id="richeditObject.lines" href="#richeditObject.lines">&#x23;</a>

```aardio
for line in richeditObject.lines(true){ 
	/*遍历所有文本行,  
如果迭代器参数为true则清除每行首尾空格,并忽略空行*/
}
```

### richeditObject.link <a id="richeditObject.link" href="#richeditObject.link">&#x23;</a>
控件是否自动识别超链接。  
启用此属性会重新设置控件文本内容并丢失选区样式。  
如果未定义 onHyperlink 事件，  
则添加默认 onHyperlink 调用 raw.execute 函数打开链接。  

禁用此属性不会重置文本内容，之前识别的超链接不会失效。

### richeditObject.load() <a id="richeditObject.load" href="#richeditObject.load">&#x23;</a>
自参数 @1 指定的文件路径加载文本。  
如果文件后缀为 .rtf 则加载 RTF 格式文本。  
此函数内部调用 streamIn 函数。

### richeditObject.log( ,'\r\n' ) <a id="richeditObject.log" href="#richeditObject.log">&#x23;</a>
追加字符串到文本框,可输入多个参数  
如果超出limit属性设定的字符数限制则移除头部多余的字符  
为提升性能,limit不可过大

### richeditObject.modified <a id="richeditObject.modified" href="#richeditObject.modified">&#x23;</a>
用户手动输入会修改此属性。  
调用 selText,appendText,appendLink 等模拟用户输入文本的函数会变更此属性为 true 。  
调用 load,save 会重置此属性为 false 。  

修改 text 属性、以及调用 log,print 等函数不会自动变更此属性。  
onChange 事件可使用此属性区分是否用户修改导致的变更。

### richeditObject.modifyEvent(移除通知,添加通知) <a id="richeditObject.modifyEvent" href="#richeditObject.modifyEvent">&#x23;</a>
启用或禁用通知消息,返回EVENTMASK值

### richeditObject.modifyStyle(remove,add,swpFlags) <a id="richeditObject.modifyStyle" href="#richeditObject.modifyStyle">&#x23;</a>
修改窗口样式,所有参数都是可选参数,  
@remove 用数值指定要移除的样式,可使用 _WS_ 前缀的常量  
@add 用数值指定要添加的样式,可使用 _WS_ 前缀的常量  
@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量  
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos  
细节请参考 win.modifyStyle 函数源码

### richeditObject.modifyStyleEx(remove,add,swpFlags) <a id="richeditObject.modifyStyleEx" href="#richeditObject.modifyStyleEx">&#x23;</a>
修改窗口扩展样式,所有参数都是可选参数,  
@remove 用数值指定要移除的样式,可使用 _WS_EX_ 前缀的常量  
@add 用数值指定要添加的样式,可使用 _WS_EX_ 前缀的常量  
@swpFlags 可选用数值指定调整窗口选项,可使用 _SWP_ 前缀的常量  
如果指定了 @swpFlag ,则使用该参数调用::SetWindowPos  
细节请参考 win.modifyStyle 函数源码

### richeditObject.oleCallback(implTable) <a id="richeditObject.oleCallback" href="#richeditObject.oleCallback">&#x23;</a>

```aardio
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.orphanWindow(transparent,hwndBuddy,borderless) <a id="richeditObject.orphanWindow" href="#richeditObject.orphanWindow">&#x23;</a>
创建悬浮窗口。  
悬浮窗口是模仿子窗口外观效果的独立窗口，父窗口可自动调整子窗口到设定位置。  
可选参数 @transparent 为 true 则转换为分层透明窗口。  
可选利用 @hwndBuddy 参数指定外部进程窗口句柄的并附加在内部控件上以实现相同的效果。  
伙伴窗口总是会保持在悬浮窗口前面，并保持相同的大小、位置。  
可重复调用此函数更换伙伴窗口，旧的伙伴窗口必须自行关闭。  
可选指定 @borderless 参数 为 true 以移除 @hwndBuddy  的窗口边框。

### richeditObject.padding <a id="richeditObject.padding" href="#richeditObject.padding">&#x23;</a>
文本边距  
应通过setPadding函数设置该值

### richeditObject.passwordChar <a id="richeditObject.passwordChar" href="#richeditObject.passwordChar">&#x23;</a>
单行或多行文本框可用此属性指定隐藏密码的占位字符。  
在创建 richedit 控件时未启用密码样式此属性无效。  
例如指定为`*`则所有输入字符显示星号,指定为 null 正常显示文本

### richeditObject.paste() <a id="richeditObject.paste" href="#richeditObject.paste">&#x23;</a>
粘贴

### richeditObject.pointFromChar() <a id="richeditObject.pointFromChar" href="#richeditObject.pointFromChar">&#x23;</a>
返回参数 @1 指定索引的字符所在的客户区坐标。  
第一个字符索引为 1，不指定参数则默认取当前插入点（caretPos）所在字符位置。  
函数返回两个值，分别为坐标 x,y 。

### richeditObject.popMenu() <a id="richeditObject.popMenu" href="#richeditObject.popMenu">&#x23;</a>
弹出右键菜单

### richeditObject.postMessage(msg,wParam,lParam) <a id="richeditObject.postMessage" href="#richeditObject.postMessage">&#x23;</a>
投递窗口消息到消息队列中  
此函数用法请参考 ::User32.PostMessage

### richeditObject.preadjust <a id="richeditObject.preadjust" href="#richeditObject.preadjust">&#x23;</a>

```aardio
richeditObject.preadjust = function( cx,cy,wParam ) {	   
	/*窗口缩放后重绘前、触发 adjust 事件之前触发此事件。  
所有 win.form 创建的窗体和控件都支持此事件,  
与 adjust 事件不同，对 preadjust 重复赋值则覆盖而不是追加事件。   

cx 参数为窗口宽度,cy 参数为窗口高度,  
wParam 为 _WM_SIZE 消息参数。*/    
};
```

### richeditObject.print(...) <a id="richeditObject.print" href="#richeditObject.print">&#x23;</a>
将多个参数转换为字符串,  
并使用制表符分隔各参数追加到文本尾部并追加换行。  

对于 table 对象,aardio 会将其序列化为文本然后输出,  
如果当前已经导入了 JSON 库，则将 table 对象自动转换为 JSON 后输出,  
可以用于调试代码显示变量的值

### richeditObject.printf(...) <a id="richeditObject.printf" href="#richeditObject.printf">&#x23;</a>
将多个参数调用string.format格式化后追加到文本尾部  
并追加换行

### richeditObject.publish("字符串参数",) <a id="richeditObject.publish" href="#richeditObject.publish">&#x23;</a>
在窗口所在界面线程发布消息,  
运行界面线程所有所有调用subscribe函数订阅此消息的函数,  
可添加任意个触发参数

### richeditObject.rangeText(起始位置,结束位置) <a id="richeditObject.rangeText" href="#richeditObject.rangeText">&#x23;</a>
返回指定位置文本  
1表示首字符

### richeditObject.readonly <a id="richeditObject.readonly" href="#richeditObject.readonly">&#x23;</a>
是否只读  
只读时禁止编辑

### richeditObject.redo() <a id="richeditObject.redo" href="#richeditObject.redo">&#x23;</a>
重做

### richeditObject.redraw() <a id="richeditObject.redraw" href="#richeditObject.redraw">&#x23;</a>
刷新

### richeditObject.replaceAll <a id="richeditObject.replaceAll" href="#richeditObject.replaceAll">&#x23;</a>
全部替换查找到的文本

### richeditObject.replaceAll(查找字符串,替换字符串,选项) <a id="richeditObject.replaceAll" href="#richeditObject.replaceAll">&#x23;</a>
全部替换查找到的文本  
选项可使用win.dlg.findReplace对象的flags属性

### richeditObject.replaceText <a id="richeditObject.replaceText" href="#richeditObject.replaceText">&#x23;</a>
替换替换文本

### richeditObject.replaceText(查找字符串,替换字符串,选项,开始位置,结束位置) <a id="richeditObject.replaceText" href="#richeditObject.replaceText">&#x23;</a>
替换当前选区并查找下一个，  
选项可使用 win.dlg.findReplace 对象的 flags 属性,  
不指定查找范围时,aardio 根据选区自动确定下次替换的范围  
替换完全部文本会重新重新设置查找范围为全部文本，  
此函数返回2个数值，表示下一个找到的字符串起始、结束位置

### richeditObject.resize(宽度,高度) <a id="richeditObject.resize" href="#richeditObject.resize">&#x23;</a>
如果指定了参数则调整窗口大小,  
无论是否实际调整窗口大小,发送 _WM_SIZE 消息给窗口

### richeditObject.right <a id="richeditObject.right" href="#richeditObject.right">&#x23;</a>
右侧坐标

### richeditObject.rightText() <a id="richeditObject.rightText" href="#richeditObject.rightText">&#x23;</a>
获取参数 @1 指定位置之后的文本，  
以字符为单位，负数自左侧倒计数。  
不指定参数获取输和插入点（caretPos）之后的文本。

### richeditObject.rtf <a id="richeditObject.rtf" href="#richeditObject.rtf">&#x23;</a>
获取或写入 RTF 格式文本。  
读写此属性会自动转换为调用 streamIn,streamOut 函数。

### richeditObject.save() <a id="richeditObject.save" href="#richeditObject.save">&#x23;</a>
保存控件文本到参数 @1 指定的文件路径。  
如果文件后缀为 .rtf 则保存 RTF 格式文本。  
此函数内部调用 streamOut 函数。

### richeditObject.saveScale(scaleX,scaleY,dpiScaleX,dpiScaleY) <a id="richeditObject.saveScale" href="#richeditObject.saveScale">&#x23;</a>
根据控件当前的运行时位置更新设计时大小\如果控件允许自动缩放，窗口缩放时依据设计时大小按比例缩放  
所有参数可省略,并且不建议写参数

### richeditObject.scroll(cmd,pos,msg) <a id="richeditObject.scroll" href="#richeditObject.scroll">&#x23;</a>
发送滚动消息 。  
参数 @cmd 用数值指定滚动命令，例如 `7/*_SB_BOTTOM*/`, `6/*_SB_TOP*/`等。  
如果参数 @cmd 指定 `4/*_SB_THUMBPOSITION*/` 则可用参数 @pos 指定滚动条的位置（数值）。  
默认发送 _WM_VSCROLL 消息，可选用参数 @msg 指定消息 ID 为 `0x114/*_WM_HSCROLL*/` 。  
这是所有窗口与控件都继承的公共方法。

### richeditObject.scrollCaret() <a id="richeditObject.scrollCaret" href="#richeditObject.scrollCaret">&#x23;</a>
滚动到插入点位置（caretPos）。  
可选用一个数值参数指定新的输入插入点位置（caretPos）。  
参数为 -1 时滚动到文本尾部。  

仅在 richedit 控件已获得焦点，  
或者已将初始化属性保持选中（hidesel）设为 true 才会生效，  
否则可能不会产生实际的滚动。  

> richedit 默认不会启用保持选中，edit 控件则默认启用。

### richeditObject.scrollToLine(指定行) <a id="richeditObject.scrollToLine" href="#richeditObject.scrollToLine">&#x23;</a>
将插入点移动到指定行（相对于起始位置），并滚动到该行。  
参数为 0 时滚动到顶部，参数为 -1 时滚动到最后一行。  

此函数会改变 caretPos 但不会改变控件焦点。

### richeditObject.selLine <a id="richeditObject.selLine" href="#richeditObject.selLine">&#x23;</a>
获取或设置当前行,  
插入点（caretPos）移动到该行开始处,并且滚动到该行,  
设为-1跳转到最后一行

### richeditObject.selText <a id="richeditObject.selText" href="#richeditObject.selText">&#x23;</a>
获取或写入选区文本  
可写入 UTF-8 或 UTF-16 字符串。  
指定 null 值设为空字符串，其他类型转为字符串写入。  

如果要读写选区 RTF 格式内容，请使用 streamIn,streamOut 方法，  
并指定 `2/*_SF_RTF*/|0x8000/*_SFF_SELECTION*/` 选项。

### richeditObject.selectAll() <a id="richeditObject.selectAll" href="#richeditObject.selectAll">&#x23;</a>
全选

### richeditObject.selectLine(line,text) <a id="richeditObject.selectLine" href="#richeditObject.selectLine">&#x23;</a>
选中整行。  
- 参数 @line 指定行号，起始行号为 1，可用 -1 表示最后一行。  
可选用参数 @text 指定选中行的文本内容（替换该行原来的文本）

### richeditObject.sendMessage(msg,wParam,lParam) <a id="richeditObject.sendMessage" href="#richeditObject.sendMessage">&#x23;</a>
发送窗口消息  
此函数用法请参考 ::User32.SendMessage

### richeditObject.setCharformat <a id="richeditObject.setCharformat" href="#richeditObject.setCharformat">&#x23;</a>
修改样式，  
如果修改字体大小请在窗体显示 DPI 缩放以后设置。  
用法细节请参考 richedit 库函数文档。

### richeditObject.setCharformat(charformat2,wParam) <a id="richeditObject.setCharformat" href="#richeditObject.setCharformat">&#x23;</a>
参数 @charformat2 使用 win.ui.ctrl.CHARFORMAT2 结构体设置文本样式，  
可仅指定部分字段  
wParam可省略,可选值参考EM_SETCHARFORMAT消息。\例如修改字体颜色可传入 {textColor=0x00ff00}

### richeditObject.setClientRect(RECT区块) <a id="richeditObject.setClientRect" href="#richeditObject.setClientRect">&#x23;</a>
参数为指定文本客户区的RECT结构体  
文本框必须在设计时指定为多行  
在文本框改变大小必须重新设置

### richeditObject.setFocus <a id="richeditObject.setFocus" href="#richeditObject.setFocus">&#x23;</a>
设置焦点。  
可选指定输入光标位置或选区参数（同时会自动滚动到光标所在位置）。

### richeditObject.setFocus() <a id="richeditObject.setFocus" href="#richeditObject.setFocus">&#x23;</a>
设置焦点，并将并将输入光标移动移动到文本框尾部

### richeditObject.setFocus(0) <a id="richeditObject.setFocus" href="#richeditObject.setFocus">&#x23;</a>
指定单个数值参数时，设置焦点并将输入光标移动到到文本框的指定位置。  
正数自文本开始位置计数，负数自尾部到计数。  
0 为文本开始位置，-1 为文本尾部，-2 表示倒数第 2 个字符之后。

### richeditObject.setFocus(0,-1) <a id="richeditObject.setFocus" href="#richeditObject.setFocus">&#x23;</a>
指定 2 个数值参数时表示在设置焦点后改变选区。  
参数用法与 selSel 方法完全相同，参数 1 表示开始位置，参数 2 表示结束位置。  
指定 2 个参数时仅 -1 表示文本尾部，不支持其他负数。

### richeditObject.setFocus(false) <a id="richeditObject.setFocus" href="#richeditObject.setFocus">&#x23;</a>
仅设置焦点，不改变光标位置或选区

### richeditObject.setFont(指定字体) <a id="richeditObject.setFont" href="#richeditObject.setFont">&#x23;</a>
指定 LOGFONT 字体对象,或逻辑字体句柄  
如果不指定 point 值并指定 h 值，字体会按控件的 DPI 缩放设置自动缩放。

### richeditObject.setFont(混入字体属性) <a id="richeditObject.setFont" href="#richeditObject.setFont">&#x23;</a>

```aardio
richeditObject.setFont(h=-12;name="Tahoma");
```

### richeditObject.setLink <a id="richeditObject.setLink" href="#richeditObject.setLink">&#x23;</a>
设置当前选区为超链接。  
如果未定义 onHyperlink 事件，  
则添加默认 onHyperlink 调用 raw.execute 函数打开链接。  

此函数会自动禁用自动识别超链接功能，但不会取消之前自动识别的超链接。

### richeditObject.setLink(href,charFormat2) <a id="richeditObject.setLink" href="#richeditObject.setLink">&#x23;</a>
设置当前选区为超链接。  
参数 @href 指定超链接或文件路径。  
参数 @charFormat2 可选指定包含 win.ui.ctrl.CHARFORMAT2 部分字段的表  

默认会通过插入位置获取超链接，  
如果超链接位置改变而获取失败，则通过 title 指定显示名称获取链接

### richeditObject.setPadding(上,右,下,左) <a id="richeditObject.setPadding" href="#richeditObject.setPadding">&#x23;</a>
设置文本边距  
文本框必须在设计时指定为多行  
在文本框改变大小后仍然可以保持此边距

### richeditObject.setParent(控件对象) <a id="richeditObject.setParent" href="#richeditObject.setParent">&#x23;</a>
改变父窗口

### richeditObject.setPos(x坐标,y坐标,宽,高,插入位置,参数) <a id="richeditObject.setPos" href="#richeditObject.setPos">&#x23;</a>
调整窗口位置或排序,所有参数可选  
同时指定x,y坐标则移动位置  
同时指定宽高则改变大小  
指定插入位置(句柄或_HWND前缀常量)则调整Z序

### richeditObject.setRect(rc) <a id="richeditObject.setRect" href="#richeditObject.setRect">&#x23;</a>
设置控件区块位置(::RECT结构体)

### richeditObject.setRect(rc,true) <a id="richeditObject.setRect" href="#richeditObject.setRect">&#x23;</a>
设置控件屏幕区块位置(::RECT结构体)

### richeditObject.setSel <a id="richeditObject.setSel" href="#richeditObject.setSel">&#x23;</a>
设置选区，选区包含起始与结束位置。  

此函数以 UTF-16 编码规则计算字符数，代理对计为 2 个单位。

### richeditObject.setSel(插入点位置) <a id="richeditObject.setSel" href="#richeditObject.setSel">&#x23;</a>
单参数表示移动插入点（caretPos）到指定位置的字符后面，无选区。  
0 表示文本开始（第 1 个字符之前）,1 表示第 1 个字符的后面。  
可用负数表示相对于当前插入点（caretPos）或者文本尾部倒计数位置。  
如果当前插入点位置大于 0，则 -1 表示当前插入点位置，否则表示文本尾部。  
-2 则表示 -1 所在位置倒数移动 1 个字符。  
这种负数表示法仅在指定单个参数时有效。  

也可以使用caretPos 属性改变插入点位置（负数总是表示文本尾部倒计数位置）。

### richeditObject.setSel(起始位置,结束位置) <a id="richeditObject.setSel" href="#richeditObject.setSel">&#x23;</a>
如果结束位置小于开始位置则自动交换参数位置。  

位置参数以字符为单位，1 为首字符。  
计算选区时 edit 控件控件将回车换行（ CRLF `'\r\n'` ） 计为两个字符单位。  
richedit 控件将回车换行（ CRLF ）计为一个字符单位  
结束位置可以用 -1 表示文本尾部，不支持其他负数。

### richeditObject.setSelCharformat <a id="richeditObject.setSelCharformat" href="#richeditObject.setSelCharformat">&#x23;</a>
设置选区样式。  
用法细节请参考 richedit 库函数文档。  
如果当前没有选区则修改插入点样式，新的样式仅在插入位置修改前有效。  

可调用控件的 setSel, setFocus函数修改选区或光标插入位置。

### richeditObject.setSelCharformat(charformat2) <a id="richeditObject.setSelCharformat" href="#richeditObject.setSelCharformat">&#x23;</a>
参数 @charformat2 使用 win.ui.ctrl.CHARFORMAT2 结构体设置文本样式，  
传入仅指定部分字段的表将自动转换为 CHARFORMAT2 结构体。\例如修改字体颜色可传入 {textColor=0x00ff00}

### richeditObject.setSelCharformat(null) <a id="richeditObject.setSelCharformat" href="#richeditObject.setSelCharformat">&#x23;</a>
将选区或光标插入点样式设为默认样式。

### richeditObject.show(true) <a id="richeditObject.show" href="#richeditObject.show">&#x23;</a>
显示控件

### richeditObject.sliceText(startIndex,endIndex) <a id="richeditObject.sliceText" href="#richeditObject.sliceText">&#x23;</a>
获取指定字符范围的文本。  
- 参数 @startIndex 指定开始位置。  
-参数 @endIndex 指定结束位置。  

1 表示第 1 个字符，按 UTF-16 编码规则计算字符数。

### richeditObject.streamIn <a id="richeditObject.streamIn" href="#richeditObject.streamIn">&#x23;</a>
读入 RTF 文档或普通文档

### richeditObject.streamIn(RTF文本) <a id="richeditObject.streamIn" href="#richeditObject.streamIn">&#x23;</a>
加载字符串参数 @1 指定的 RTF 格式文本

### richeditObject.streamIn(格式,RTF文件路径) <a id="richeditObject.streamIn" href="#richeditObject.streamIn">&#x23;</a>
读入 RTF 文档或普通文档，  
格式参数默认为 _SF_RTF 用于读入 RTF 文档，  
指定为 _SF_TEXT 则读入普通文本。  
如果要修改选区请添加 `0x8000/*_SFF_SELECTION*/` 选项。

### richeditObject.streamIn(格式,输入函数) <a id="richeditObject.streamIn" href="#richeditObject.streamIn">&#x23;</a>

```aardio
richeditObject.streamIn(,function(format,buf,len){    
	return 0,file.readBuffer(buf,len);/*格式参数默认为 _SF_RTF，用于读入 RTF 文档，  
指定为 _SF_TEXT 则读入普通文本。  
成功读取文件回调函数应返回 0 与读取长度，  
否则请返回错误代码*/  
} )
```

### richeditObject.streamOut <a id="richeditObject.streamOut" href="#richeditObject.streamOut">&#x23;</a>
输出 RTF 文档或普通文档

### richeditObject.streamOut(格式) <a id="richeditObject.streamOut" href="#richeditObject.streamOut">&#x23;</a>
直接返回 RTF 格式或普通文本。  
格式参数默认为 `2/*_SF_RTF*/` 用于输出 RTF 格式文档。  
指定为 `1/*_SF_TEXT*/` 则输出普通文本。

### richeditObject.streamOut(格式,RTF文件路径) <a id="richeditObject.streamOut" href="#richeditObject.streamOut">&#x23;</a>
输出 RTF 文档或普通文档，  
格式参数默认为 `2/*_SF_RTF*/` 用于输出 RTF 文档。  
格式为 `2/*_SF_RTF*/` 则输出 ANSI 编码 RTF 文档。  
指定为 `1/*_SF_TEXT*/` 则输出普通文本。  
如果要获取选区请添加 `0x8000/*_SFF_SELECTION*/` 选项。

### richeditObject.streamOut(格式,输出函数) <a id="richeditObject.streamOut" href="#richeditObject.streamOut">&#x23;</a>

```aardio
richeditObject.streamOut(,function(format,buf,len){    
	var ok,bytes = file.writeBuffer(buf,len);/*保存RTF文档*/   
	return 0,bytes;  
} )
```

### richeditObject.tabNext() <a id="richeditObject.tabNext" href="#richeditObject.tabNext">&#x23;</a>
[返回对象:staticObject](https://www.aardio.com/zh-cn/doc/library-reference/win/ui/ctrl/static.html#staticObject)

### richeditObject.tabNext(移动焦点,是否反向) <a id="richeditObject.tabNext" href="#richeditObject.tabNext">&#x23;</a>
获取下一个支持tab控制焦点的控件  
参数@1为true会自动移动焦点到该控件  
参数@2为true则获取上一个控件,否则获取下一个控件

### richeditObject.text <a id="richeditObject.text" href="#richeditObject.text">&#x23;</a>
获取或写入编辑控件文本属性。  
可写入 UTF8 或 UTF16 字符串，写入 null 值转换为空字符串（""），  
其他类型值自动调用 tostring 转为字符串后写入。  

edit 或 richedit 控件的文本属性（text）都以回车换行（CRLF `'\r\n'`）表示换行。  
edit 控件不显示输入文本中缺少回车的单个换行符（`'\n'`），但 richedit 将其转换为回车换行（`'\r\n'`）。  
注意双引号或反引号包围的原样字符串会将源码中的回车换行解析为`'\n'`,  
而块注释赋值为原样字符串时会将源码中的单换行解析为`'\r\n'`。  

在计算选区时 edit 将 CRLF 计为两个字符单位，richedit 将 CRLF 计为一个字符单位。

### richeditObject.theme <a id="richeditObject.theme" href="#richeditObject.theme">&#x23;</a>
外观主题,例如  
winform.button.theme = "Explorer"  
winform.button.theme = false

### richeditObject.threadCallable() <a id="richeditObject.threadCallable" href="#richeditObject.threadCallable">&#x23;</a>
开启此控件的跨线程调用功能

### richeditObject.top <a id="richeditObject.top" href="#richeditObject.top">&#x23;</a>
顶部坐标

### richeditObject.translateAccelerator(msg) <a id="richeditObject.translateAccelerator" href="#richeditObject.translateAccelerator">&#x23;</a>

```aardio
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() <a id="richeditObject.translateCommand" href="#richeditObject.translateCommand">&#x23;</a>
允许转发转发子窗口的命令（_WM_COMMAND）与通知（_WM_NOTIFY）消息，  
避免子窗口 oncommand，onnotify 等回调失效。  
同时会处理子窗口的 _WM_CTLCOLORSTATIC 等消息，  
以避免部分外观属性失效

### richeditObject.undo() <a id="richeditObject.undo" href="#richeditObject.undo">&#x23;</a>
撤消

### richeditObject.update() <a id="richeditObject.update" href="#richeditObject.update">&#x23;</a>
重绘invalidate函数指定的区块

### richeditObject.updateLastLine() <a id="richeditObject.updateLastLine" href="#richeditObject.updateLastLine">&#x23;</a>
原地更新最后一行的文本（如果不是首行则忽略尾部空行），  
并将插入点（caretPos）移到到该行行尾。  

参数 @1 指定字符串，指定多个参数则用 string.format 格式化。

### richeditObject.vScroll() <a id="richeditObject.vScroll" href="#richeditObject.vScroll">&#x23;</a>
滚动到底部

### richeditObject.vScroll(_SB) <a id="richeditObject.vScroll" href="#richeditObject.vScroll">&#x23;</a>
滚动竖向滚动条

### richeditObject.valid <a id="richeditObject.valid" href="#richeditObject.valid">&#x23;</a>
窗口是否有效，  
窗口未关闭返回 true ，  
窗口已关闭或正在关闭返回 false

### richeditObject.validateText <a id="richeditObject.validateText" href="#richeditObject.validateText">&#x23;</a>
校验输入文本。  
全部文本完全符合要求返回 true，否则返回 false。  

可在 onChange 事件内调用此函数实时校验输入。

### richeditObject.validateText(校验输入函数,是否设置光标) <a id="richeditObject.validateText" href="#richeditObject.validateText">&#x23;</a>
调用参数 @1 指定的函数校验控件的文本属性，  
该函数必须自参数中接收当前文本并返回合法文本或 null。  
然后将文本设为符合合法的文本，如果校验函数返回 null 设为空字符串。  

如果修改了文本且指定了参数 @2 为 true，\则将焦点切换到该控件，然后将输入光标设置到文本尾部。  
注意仅 edit 控件可直接显示气泡提示，  
richedit 无此功能可使用其他控件显示错误信息。

### richeditObject.validateText(模式串,是否设置光标) <a id="richeditObject.validateText" href="#richeditObject.validateText">&#x23;</a>
用字符串参数 @1 指定的模式串校验控件的文本属性。  
将文本设为符合匹配的文本，如果找不到匹配文本设为空字符串。  

如果修改了文本且指定了参数 @2 为 true，\则将焦点切换到该控件，然后将输入光标设置到文本尾部。  
注意仅 edit 控件可直接显示气泡提示，  
richedit 无此功能可使用其他控件显示错误信息。

### richeditObject.validateText(限制金额示例,是否设置光标) <a id="richeditObject.validateText" href="#richeditObject.validateText">&#x23;</a>

```aardio
richeditObject.validateText("<\d+\.\d\d>|<\d+\.\d>|<\d+\.>|<\d+>",true)
```

### richeditObject.value <a id="richeditObject.value" href="#richeditObject.value">&#x23;</a>
控件文本，text 属性的别名。

### richeditObject.width <a id="richeditObject.width" href="#richeditObject.width">&#x23;</a>
宽度

### richeditObject.wrap <a id="richeditObject.wrap" href="#richeditObject.wrap">&#x23;</a>
是否启用自动换行，仅 richedit 支持

### richeditObject.zoom <a id="richeditObject.zoom" href="#richeditObject.zoom">&#x23;</a>
缩放比例，必须大于 1/32 并小于 32  
Richedit 存在一个 BUG：如果不是左对齐,只要设置缩放 —— 包含中文就会偏移错乱,  
所以右对齐或居中对齐后，自动 DPI 缩放将会更改为设置文本框默认字体,  
这会导致局部字体样式被重置为默认字体

## richeditObject 事件列表 <a id="richeditObjectEvent" href="#richeditObjectEvent">&#x23;</a>

### richeditObject.onCancel() <a id="richeditObject.onCancel" href="#richeditObject.onCancel">&#x23;</a>

```aardio
richeditObject.onCancel = function(){ 
	/*当前已按下ESC,返回true阻止默认事件*/
	return true; 	
}
```

### richeditObject.onChange() <a id="richeditObject.onChange" href="#richeditObject.onChange">&#x23;</a>

```aardio
richeditObject.onChange = function(){ 
	if(!owner.modified) return;  //只有用户输入导致更改时 modified 才会是 true

	owner.validateText("<\d+\.\d\d>|<\d+\.\d>|<\d+\.>|<\d+>"
		,"请输入金额，小数点后不能超过 2 位!"); 

	/*响应事件，文本内容已变更，  
richedit 无论是否设为多行，修改 text 属性赋值文本会触发此事件。  
但可以通过 modified 属性判断是否由用户输入导致变更。  
*/
}
```

### richeditObject.onClipFormat(format) <a id="richeditObject.onClipFormat" href="#richeditObject.onClipFormat">&#x23;</a>

```aardio
richeditObject.onClipFormat = function(format){
	/*特定的剪贴板格式发生粘贴。  
format 为数值表示的剪贴板格式，可用 `_CF_` 前缀常量表示。  
例如 _CF_UNICODETEXT ，细节可参考 win.clip 命名空间的库。  
仅支持 Win8 之后的操作系统。*/
}
```

### richeditObject.onDpiFontChange <a id="richeditObject.onDpiFontChange" href="#richeditObject.onDpiFontChange">&#x23;</a>

```aardio
richeditObject.onDpiFontChange = function(f){  
	return owner.setFont(f);/*自定义DPI字体缩放*/  
};
```

### richeditObject.onFocusGot() <a id="richeditObject.onFocusGot" href="#richeditObject.onFocusGot">&#x23;</a>

```aardio
richeditObject.onFocusGot = function(){ 
	/*响应事件，文本框已获得输入焦点*/
}
```

### richeditObject.onFocusLost() <a id="richeditObject.onFocusLost" href="#richeditObject.onFocusLost">&#x23;</a>

```aardio
richeditObject.onFocusLost = function(){
	/*响应事件，文本框已失去输入焦点*/
}
```

### richeditObject.onHyperlink <a id="richeditObject.onHyperlink" href="#richeditObject.onHyperlink">&#x23;</a>

```aardio
richeditObject.onHyperlink =function(message,href){  

	if( message = 0x202/*_WM_LBUTTONUP*/ ) {  
		raw.execute(href);  
	}  
}
```

### richeditObject.onOk() <a id="richeditObject.onOk" href="#richeditObject.onOk">&#x23;</a>

```aardio
richeditObject.onOk = function(ctrl,alt,shift){ 
	/*在控件内按下回车触发此事件，返回 true 阻止默认事件。  
回调参数分别表示对应按钮是否已同时按下。*/
	return true; 	
}
```

### richeditObject.onProtected <a id="richeditObject.onProtected" href="#richeditObject.onProtected">&#x23;</a>

```aardio
richeditObject.onProtected = function(b,e,message){ 
	/*修改保护样式文本触发此事件。  
b,e 为被修改的选区，message 为触发消息。  
返回 true 禁止修改*/
	return true; 	
}
```

### richeditObject.onSize <a id="richeditObject.onSize" href="#richeditObject.onSize">&#x23;</a>

```aardio
richeditObject.onSize = function( width,height,wParam ) {	   
	/*父窗口改变大小后会自动触发此事件函数。  
注意 onSize 是 adjust 事件的别名，作用相同  
所有 win.form 创建的窗体和控件都支持 onSize（或 adjust）事件,  
重复赋值 onSize（或 adjust）会追加事件触发器而非替换原来的值。  

width 参数为窗口客户区宽度,height 参数为窗口客户区高度,  
wParam 参数来自 _WM_SIZE 消息的 wParam 参数，一般不用管。  
一般不建议添加一个 wndproc 仅仅是为了处理  _WM_SIZE 消息，  
定义 onSize 事件是更好的选择。  

};*/
```

## 全局对象 成员列表 <a id="global" href="#global">&#x23;</a>

### _SFF_SELECTION <a id="_SFF_SELECTION" href="#_SFF_SELECTION">&#x23;</a>
`0x8000/*_SFF_SELECTION*/`

## TextDocumentObject 成员列表 <a id="TextDocumentObject" href="#TextDocumentObject">&#x23;</a>

### TextDocumentObject.BeginEditCollection() <a id="TextDocumentObject.BeginEditCollection" href="#TextDocumentObject.BeginEditCollection">&#x23;</a>
开始编辑

### TextDocumentObject.DefaultTabStop <a id="TextDocumentObject.DefaultTabStop" href="#TextDocumentObject.DefaultTabStop">&#x23;</a>
制表符宽度

### TextDocumentObject.EndEditCollection() <a id="TextDocumentObject.EndEditCollection" href="#TextDocumentObject.EndEditCollection">&#x23;</a>
结束编辑

### TextDocumentObject.Name <a id="TextDocumentObject.Name" href="#TextDocumentObject.Name">&#x23;</a>
文件名

### TextDocumentObject.New() <a id="TextDocumentObject.New" href="#TextDocumentObject.New">&#x23;</a>
新建文件

### TextDocumentObject.Open(filename,flags,codepage) <a id="TextDocumentObject.Open" href="#TextDocumentObject.Open">&#x23;</a>
打开文档

### TextDocumentObject.Range(first,lim) <a id="TextDocumentObject.Range" href="#TextDocumentObject.Range">&#x23;</a>
返回选区

### TextDocumentObject.RangeFromPoint(x,y) <a id="TextDocumentObject.RangeFromPoint" href="#TextDocumentObject.RangeFromPoint">&#x23;</a>
指定坐标返回选区

### TextDocumentObject.Redo(number) <a id="TextDocumentObject.Redo" href="#TextDocumentObject.Redo">&#x23;</a>
重做

### TextDocumentObject.Save(filename,flags,codepage) <a id="TextDocumentObject.Save" href="#TextDocumentObject.Save">&#x23;</a>
保存文档

### TextDocumentObject.Saved <a id="TextDocumentObject.Saved" href="#TextDocumentObject.Saved">&#x23;</a>
是否保存

### TextDocumentObject.Selection <a id="TextDocumentObject.Selection" href="#TextDocumentObject.Selection">&#x23;</a>
选区对象

### TextDocumentObject.Selection.Font <a id="TextDocumentObject.Selection.Font" href="#TextDocumentObject.Selection.Font">&#x23;</a>
字体  

[返回对象:TomTextFontObject](#TomTextFontObject)

### TextDocumentObject.Undo(number) <a id="TextDocumentObject.Undo" href="#TextDocumentObject.Undo">&#x23;</a>
撤消

### TextDocumentObject.tomFalse <a id="TextDocumentObject.tomFalse" href="#TextDocumentObject.tomFalse">&#x23;</a>
假值

### TextDocumentObject.tomToggle <a id="TextDocumentObject.tomToggle" href="#TextDocumentObject.tomToggle">&#x23;</a>
切换原来的值

### TextDocumentObject.tomTrue <a id="TextDocumentObject.tomTrue" href="#TextDocumentObject.tomTrue">&#x23;</a>
真值

### TextDocumentObject.tomUndefined <a id="TextDocumentObject.tomUndefined" href="#TextDocumentObject.tomUndefined">&#x23;</a>
未定义值

## TomTextFontObject 成员列表 <a id="TomTextFontObject" href="#TomTextFontObject">&#x23;</a>

### TomTextFontObject.Bold <a id="TomTextFontObject.Bold" href="#TomTextFontObject.Bold">&#x23;</a>
是否粗体,  
可使用tomTrue,tomFalse等值

### TomTextFontObject.ForeColor <a id="TomTextFontObject.ForeColor" href="#TomTextFontObject.ForeColor">&#x23;</a>
字体颜色

### TomTextFontObject.Name <a id="TomTextFontObject.Name" href="#TomTextFontObject.Name">&#x23;</a>
字体名

### TomTextFontObject.Size <a id="TomTextFontObject.Size" href="#TomTextFontObject.Size">&#x23;</a>
字体大小

## charformat2Object 成员列表 <a id="charformat2Object" href="#charformat2Object">&#x23;</a>

### charformat2Object.backColor <a id="charformat2Object.backColor" href="#charformat2Object.backColor">&#x23;</a>
背景颜色，GDI 颜色格式（ 0xBBGGRR ）。

### charformat2Object.bold <a id="charformat2Object.bold" href="#charformat2Object.bold">&#x23;</a>
是否粗体，仅用于写入样式。  
设置了这个值会在应用样式前自动修改 weight 属性。

### charformat2Object.charSet <a id="charformat2Object.charSet" href="#charformat2Object.charSet">&#x23;</a>
字符集

### charformat2Object.disabled <a id="charformat2Object.disabled" href="#charformat2Object.disabled">&#x23;</a>
偏移一个像素，仅用于写入样式。

### charformat2Object.effects <a id="charformat2Object.effects" href="#charformat2Object.effects">&#x23;</a>
效果

### charformat2Object.faceName <a id="charformat2Object.faceName" href="#charformat2Object.faceName">&#x23;</a>
字体名

### charformat2Object.getFont() <a id="charformat2Object.getFont" href="#charformat2Object.getFont">&#x23;</a>
返回LOGFONT对象

返回 LOGFONT 对象  

[返回对象:logfontObject](#logfontObject)

### charformat2Object.italic <a id="charformat2Object.italic" href="#charformat2Object.italic">&#x23;</a>
是否斜体，仅用于写入样式。

### charformat2Object.lcid <a id="charformat2Object.lcid" href="#charformat2Object.lcid">&#x23;</a>
区域ID

### charformat2Object.mask <a id="charformat2Object.mask" href="#charformat2Object.mask">&#x23;</a>
掩码，这个一般不用管

### charformat2Object.pitchAndFamily <a id="charformat2Object.pitchAndFamily" href="#charformat2Object.pitchAndFamily">&#x23;</a>
字体族

### charformat2Object.point <a id="charformat2Object.point" href="#charformat2Object.point">&#x23;</a>
字体大小，以 pt 为单位。仅用于写入样式。  
在设置样式时指定  point 会在应用样式前自动修改 yHeight 的值。  
修改字体大小请在窗体显示并且 DPI 初始化缩放完成以后再设置，不然会被重复放大。

### charformat2Object.protected <a id="charformat2Object.protected" href="#charformat2Object.protected">&#x23;</a>
保护文本，修改时触发 onProtected 事件。  
仅用于整个控件，不适用于部分选区。  
此属性仅用于写入样式。

### charformat2Object.spacing <a id="charformat2Object.spacing" href="#charformat2Object.spacing">&#x23;</a>
字体间距

### charformat2Object.strikeout <a id="charformat2Object.strikeout" href="#charformat2Object.strikeout">&#x23;</a>
是否显示删除线，仅用于写入样式。

### charformat2Object.textColor <a id="charformat2Object.textColor" href="#charformat2Object.textColor">&#x23;</a>
字体颜色，GDI 颜色格式（ 0xBBGGRR ）。

### charformat2Object.underline <a id="charformat2Object.underline" href="#charformat2Object.underline">&#x23;</a>
是否粗体，仅用于写入样式。

### charformat2Object.underlineType <a id="charformat2Object.underlineType" href="#charformat2Object.underlineType">&#x23;</a>
下划线类型

### charformat2Object.weight <a id="charformat2Object.weight" href="#charformat2Object.weight">&#x23;</a>
字体重量

### charformat2Object.yHeight <a id="charformat2Object.yHeight" href="#charformat2Object.yHeight">&#x23;</a>
字体大小，以 twips  为单位。  
修改字体大小请在窗体显示并且 DPI 初始化缩放完成以后再设置，不然会被重复放大。

### charformat2Object.yOffset <a id="charformat2Object.yOffset" href="#charformat2Object.yOffset">&#x23;</a>
偏移

### 全局常量

### _SFF_SELECTION <a id="_SFF_SELECTION" href="#_SFF_SELECTION">&#x23;</a>
`0x8000/*_SFF_SELECTION*/`

### 自动完成常量
_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  
_GTL_CLOSE=4  
_GTL_NUMBYTES=0x10  
_GTL_NUMCHARS=8  
_GTL_PRECISE=2  
_GTL_USECRLF=1  
_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  
