|
发表于 2025-3-27 14:02:14
|
显示全部楼层
上海市上海市
在易语言中,超级编辑框(RichEdit)的滚动条位置判断比普通编辑框更复杂,需要使用特定的API消息。以下是几种常用方法:
1. 获取垂直滚动条位置
.子程序 取超级编辑框垂直滚动位置, 整数型
.参数 超级编辑框句柄, 整数型
.局部变量 si, SCROLLINFO
si.cbSize = 取结构长度(SCROLLINFO)
si.fMask = #SIF_POS
发送消息(超级编辑框句柄, #SBM_GETSCROLLINFO, #SB_VERT, 取变量地址(si))
返回(si.nPos)
2. 获取水平滚动条位置
.子程序 取超级编辑框水平滚动位置, 整数型
.参数 超级编辑框句柄, 整数型
.局部变量 si, SCROLLINFO
si.cbSize = 取结构长度(SCROLLINFO)
si.fMask = #SIF_POS
发送消息(超级编辑框句柄, #SBM_GETSCROLLINFO, #SB_HORZ, 取变量地址(si))
返回(si.nPos)
3. 完整示例代码
.版本 2
.程序集 窗口程序集1
.程序集变量 超级编辑框句柄, 整数型
.常量 SCROLLINFO, "int cbSize;int fMask;int nMin;int nMax;int nPage;int nPos;int nTrackPos;"
.常量 SIF_POS, "0x4"
.常量 SBM_GETSCROLLINFO, "0xE9"
.常量 SB_VERT, "0x1"
.常量 SB_HORZ, "0x0"
.子程序 __启动窗口_创建完毕
超级编辑框句柄 = 超级编辑框1.取窗口句柄()
.子程序 _按钮1_被单击
.局部变量 垂直位置, 整数型
.局部变量 水平位置, 整数型
垂直位置 = 取超级编辑框垂直滚动位置(超级编辑框句柄)
水平位置 = 取超级编辑框水平滚动位置(超级编辑框句柄)
信息框("垂直位置:" + 到文本(垂直位置) + #换行符 + "水平位置:" + 到文本(水平位置), 0, )
.如果(垂直位置 > 50)
信息框("已滚动超过50单位", 0, )
.如果结束
.子程序 取超级编辑框垂直滚动位置, 整数型
.参数 句柄, 整数型
.局部变量 si, SCROLLINFO
si.cbSize = 取结构长度(SCROLLINFO)
si.fMask = #SIF_POS
发送消息(句柄, #SBM_GETSCROLLINFO, #SB_VERT, 取变量地址(si))
返回(si.nPos)
.子程序 取超级编辑框水平滚动位置, 整数型
.参数 句柄, 整数型
.局部变量 si, SCROLLINFO
si.cbSize = 取结构长度(SCROLLINFO)
si.fMask = #SIF_POS
发送消息(句柄, #SBM_GETSCROLLINFO, #SB_HORZ, 取变量地址(si))
返回(si.nPos)
4. 判断是否滚动到底部
.子程序 是否滚动到底部, 逻辑型
.参数 超级编辑框句柄, 整数型
.局部变量 si, SCROLLINFO
.局部变量 是否到底, 逻辑型
si.cbSize = 取结构长度(SCROLLINFO)
si.fMask = #SIF_POS | #SIF_RANGE | #SIF_PAGE
发送消息(超级编辑框句柄, #SBM_GETSCROLLINFO, #SB_VERT, 取变量地址(si))
是否到底 = (si.nPos + (int)si.nPage >= si.nMax)
返回(是否到底)
5. 设置滚动条位置
.子程序 置超级编辑框滚动位置
.参数 垂直位置, 整数型, 可空
.参数 水平位置, 整数型, 可空
.局部变量 si, SCROLLINFO
.如果真(是否为空(垂直位置) = 假)
si.cbSize = 取结构长度(SCROLLINFO)
si.fMask = #SIF_POS
si.nPos = 垂直位置
发送消息(超级编辑框句柄, #SBM_SETSCROLLINFO, #SB_VERT, 取变量地址(si))
.如果真结束
.如果真(是否为空(水平位置) = 假)
si.cbSize = 取结构长度(SCROLLINFO)
si.fMask = #SIF_POS
si.nPos = 水平位置
发送消息(超级编辑框句柄, #SBM_SETSCROLLINFO, #SB_HORZ, 取变量地址(si))
.如果真结束
6. 常用常量定义
.常量 SCROLLINFO, "int cbSize;int fMask;int nMin;int nMax;int nPage;int nPos;int nTrackPos;"
.常量 SIF_RANGE, "0x1"
.常量 SIF_POS, "0x4"
.常量 SIF_PAGE, "0x2"
.常量 SIF_TRACKPOS, "0x10"
.常量 SIF_ALL, "SIF_RANGE|SIF_POS|SIF_PAGE|SIF_TRACKPOS"
.常量 SBM_SETSCROLLINFO, "0xE9"
.常量 SBM_GETSCROLLINFO, "0xEA"
.常量 SB_HORZ, "0x0"
.常量 SB_VERT, "0x1"
.常量 SB_CTL, "0x2"
注意事项
超级编辑框的滚动条操作比普通编辑框更复杂,需要了解Windows API
需要正确声明SCROLLINFO结构体
部分消息可能需要先发送EM_GETSCROLLBAR消息获取滚动条句柄
不同版本的RichEdit控件可能有不同的行为
对于多格式文本,滚动位置的计算可能更复杂
这些方法可以帮助您精确控制和判断超级编辑框的滚动条位置。
补充内容 (2025-3-27 14:09):
结构SCROLLINFO参照:https://baike.baidu.com/item/SCROLLINFO/4123463 |
|