书香 发表于 2023-5-22 04:03

【虚表的应用】

本帖最后由 书香 于 2024-2-10 04:51 编辑

本节难度较大,不要求掌握,只有在处理几w几十w数据加载的时候才需要被使用到


源码下载:

效果图如下,我们本节将演示如何将1.txt里面的数据加载到虚表中


我们先看启动窗口创建完毕后执行的代码
.版本 2
.支持库 shell

.程序集 窗口程序集_启动窗口
.程序集变量 xb, 彗星虚表操作类
.程序集变量 数据, 文本型
.程序集变量 数据_元素, 文本型, , "0"
.程序集变量 当前选中项, 整数型, , , 虚表的当前选中行数

.子程序 __启动窗口_创建完毕

xb.创建 (取窗口句柄 (), 8, 8, 352, 344)' 设置表格的位置和大小,虚表不像超级列表框可以直接在开发时拖动设计组件,需要使用函数进行api创建,这便是创建代码

插入项目列 ()' 设置列的标题与宽度
xb.显示表格线 (真)
xb.整行选择 (真)

xb.事件_鼠标右键单击 (&事件_鼠标右键单击)

数据 = 到文本 (读入文件 (取特定目录 (3) + “1.txt”))
数据_元素 = 分割文本 (数据, #换行符, )
加载数据 ()


插入项目列 ()相当于超级列表框的设置标题头的宽度和文字
.版本 2

.子程序 插入项目列
.局部变量 标题组, 文本型, , "0"
.局部变量 标题宽度, 整数型, , "0"
.局部变量 i, 整数型

标题组 = { “序号”, “账号”, “密码” }
标题宽度 = { 60, 130, 130 }

.计次循环首 (取数组成员数 (标题组), i)
    虚表.插入列 (-1, 标题组 , 标题宽度 , 1)
.计次循环尾 ()


分割数组操作是全文的重点,看上去不难,我们就是将数据存储在了数据_元素这个数组里面,难在后面的置标题,大家先留意下这里
.版本 2
.支持库 shell

数据 = 到文本 (读入文件 (取特定目录 (3) + “1.txt”))
数据_元素 = 分割文本 (数据, #换行符, )


接下来是加载数据()
.版本 2

.子程序 加载数据

虚表.全部删除 ()

虚表.置表项数 (取数组成员数 (数据_元素))
虚表.事件_填充表项 (&事件_填充表项)



虚表.置表项数就是要添加的虚表行数,这里不能写错了
虚表.事件_填充表项对应的是虚表的渲染过程,我们前面讲过了,虚表只是实时渲染出眼睛能够看到的部分,也就是当虚表需要开始渲染的时候,会触发响应子程序事件_填充表项(),&事件_填充表项称为子程序指针,类似的写法还有启动线程(&子程序1),那我们来看看事件_填充表项()是如何写的
.版本 2

.子程序 事件_填充表项
.参数 项目指针, 整数型
.参数 标题指针, 整数型
.局部变量 超级列表框项目, 超级列表框项目
.局部变量 账号密码, 文本型, , "0"

超级列表框项目 = 指针到列表框项目 (项目指针)

账号密码 = 分割文本 (数据_元素 [超级列表框项目.表项索引 + 1], “==”, )

.如果真 (超级列表框项目.子项索引 = 0)
    写到内存 (到文本 (超级列表框项目.表项索引 + 1), 标题指针, )
.如果真结束
.如果真 (超级列表框项目.子项索引 = 1)
    写到内存 (账号密码 , 标题指针, )

.如果真结束
.如果真 (超级列表框项目.子项索引 = 2)
    写到内存 (账号密码 , 标题指针, )

代码看上去很复杂,这实际上是内存转换的写法,主要目的就是告诉大家当前正在插入哪一行哪一列
超级列表框项目.表项索引的结果是当前操作的行
超级列表框项目.子项索引的结果是当前操作的列
重点:这里不像超级列表框在置标题的时候需要填写第几行,只需要填写列就可以了,置标题也就是写到内存()函数,这句代码很重要
账号密码 = 分割文本 (数据_元素 [超级列表框项目.表项索引 + 1], “==”, )
超级列表框项目.表项索引就是当前操作的行,但是在虚表和超级列表框中都有一个特点,就是从0开始,也就是0表示第一行或第一列
但是数组是从1开始的,也就是最小是数组
我们在设计的时候就是第一个成员user1要插入第1行,第2个成员user2需要插入第2行
比如我们正在插入第7行,那么超级列表框项目.表项索引=6(从0开始),数据_元素 [超级列表框项目.表项索引 + 1]也就是数据_元素 ,取出的就是user7==jiasias

所以数据_元素 [超级列表框项目.表项索引 + 1]取出的就是当前行对应的账号==密码



接下来就是一个再次分割,得到一个新的数组账号密码,然后通过写入内存去置表格数据


我们还绑定了一个菜单事件
虚表.事件_鼠标右键单击 (&事件_鼠标右键单击)


.版本 2

.子程序 事件_鼠标右键单击
当前选中项 = 虚表.取鼠标指针所在的索引 ()

弹出菜单 (功能, , )

这里还是没啥难度


接下来演示的是菜单操作,这个前面学过了,但是我们的目的是教会大家如何取虚表的表项的值
.版本 2

.子程序 _取出账号_被选择
.局部变量 账号, 文本型


账号 = 虚表.取标题 (当前选中项)
信息框 (账号, 0, , )



但是修改虚表内表项的值则显得比较难了,还记得前面让大家注意的数组数据_元素吗,由于虚表不支持修改,因此我们只能去修改数组,然后重新加载,我们这里对选中行的密码改成了66666
.版本 2

.子程序 _修改表项密码为123_被选择


数据_元素 [当前选中项 + 1] = 虚表.取标题 (当前选中项, 1) + “==” + “66666”
加载数据 ()   '重新加载,相当于刷新


(点击返回课程目录:https://www.52hb.com/thread-58658-1-1.html)



sjtkxy 发表于 2023-5-22 04:41

美好映像 发表于 2023-5-22 07:57

学习不断

放过羊 发表于 2023-8-15 13:05

已学习。。。。。。。。。
页: [1]
查看完整版本: 【虚表的应用】