书香雅阁论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 707|回复: 0

【虚表的应用】

[复制链接]

384

主题

407

帖子

158万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1581367
发表于 2023-5-15 00:35:14|字数:3,316 | 显示全部楼层 |阅读模式
LV10 站长

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


源码下载: 虚表操作.zip (17.15 KB, 下载次数: 129)

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

我们先看启动窗口创建完毕后执行的代码
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
xb彗星虚表操作类  
数据文本型  
数据_元素文本型0 
当前选中项整数型虚表的当前选中行数

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
xb.创建 (取窗口句柄 (), 8, 8, 352, 344)  ' 设置表格的位置和大小,虚表不像超级列表框可以直接在开发时拖动设计组件,需要使用函数进行api创建,这便是创建代码
插入项目列 ()  ' 设置列的标题与宽度
xb.显示表格线 ()
xb.整行选择 ()
xb.事件_鼠标右键单击 (&事件_鼠标右键单击)
数据 = 到文本 (读入文件 (取特定目录 (3)“1.txt”))
数据_元素 = 分割文本 (数据, #换行符, )
加载数据 ()


i支持库列表   支持库注释   
shell操作系统界面功能支持库


插入项目列 ()相当于超级列表框的设置标题头宽度文字
  
子程序名返回值类型公开备 注
插入项目列  
变量名类 型静态数组备 注
标题组文本型 0
标题宽度整数型 0
i整数型  
标题组 = { “序号”, “账号”, “密码” }
标题宽度 = { 60, 130, 130 }
计次循环首 (取数组成员数 (标题组), i)
虚表.插入列 (-1, 标题组 , 标题宽度 , 1)
计次循环尾 ()


分割数组操作是全文的重点,看上去不难,我们就是将数据存储在了数据_元素这个数组里面,难在后面的置标题,大家先留意下这里
  
数据 = 到文本 (读入文件 (取特定目录 (3)“1.txt”))
数据_元素 = 分割文本 (数据, #换行符, )


i支持库列表   支持库注释   
shell操作系统界面功能支持库


接下来是加载数据()
  
子程序名返回值类型公开备 注
加载数据  
虚表.全部删除 ()
虚表.置表项数 (取数组成员数 (数据_元素))
虚表.事件_填充表项 (&事件_填充表项)



虚表.置表项数就是要添加的虚表行数,这里不能写错了
虚表.事件_填充表项对应的是虚表渲染过程,我们前面讲过了,虚表只是实时渲染出眼睛能够看到的部分,也就是当虚表需要开始渲染的时候,会触发响应子程序事件_填充表项()&事件_填充表项称为子程序指针,类似的写法还有启动线程(&子程序1),那我们来看看事件_填充表项()是如何写的
  
子程序名返回值类型公开备 注
事件_填充表项  
参数名类 型参考可空数组备 注
项目指针整数型   
标题指针整数型   
变量名类 型静态数组备 注
超级列表框项目超级列表框项目  
账号密码文本型 0
超级列表框项目 = 指针到列表框项目 (项目指针)
账号密码 = 分割文本 (数据_元素 [超级列表框项目.表项索引 + 1], “==”, )
如果真 (超级列表框项目.子项索引 = 0)
写到内存 (到文本 (超级列表框项目.表项索引 + 1), 标题指针, )
如果真 (超级列表框项目.子项索引 = 1)
写到内存 (账号密码 [1], 标题指针, )
如果真 (超级列表框项目.子项索引 = 2)
写到内存 (账号密码 [2], 标题指针, )

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

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



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


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



  
子程序名返回值类型公开备 注
事件_鼠标右键单击  
当前选中项 = 虚表.取鼠标指针所在的索引 ()
弹出菜单 (功能, , )

这里还是没啥难度


接下来演示的是菜单操作,这个前面学过了,但是我们的目的是教会大家如何取虚表的表项的值
  
子程序名返回值类型公开备 注
_取出账号_被选择  
变量名类 型静态数组备 注
账号文本型  
账号 = 虚表.取标题 (当前选中项)
信息框 (账号, 0, , )



但是修改虚表内表项的值则显得比较难了,还记得前面让大家注意的数组数据_元素吗,由于虚表不支持修改,因此我们只能去修改数组,然后重新加载,我们这里对选中行的密码改成了66666
  
子程序名返回值类型公开备 注
_修改表项密码为123_被选择  
数据_元素 [当前选中项 + 1] = 虚表.取标题 (当前选中项, 1)“==”“66666”
加载数据 ()   ' 重新加载,相当于刷新




(点击返回课程目录https://shuxiangyage.net/forum.php?mod=viewthread&tid=1134
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|小黑屋|书香雅阁论坛 ( 湘ICP备17011672号-3 )

GMT+8, 2024-5-6 03:16 , Processed in 0.141812 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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