|

14精币
各位易友如何使列表框导入数据后保证显示,也就是垂直滚动条拉到下面显示最后一条数据,里面有模块的原码。注:此模块下载于论坛。
补充内容 (2025-3-16 11:28):
.版本 2
.支持库 iext
.支持库 spec
.程序集 超列_模拟虚表, , 公开
.程序集变量 集_地址_旧函数, 整数型
.程序集变量 集_地址_新函数, 字节集
.程序集变量 集_地址_滚动条处理, 字节集
.程序集变量 集_地址_填充数据, 字节集
.程序集变量 集_地址_自动列宽处理, 字节集
.程序集变量 集_控件_超级列表框, 超级列表框
.程序集变量 集_控件_时钟, CLOCK类
.程序集变量 集_控件_滚动条, 滚动条类
.程序集变量 集_变量_记录数, 整数型
.程序集变量 集_判断_绑定成功, 逻辑型
.程序集变量 集_判断_自动列宽, 逻辑型
.程序集变量 集_指针_填充数据, 子程序指针
.程序集变量 集_指针_删除数据, 子程序指针
.子程序 _初始化, , , 当基于本类的对象被创建后,此方法会被自动调用
集_地址_新函数 = 辅_生成_类回调_易 (3, 4)
集_地址_滚动条处理 = 辅_生成_类回调_易 (4, 1)
集_地址_填充数据 = 辅_生成_类回调_易 (5, 1)
集_地址_自动列宽处理 = 辅_生成_类回调_易 (6, 0)
.子程序 _销毁, , , 当基于本类的对象被销毁前,此方法会被自动调用
集_控件_时钟.销毁 ()
.子程序 NewProc, 整数型
.参数 hWnd, 整数型
.参数 Msg, 整数型
.参数 wParam, 整数型
.参数 lParam, 整数型
.局部变量 局_变量_横向滚动条, 逻辑型, 静态
.局部变量 局_变量_滚动条位置, 整数型
.局部变量 局_变量_计次, 整数型, 静态
.判断开始 (Msg = #WM_PAINT)
局_变量_计次 = 局_变量_计次 + 1
.如果 (集_控件_超级列表框.高度 - 集_控件_超级列表框.取用户区高度 () > 8)
.如果真 (局_变量_横向滚动条 = 假)
集_控件_超级列表框.高度 = 集_控件_超级列表框.高度 ' 2025.03.09 删除了 + 集_控件_滚动条.取滚动条大小 ()
局_变量_横向滚动条 = 真
.如果真结束
.否则
.如果真 (局_变量_横向滚动条 = 真)
集_控件_超级列表框.高度 = 集_控件_超级列表框.高度 ' 2025.03.09 删除了 - 集_控件_滚动条.取滚动条大小 ()
局_变量_横向滚动条 = 假
.如果真结束
.如果结束
.如果真 (集_控件_超级列表框.宽度 - 集_控件_超级列表框.取用户区宽度 () < 8)
集_控件_滚动条.重置滚动条 (, , , 集_变量_记录数)
.如果真结束
.判断 (Msg = #WM_VSCROLL)
集_控件_滚动条.置滚动条位置 (wParam)
返回 (0)
.判断 (Msg = #WM_KEYDOWN)
局_变量_滚动条位置 = 集_控件_滚动条.取滚动条位置 ()
.判断开始 (集_控件_超级列表框.现行选中项 = SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0) - 1)
.判断开始 (wParam = #下光标键)
局_变量_滚动条位置 = 局_变量_滚动条位置 + 1
.默认
.判断结束
.判断 (集_控件_超级列表框.现行选中项 = 0)
.判断开始 (wParam = #上光标键)
局_变量_滚动条位置 = 局_变量_滚动条位置 - 1
.默认
.判断结束
.默认
.判断结束
.如果真 (局_变量_滚动条位置 > 集_变量_记录数 - SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0) + 1)
局_变量_滚动条位置 = 集_变量_记录数 - SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0) + 1
.如果真结束
.如果真 (局_变量_滚动条位置 < 1)
局_变量_滚动条位置 = 1
.如果真结束
集_控件_滚动条.重置滚动条 (, 局_变量_滚动条位置, , )
.判断 (Msg = #WM_MOUSEWHEEL)
集_控件_滚动条.滚动滚动条 (辅_取高16位 (wParam) ÷ 120)
返回 (0)
.默认
.判断结束
返回 (CallWindowProc (集_地址_旧函数, hWnd, Msg, wParam, lParam))
.子程序 _滚动条_位置改变
.参数 参数_位置, 整数型
.如果真 (集_判断_绑定成功 = 假)
返回 ()
.如果真结束
调用子程序 (辅_字节集到子程序地址 (集_地址_填充数据), , , 参数_位置)
.子程序 _超列_填充
.参数 参数_启始位置, 整数型
.局部变量 局_变量_计次, 整数型
.局部变量 局_变量_计次_2, 整数型
.局部变量 局_变量_显示表项数, 整数型
.局部变量 局_变量_列数, 整数型
.局部变量 局_变量_滚动条位置, 整数型
.局部变量 局_变量_返回值, 文本型
.局部变量 局_变量_表项索引, 整数型
.局部变量 局_变量_列索引, 整数型
.如果真 (集_判断_绑定成功 = 假)
返回 ()
.如果真结束
局_变量_显示表项数 = SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0)
局_变量_滚动条位置 = 集_控件_滚动条.取滚动条位置 ()
局_变量_列数 = 集_控件_超级列表框.取列数 ()
.如果真 (集_控件_超级列表框.取表项数 () < 集_变量_记录数 且 集_控件_超级列表框.取表项数 () < 局_变量_显示表项数) ' 添加
集_控件_超级列表框.插入表项 (, , , , , )
.如果真结束
.如果真 (局_变量_显示表项数 > 集_变量_记录数)
局_变量_显示表项数 = 集_变量_记录数
.如果真结束
.计次循环首 (局_变量_显示表项数, 局_变量_计次)
局_变量_表项索引 = 局_变量_滚动条位置 + 局_变量_计次 - 1
.计次循环首 (局_变量_列数, 局_变量_计次_2)
局_变量_列索引 = 局_变量_计次_2 - 1
调用子程序 (集_指针_填充数据, , 局_变量_返回值, 局_变量_表项索引, 局_变量_列索引)
集_控件_超级列表框.置标题 (局_变量_计次 - 1, 局_变量_列索引, 局_变量_返回值)
.计次循环尾 ()
参数_启始位置 = 参数_启始位置 + 1
.计次循环尾 ()
.如果真 (集_控件_超级列表框.取表项数 () > 局_变量_显示表项数) ' 删除
.计次循环首 (集_控件_超级列表框.取表项数 () - 局_变量_显示表项数, )
集_控件_超级列表框.删除表项 (集_控件_超级列表框.取表项数 () - 1)
.计次循环尾 ()
.如果真结束
.子程序 _超列_自动列宽
.局部变量 局_变量_列数, 整数型
.局部变量 局_变量_计次, 整数型
.如果真 (集_判断_自动列宽 = 真 且 集_判断_绑定成功 = 真)
辅_自动列宽 (集_控件_超级列表框.取窗口句柄 (), 集_控件_超级列表框.取列数 ())
.如果真结束
.子程序 绑定, , 公开
.参数 参数_超级列表框, 超级列表框
.参数 参数_自动列宽刷新时间, 整数型, 可空, 单位:MS,参数条件:需大于或等于0,为0或空时不执行自动列宽
.如果真 (集_判断_绑定成功 = 真)
返回 ()
.如果真结束
集_控件_超级列表框 = 参数_超级列表框
集_控件_滚动条.滚动条初始化 (集_控件_超级列表框.取窗口句柄 (), 1, 1, 1, 1, 1)
.判断开始 (参数_自动列宽刷新时间 > 0)
集_判断_自动列宽 = 真
.判断 (参数_自动列宽刷新时间 = 0 或 参数_自动列宽刷新时间 < 0)
参数_自动列宽刷新时间 = 9999999
集_判断_自动列宽 = 假
.默认
.判断结束
集_控件_时钟.创建 (参数_自动列宽刷新时间, 辅_字节集到子程序地址 (集_地址_自动列宽处理))
集_地址_旧函数 = SetWindowLong (集_控件_超级列表框.取窗口句柄 (), -4, 到数值_从子程序指针 (辅_字节集到子程序地址 (集_地址_新函数)))
集_控件_滚动条.挂接事件_滚动事件 (辅_字节集到子程序地址 (集_地址_滚动条处理))
集_判断_绑定成功 = 真
.子程序 取消绑定, , 公开
.如果真 (集_判断_绑定成功 = 假)
返回 ()
.如果真结束
集_控件_滚动条.滚动条初始化 (0, 1, 1, 1, 1, 1)
SetWindowLong (集_控件_超级列表框.取窗口句柄 (), -4, 集_地址_旧函数)
集_判断_自动列宽 = 假
集_控件_时钟.置时钟周期 (9999999)
集_判断_绑定成功 = 假
.子程序 尺寸被改变, , 公开
.局部变量 局_变量_滚动条位置, 整数型
.局部变量 局_变量_显示表项数, 整数型
.如果真 (集_判断_绑定成功 = 假)
返回 ()
.如果真结束
集_控件_超级列表框.全部删除 ()
局_变量_显示表项数 = SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0)
.如果真 (局_变量_显示表项数 > 集_变量_记录数)
局_变量_显示表项数 = 集_变量_记录数
.如果真结束
.计次循环首 (局_变量_显示表项数, )
集_控件_超级列表框.插入表项 (, , , , , )
.计次循环尾 ()
局_变量_滚动条位置 = 集_控件_滚动条.取滚动条位置 ()
.如果真 (局_变量_滚动条位置 > 集_变量_记录数 - SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0) + 1)
局_变量_滚动条位置 = 集_变量_记录数 - SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0) + 1
.如果真结束
.如果真 (局_变量_滚动条位置 < 1)
局_变量_滚动条位置 = 1
.如果真结束
集_控件_滚动条.重置滚动条 (, 局_变量_滚动条位置, SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0), 集_变量_记录数)
局_变量_滚动条位置 = 集_控件_滚动条.取滚动条位置 ()
调用子程序 (辅_字节集到子程序地址 (集_地址_填充数据), , , 局_变量_滚动条位置)
.子程序 填充列表, , 公开
.参数 参数_记录数, 整数型
.参数 参数_填充数据, 子程序指针, , 参数1:表项索引为整数型,参数2:列索引为整数型,返回:填充数据为文本型
.局部变量 局_变量_表项数, 整数型
.如果真 (集_判断_绑定成功 = 假)
信息框 (“请先进行绑定.”, 0, “提示:”)
返回 ()
.如果真结束
集_指针_填充数据 = 参数_填充数据
集_变量_记录数 = 参数_记录数
集_控件_滚动条.重置滚动条 (1, 1, SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0), 集_变量_记录数)
集_控件_超级列表框.全部删除 ()
局_变量_表项数 = SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0)
.如果真 (局_变量_表项数 > 集_变量_记录数)
局_变量_表项数 = 集_变量_记录数
.如果真结束
.计次循环首 (局_变量_表项数, )
集_控件_超级列表框.插入表项 (, , , , , )
.计次循环尾 ()
调用子程序 (辅_字节集到子程序地址 (集_地址_填充数据), , , 1)
.子程序 添加表项, , 公开
.参数 参数_添加数据, 子程序指针
.局部变量 局_变量_滚动条位置, 整数型
.如果真 (集_判断_绑定成功 = 假)
信息框 (“请先进行绑定.”, 0, “提示:”)
返回 ()
.如果真结束
调用子程序 (参数_添加数据, , , )
集_变量_记录数 = 集_变量_记录数 + 1
局_变量_滚动条位置 = 集_变量_记录数 - SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0) + 1
.如果真 (局_变量_滚动条位置 < 1)
局_变量_滚动条位置 = 1
.如果真结束
集_控件_滚动条.重置滚动条 (, 局_变量_滚动条位置, SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0), 集_变量_记录数)
局_变量_滚动条位置 = 集_控件_滚动条.取滚动条位置 ()
调用子程序 (辅_字节集到子程序地址 (集_地址_填充数据), , , 局_变量_滚动条位置)
集_控件_超级列表框.现行选中项 = 集_控件_超级列表框.取表项数 () - 1
.子程序 修改表项, , 公开
.参数 参数_修改数据, 子程序指针, , 在此子程序下进行数据的删除。参数1:表项索引为整数型
.局部变量 局_变量_滚动条位置, 整数型
.局部变量 局_变量_表项索引, 整数型
.如果真 (集_判断_绑定成功 = 假)
信息框 (“请先进行绑定.”, 0, “提示:”)
返回 ()
.如果真结束
.如果真 (集_控件_超级列表框.现行选中项 = -1)
返回 ()
.如果真结束
局_变量_表项索引 = 集_控件_超级列表框.现行选中项 + 集_控件_滚动条.取滚动条位置 ()
调用子程序 (参数_修改数据, , , 局_变量_表项索引)
局_变量_滚动条位置 = 集_控件_滚动条.取滚动条位置 ()
调用子程序 (辅_字节集到子程序地址 (集_地址_填充数据), , , 局_变量_滚动条位置)
.子程序 删除表项, , 公开
.参数 参数_删除数据, 子程序指针, , 在此子程序下进行数据的删除。参数1:表项索引为整数型
.局部变量 局_变量_滚动条位置, 整数型
.局部变量 局_变量_表项索引, 整数型
.如果真 (集_判断_绑定成功 = 假)
信息框 (“请先进行绑定.”, 0, “提示:”)
返回 ()
.如果真结束
.如果真 (集_控件_超级列表框.现行选中项 = -1)
返回 ()
.如果真结束
.如果真 (集_变量_记录数 < 1)
返回 ()
.如果真结束
集_变量_记录数 = 集_变量_记录数 - 1
局_变量_表项索引 = 集_控件_超级列表框.现行选中项 + 集_控件_滚动条.取滚动条位置 ()
调用子程序 (参数_删除数据, , , 局_变量_表项索引)
局_变量_滚动条位置 = 集_控件_滚动条.取滚动条位置 ()
.如果真 (局_变量_滚动条位置 > 集_变量_记录数 - SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0) + 1)
局_变量_滚动条位置 = 集_变量_记录数 - SendMessage (集_控件_超级列表框.取窗口句柄 (), 4136, 0, 0) + 1
.如果真结束
.如果真 (局_变量_滚动条位置 < 1)
局_变量_滚动条位置 = 1
.如果真结束
集_控件_滚动条.重置滚动条 (, 局_变量_滚动条位置, , 集_变量_记录数)
局_变量_滚动条位置 = 集_控件_滚动条.取滚动条位置 ()
调用子程序 (辅_字节集到子程序地址 (集_地址_填充数据), , , 局_变量_滚动条位置)
.子程序 调整列宽, , 公开, 会按内容进行列宽的调整
.参数 参数_刷新时间, 整数型, 可空, 单位:MS,大于0会按设定时间执行自动调整,为0停止自动调整,为空或小于0时停止自动调整执行手动调整
.如果真 (集_判断_绑定成功 = 假)
信息框 (“请先进行绑定.”, 0, “提示:”)
返回 ()
.如果真结束
.判断开始 (参数_刷新时间 > 0)
集_控件_时钟.置时钟周期 (参数_刷新时间)
集_判断_自动列宽 = 真
.判断 (参数_刷新时间 < 0 或 是否为空 (参数_刷新时间))
集_控件_时钟.置时钟周期 (9999999)
集_判断_自动列宽 = 假
辅_自动列宽 (集_控件_超级列表框.取窗口句柄 (), 集_控件_超级列表框.取列数 ())
.默认
集_控件_时钟.置时钟周期 (9999999)
集_判断_自动列宽 = 假
|
-
-
测试.zip
1.89 MB, 下载次数: 3, 下载积分: 精币 -1 枚
最佳答案
查看完整内容
[e=1].版本 2
.支持库 eDB
记录集1.到尾记录 ()
.计次循环首 (记录数量, i)
进度显示 (进度条1, 记录集1.记录数量, i)
记录集1.读文本 (1, 单号6)
记录集1.读文本 (2, 日期6)
记录集1.读文本 (4, 名称6)
记录集1.读文本 (5, 型号6)
记录集1.读文本 (6, 描述6)
记录集1.读文本 (8, 数量6)
记录集1.读文本 (7, 单价6)
记录集1.读文本 (9, 应收金额6)
记录集1.读文本 (10, 实收金额6)
...
|