本帖最后由 观音 于 2024-7-31 20:46 编辑
排序源码我忘记哪里拿到的了,后面我改动了一下
支持:项目文本、项目附加数值、项目选择框、项目尺寸、项目字体色(支持每个表项每列字体不同)同步排序
使用二分查找进行排序,这个源码我忘了哪里下的了,我没有改动
调用代码截图:
排序代码截图:
回复直接查看源码,无需下载,直接复制代码即可调用
超级列表框通用排序.e
(13.2 KB, 下载次数: 231)
|
_ListBox_Crowd_项目左键单击 | 整数型 | | |
项目索引 | 整数型 | | | | 列索引 | 整数型 | | | | 元素索引 | 整数型 | | | | 事件来源 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | LastColumn | 整数型 | | | LastSortOrder | 逻辑型 | | |
判断 (事件来源 = 1 ) 如果 (LastColumn = 列索引 )  LastSortOrder = 取反 (LastSortOrder )  LastSortOrder = 真 LastColumn = 列索引 判断 (列索引 = 0 或 列索引 = 3 ) 超级列表框排序 (ListBox_Crowd, 列索引, 0, 真, LastSortOrder ) 判断 (列索引 = 6 ) 超级列表框排序 (ListBox_Crowd, 列索引, 2, 真, LastSortOrder ) 超级列表框排序 (ListBox_Crowd, 列索引, 1, 真, LastSortOrder )     |
超级列表框排序 | 整数型 | | |
对象 | 超级列表框EX | | | | 列索引 | 整数型 | | | | 类型 | 整数型 | | | | 区分大小写 | 逻辑型 | | | | 排序方式 | 逻辑型 | | | | 选择框列 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 排序时间 | 整数型 | | | 排序变量 | 文本型 | | 0 | 序号数组 | 整数型 | | 0 | 表项数值 | 整数型 | | 0 | 变量 | 整数型 | | | 数据 | 文本型 | | | 列数 | 整数型 | | | 行数 | 整数型 | | | 单元数 | 整数型 | | | 选中项 | 整数型 | | | 背景颜色 | 整数型 | | 0 | 项目尺寸 | 整数型 | | 0 | 选择框状态 | 整数型 | | 0 | 组件句柄 | 整数型 | | |
如果 (是否为空 (选择框列 ))  选择框列 = -1  组件句柄 = 组件取窗口绑定组件 (对象. 取窗口句柄 ()) 排序时间 = 取启动时间 ()类型 = 选择 (类型 ≥ 0 且 类型 ≤ 3, 类型, 1 )区分大小写 = 选择 (是否为空 (区分大小写 ), 真, 区分大小写 )排序方式 = 选择 (是否为空 (排序方式 ), 真, 排序方式 ) 如果真 (对象.现行选中项 ≠ -1 ) 如果真 (对象. 取项目附加数值 (对象.现行选中项 ) = 0 )  对象. 置项目附加数值 (对象.现行选中项, 1 ) 选中项 = 对象.取项目附加数值 (对象.现行选中项) 计次循环首 (对象. 取项目数量 (), 变量 ) 数据 = 删首尾空 (对象. 取项目文本 (变量 - 1, 列索引 ))  如果 (类型 ≠ 3 )  单元数 = 二分查找 (排序变量, 数据, 类型, 区分大小写 ) 插入成员 (排序变量, 单元数, 数据 ) 插入成员 (序号数组, 单元数, 变量 - 1 ) 插入成员 (表项数值, 单元数, 对象. 取项目附加数值 (变量 - 1 ))  插入成员 (项目尺寸, 单元数, 对象. 取项目尺寸 (变量 - 1 ))   如果真 (选择框列 > -1 )  插入成员 (选择框状态, 单元数, 组件取选择框元素数据 (组件句柄, #元素归属_超列项目, 变量 - 1, 选择框列, 0, 16 ))     插入成员 (序号数组, 选择 (数据 = “假”, 变量, 1 ), 变量 - 1 ) 插入成员 (表项数值, 选择 (数据 = “假”, 变量, 1 ), 对象. 取项目附加数值 (变量 - 1 ))  插入成员 (项目尺寸, 选择 (数据 = “假”, 变量, 1 ), 对象. 取项目尺寸 (变量 - 1 ))   如果真 (选择框列 > -1 )  插入成员 (选择框状态, 选择 (数据 = “假”, 变量, 1 ), 组件取选择框元素数据 (组件句柄, #元素归属_超列项目, 变量 - 1, 选择框列, 0, 16 ))      计次循环尾 ()列数 = 对象. 取列数量 ()行数 = 取数组成员数 (序号数组 )单元数 = 行数 × 列数 重定义数组 (排序变量, 假, 单元数 )重定义数组 (背景颜色, 假, 单元数 ) 计次循环首 (单元数, 变量 ) 排序变量 [变量 ] = 对象. 取项目文本 (序号数组 [取绝对值 (选择 (排序方式, -1, 行数 ) � �� (变量 - 1 ) \ 列数 )], (变量 - 1 ) % 列数 ) 背景颜色 [变量 ] = 对象. 取字体色 (序号数组 [取绝对值 (选择 (排序方式, -1, 行数 ) � �� (变量 - 1 ) \ 列数 )], (变量 - 1 ) % 列数 ) 计次循环尾 () 计次循环首 (单元数, 变量 ) 对象. 置项目文本 ( (变量 - 1 ) \ 列数, (变量 - 1 ) % 列数, 排序变量 [变量 ]) 对象. 置字体色 ( (变量 - 1 ) \ 列数, (变量 - 1 ) % 列数, 背景颜色 [变量 ]) 对象. 置项目附加数值 ( (变量 - 1 ) \ 列数, 表项数值 [取绝对值 (选择 (排序方式, -1, 行数 ) � �� (变量 - 1 ) \ 列数 )]) 对象. 置项目尺寸 ( (变量 - 1 ) \ 列数, 项目尺寸 [取绝对值 (选择 (排序方式, -1, 行数 ) � �� (变量 - 1 ) \ 列数 )]) 如果真 (选择框列 > -1 ) 组件置选择框元素数据 (组件句柄, #元素归属_超列项目, (变量 - 1 ) \ 列数, 选择框列, 0, 0, 1, 0, “”, 0, 选择框状态 [取绝对值 (选择 (排序方式, -1, 行数 ) � �� (变量 - 1 ) \ 列数 )])  计次循环尾 () 如果真 (选中项 ≠ 0 ) 计次循环首 (对象. 取项目数量 (), 变量 )  如果真 (对象. 取项目附加数值 (变量 - 1 ) = 选中项 )   对象.现行选中项 = 变量 - 1    对象. 保证显示 (变量 - 1, , )  跳出循环 ()    计次循环尾 ()返回 (取启动时间 () - 排序时间)|
二分查找 | 整数型 | | |
数组 | 文本型 | | | | 待查 | 文本型 | | | | 类型 | 整数型 | | | | 区分大小写 | 逻辑型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | K | 整数型 | | | M | 整数型 | | | J | 整数型 | | | 数值A | 双精度小数型 | | | 数值B | 双精度小数型 | | | 文本 | 文本型 | | |
K = 1 M = 取数组成员数 (数组 ) 如果真 (M = 0 ) 返回 (1 ) 判断 (类型 = 0 ) 数值A = 到数值 (待查 ) 如果真 (数值A ≥ 到数值 (数组 [M ]))  返回 (M + 1 ) 如果真 (数值A ≤ 到数值 (数组 [1 ]))  返回 (1 ) 判断循环首 (K < M - 1 )  J = (K + M ) \ 2   数值B = 到数值 (数组 [J ])  如果真 (数值A = 数值B )   K = J   跳出循环 ()  如果 (数值A < 数值B )   M = J    K = J     判断循环尾 () 判断 (类型 = 1 ) 如果真 (文本比较 (待查, 数组 [M ], 区分大小写 ) ≥ 0 ) 返回 (M + 1 ) 如果真 (文本比较 (待查, 数组 [1 ], 区分大小写 ) ≤ 0 ) 返回 (1 ) 判断循环首 (K < M - 1 )  J = (K + M ) \ 2   如果真 (文本比较 (待查, 数组 [J ], 区分大小写 ) = 0 )   K = J   跳出循环 ()  如果 (文本比较 (待查, 数组 [J ], 区分大小写 ) < 0 )   M = J    K = J     判断循环尾 () 判断 (类型 = 2 ) 数值A = 取字节集数据 (到字节集 (到时间 (待查 )), #双精度小数型, ) 如果真 (数值A ≥ 取字节集数据 (到字节集 (到时间 (数组 [M ])), #双精度小数型, ))  返回 (M + 1 ) 如果真 (数值A ≤ 取字节集数据 (到字节集 (到时间 (数组 [1 ])), #双精度小数型, ))  返回 (1 ) 判断循环首 (K < M - 1 )  J = (K + M ) \ 2   数值B = 取字节集数据 (到字节集 (到时间 (数组 [J ])), #双精度小数型, )  如果真 (数值A = 数值B )   K = J   跳出循环 ()  如果 (数值A < 数值B )   M = J    K = J     判断循环尾 () 返回 (K + 1)
|