开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 295|回复: 15
收起左侧

[已解决] 判断超级编辑框纵向滚动条是否滚动到最底部

 关闭 [复制链接]
结帖率:100% (10/10)
发表于 2025-3-27 13:21:48 | 显示全部楼层 |阅读模式   江苏省南京市
5精币
如题,我需要判断超级编辑框的纵向滚动条是不是到最底部了,这样我就可以让按钮取消禁止。

说白了就是网页那种用户协议,必须让他滚到最底部才能同意用户协议,只有同意用户协议才能进入到软件。
1d1bae6b-fbc9-469f-8489-8f61cbce35b6.png


补充内容 (2025-3-27 15:06):
骚等,一会结帖,好多种方案,我先研究一下。谢谢各位大佬。

补充内容 (2025-3-27 15:55):
补充一句,方便有类似需求的朋友查看,这段话基于采纳后给大佬补充的。需要结束线程请看16楼。

最佳答案

查看完整内容

大概这个意思。

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:100% (9/9)

签到天数: 16 天

发表于 2025-3-27 13:21:49 | 显示全部楼层   江苏省无锡市
大概这个意思。

超级文本取滚动条最底.e

3.35 KB, 下载次数: 16

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

结帖率:100% (14/14)

签到天数: 15 天

发表于 2025-3-27 13:28:42 | 显示全部楼层   **
超级编辑框1.滚动 (行数)
回复

使用道具 举报

结帖率:100% (10/10)

签到天数: 1 天

 楼主| 发表于 2025-3-27 13:33:42 | 显示全部楼层   江苏省南京市
是可可吖 发表于 2025-3-27 13:28
超级编辑框1.滚动 (行数)

不行,用户协议是会更新的,并不是一直一样,用户协议是从网络获取的,不是写在超级编辑框本身里面。
回复

使用道具 举报

结帖率:100% (14/14)

签到天数: 15 天

发表于 2025-3-27 13:42:48 | 显示全部楼层   **
萌新坏猫 发表于 2025-3-27 13:33
不行,用户协议是会更新的,并不是一直一样,用户协议是从网络获取的,不是写在超级编辑框本身里面。 ...

取出来的变量取行数,也不行吗
回复

使用道具 举报

签到天数: 9 天

发表于 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
回复

使用道具 举报

结帖率:100% (12/12)

签到天数: 15 天

发表于 2025-3-27 14:53:13 | 显示全部楼层   广东省潮州市
  
DLL命令名返回值类型公开备 注
GetScrollPos整数型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
GetScrollPos
参数名类 型传址数组备 注
hWnd整数型
nBar整数型
DLL命令名返回值类型公开备 注
GetScrollRange逻辑型 
DLL库文件名:
user32.dll
在DLL库中对应命令名:
GetScrollRange
参数名类 型传址数组备 注
hWnd整数型
nBar整数型
lpMinPos整数型
lpMaxPos整数型

子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
hwnd整数型 
pos整数型 
minpos整数型 
maxpos整数型 
hwnd = 超级编辑框1.取窗口句柄 ()
GetScrollRange (hwnd, 1, minpos, maxpos)
pos = GetScrollPos (hwnd, 1)
' "pos + 超级编辑框1.高度 - 5“ -5是我这边的滚动条控件高度,这个需要自己看看一不一样,然后判断是不是在最底部应该还需要你自己设置一个阈值,在一个范围内就算拉到最底部
调试输出 (pos + 超级编辑框1.高度 - 5, maxpos)


i支持库列表   支持库注释   
spec特殊功能支持库
iext2扩展界面支持库二



补充内容 (2025-3-27 14:54):
1是纵向,0是横向

评分

参与人数 1好评 +1 收起 理由
萌新坏猫 + 1 感谢分享,很给力!~

查看全部评分

回复

使用道具 举报

结帖率:100% (10/10)

签到天数: 1 天

 楼主| 发表于 2025-3-27 14:54:26 | 显示全部楼层   江苏省南京市
cultwent 发表于 2025-3-27 14:02
在易语言中,超级编辑框(RichEdit)的滚动条位置判断比普通编辑框更复杂,需要使用特定的API消息。以下是 ...

ai回复的吗?代码是有问题的,我也去问过ai。
回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 10 天

发表于 2025-3-27 14:55:33 | 显示全部楼层   辽宁省丹东市
  
子程序名返回值类型公开备 注
超列取当前可视首行整数型 返回可显示的第一行索引
参数名类 型参考可空数组备 注
超列窗口句柄整数型超级列表框.取窗口句柄 ()
返回 (SendMessageA (超列窗口句柄, #LVM_GETTOPINDEX, 0, 0))
' 返回 (超级列表框1.发送信息(4135, 0, 0)
子程序名返回值类型公开备 注
超列取当前可视行数整数型 
参数名类 型参考可空数组备 注
超列窗口句柄整数型超级列表框.取窗口句柄 ()
返回 (SendMessageA (超列窗口句柄, #LVM_GETCOUNTPERPAGE, 0, 0))
' 返回 ( 超级列表框1.发送信息(4136, 0, 0)
子程序名返回值类型公开备 注
超列判断是否滚动到底部逻辑型 
参数名类 型参考可空数组备 注
超级列表框超级列表框
变量名类 型静态数组备 注
尾行整数型 
位置整数型 
超列句柄整数型 
超列句柄 = 超级列表框.取窗口句柄 ()
尾行 = 超级列表框.取表项数 () - 1
位置 = 超列取当前可视首行 (超列句柄)超列取当前可视行数 (超列句柄) - 1
判断 (位置 ≥ 尾行)
返回 ()
返回 ()


i支持库列表   支持库注释   
iext扩展界面支持库一



补充内容 (2025-3-27 15:13):
我看成超级列表框了。。

评分

参与人数 1好评 +1 收起 理由
萌新坏猫 + 1 感谢分享,很给力!~

查看全部评分

回复

使用道具 举报

结帖率:100% (10/10)

签到天数: 1 天

 楼主| 发表于 2025-3-27 15:13:26 | 显示全部楼层   江苏省南京市
廿六 发表于 2025-3-27 14:53
[e=0].版本 2

.DLL命令 GetScrollPos, 整数型, "user32.dll", "GetScrollPos"

大佬,你这个有一个BUG,如果我用的是滚轮被滚动属性,这次滚动的数据调试输出出来是上一次滚动的位置。

补充内容 (2025-3-27 15:18):
当然用按钮来提示用户也是可以的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表