// 设置超级列表框属性
超级列表框1.整行选择 =
真 // 单击整行选中
超级列表框1.允许多选 =
真 // 允许多选
超级列表框1.扩展选择 =
真 //
启用扩展选择模式 (支持拖动多选
)// 添加列
超级列表框1.
插入列 ("内容", 300
) // 初始列宽设为300,可根据需要调整
// 添加测试数据
添加测试数据 ().子程序尾
.局部变量 i, 整数型
.局部变量 长文本, 文本型
超级列表框1.
清空 ()// 添加带长文本的项目
长文本 = "这是一个非常长的文本内容,用于测试显示效果,希望它足够长以验证是否会被截断..."
循环 (i = 1; i <= 20; i = i + 1
)超级列表框1.
插入项目 (, "项目 " +
到文本 (i
) + " - " + 长文本
)结束
.子程序尾
|
_超级列表框1_鼠标左键被按下 | 整数型 | |
|
横向位置 | 整数型 | | | |
纵向位置 | 整数型 | | | | 功能键状态 | 整数型 | | | |
// 记录鼠标按下时的位置,用于拖动选择
超级列表框1.鼠标按下列 = 超级列表框1.
取鼠标所在列 (横向位置
)超级列表框1.鼠标按下行 = 超级列表框1.
取鼠标所在行 (纵向位置
).子程序尾
|
_超级列表框1_鼠标移动 | 整数型 | |
|
横向位置 | 整数型 | | | |
纵向位置 | 整数型 | | | | 功能键状态 | 整数型 | | | |
.局部变量 当前行, 整数型
// 左键按下时拖动多选
如果 ( (功能键状态 位与
#常量1 ) =
#常量1 ) // 检查左键是否按下
当前行 = 超级列表框1.
取鼠标所在行 (纵向位置
)// 如果当前行有效且与按下时的行不同
如果 (当前行 >= 0
且 当前行 != 超级列表框1.鼠标按下行
)// 清除原有选择
超级列表框1.
清空选择 ()// 根据鼠标移动方向选择多行
如果 (当前行 > 超级列表框1.鼠标按下行
)// 向下拖动
循环 (i = 超级列表框1.鼠标按下行; i <= 当前行; i = i + 1
)超级列表框1.
选择项目 (i,
真)结束
否则
// 向上拖动
循环 (i = 当前行; i <= 超级列表框1.鼠标按下行; i = i + 1
)超级列表框1.
选择项目 (i,
真)结束
结束
结束
结束
.子程序尾
// 设置超级列表框属性
超级列表框1.整行选择 = 真
超级列表框1.允许多选 = 真
超级列表框1.扩展选择 = 真
// 添加列,初始宽度设为足够大,或根据需要动态调整
超级列表框1.
插入列 ("内容", 500
)// 启用自绘,以便自定义绘制长文本
超级列表框1.自绘 = 真
// 添加测试数据
添加测试数据 ().子程序尾
.局部变量 i, 整数型
.局部变量 长文本, 文本型
超级列表框1.
清空 ()// 添加带超长文本的项目
长文本 = "这是一个非常长的文本内容,用于测试显示效果,希望它足够长以验证是否会被截断。" +
"这个文本可能会很长很长,远远超过列表框的宽度,我们需要确保它能正确显示而不被截断。" +
"这里可以添加更多的文字来延长文本长度,测试显示效果..."
循环 (i = 1; i <= 10; i = i + 1
)超级列表框1.
插入项目 (, "项目 " +
到文本 (i
) + " - " + 长文本
)结束
.子程序尾
|
_超级列表框1_自绘项目 | 整数型 | |
|
项目索引 | 整数型 | | | |
子项目索引 | 整数型 | | | | 绘制状态 | 整数型 | | | | 区域 | 整数型 | | | | 句柄 | 整数型 | | | |
.局部变量 文本, 文本型
.局部变量 字体, 整数型
.局部变量 文本矩形, 整数型, 传址
.局部变量 显示文本, 文本型
.局部变量 格式, 整数型
// 获取项目文本
文本 = 超级列表框1.
取项目文本 (项目索引, 子项目索引
)// 创建适合显示长文本的字体
字体 =
取字体句柄 ("微软雅黑", 9, 0, 0
)// 设置绘制区域
文本矩形 = 区域
// 长文本不截断显示,使用DT_WORDBREAK格式
格式 =
#DT_WORDBREAK +
#DT_LEFT +
#DT_VCENTER +
#DT_SINGLELINE // 绘制文本,自动换行显示长文本
绘制文本 (句柄, 文本,
取文本长度 (文本
), 文本矩形, 格式, 字体
)// 释放字体资源
释放字体 (字体
).子程序尾
|
_超级列表框1_鼠标左键被按下 | 整数型 | |
|
横向位置 | 整数型 | | | |
纵向位置 | 整数型 | | | | 功能键状态 | 整数型 | | | |
超级列表框1.鼠标按下列 = 超级列表框1.
取鼠标所在列 (横向位置
)超级列表框1.鼠标按下行 = 超级列表框1.
取鼠标所在行 (纵向位置
).子程序尾
|
_超级列表框1_鼠标移动 | 整数型 | |
|
横向位置 | 整数型 | | | |
纵向位置 | 整数型 | | | | 功能键状态 | 整数型 | | | |
.局部变量 当前行, 整数型
如果 ( (功能键状态 位与
#常量1 ) =
#常量1 )当前行 = 超级列表框1.
取鼠标所在行 (纵向位置
)如果 (当前行 >= 0
且 当前行 != 超级列表框1.鼠标按下行
)超级列表框1.
清空选择 ()如果 (当前行 > 超级列表框1.鼠标按下行
)循环 (i = 超级列表框1.鼠标按下行; i <= 当前行; i = i + 1
)超级列表框1.
选择项目 (i,
真)结束
否则
循环 (i = 当前行; i <= 超级列表框1.鼠标按下行; i = i + 1
)超级列表框1.
选择项目 (i,
真)结束
结束
结束
结束
.子程序尾
// 基本设置
超级列表框1.整行选择 = 真
超级列表框1.允许多选 = 真
超级列表框1.扩展选择 = 真
超级列表框1.自绘 = 真
// 添加列,宽度设为足够大
超级列表框1.
插入列 ("内容", 800
)// 添加测试数据
添加测试数据 ().子程序尾
.局部变量 i, 整数型
.局部变量 长文本, 文本型
超级列表框1.
清空 ()// 生成超长测试文本
长文本 = "这是一个非常长的文本内容,用于测试显示效果,希望它足够长以验证是否会被截断。"
// 重复添加文本以延长长度
循环 (i = 1; i <= 20; i = i + 1
)长文本 = 长文本 + " 这里添加更多的文字来延长文本长度,测试显示效果... "
结束
循环 (i = 1; i <= 5; i = i + 1
)超级列表框1.
插入项目 (, "项目 " +
到文本 (i
) + " - " + 长文本
)结束
.子程序尾
|
_超级列表框1_自绘项目 | 整数型 | |
|
项目索引 | 整数型 | | | |
子项目索引 | 整数型 | | | | 绘制状态 | 整数型 | | | | 区域 | 整数型 | | | | 句柄 | 整数型 | | | |
.局部变量 文本, 文本型
.局部变量 字体, 整数型
.局部变量 文本矩形, 整数型, 传址
.局部变量 格式, 整数型
.局部变量 显示区域, 整数型, 传址
.局部变量 行高, 整数型
// 获取项目文本
文本 = 超级列表框1.
取项目文本 (项目索引, 子项目索引
)// 创建字体
字体 =
取字体句柄 ("微软雅黑", 9, 0, 0
)// 设置绘制区域
文本矩形 = 区域
显示区域 = 区域
// 计算文本所需高度,实现自动换行
格式 =
#DT_CALCRECT +
#DT_WORDBREAK +
#DT_LEFT // 先计算文本所需高度
绘制文本 (句柄, 文本,
取文本长度 (文本
), 文本矩形, 格式, 字体
)行高 = 文本矩形.bottom - 文本矩形.top
// 调整项目高度以适应长文本
如果 (行高 > 超级列表框1.
取行高 (项目索引
))
超级列表框1.
设置行高 (项目索引, 行高 + 10
)结束
// 重新设置绘制区域
显示区域.top = 区域.top
显示区域.bottom = 区域.top + 行高
显示区域.left = 区域.left
显示区域.right = 区域.right
// 绘制文本,使用自动换行
格式 =
#DT_WORDBREAK +
#DT_LEFT +
#DT_TOP 绘制文本 (句柄, 文本,
取文本长度 (文本
), 显示区域, 格式, 字体
)// 释放资源
释放字体 (字体
).子程序尾
|
_超级列表框1_鼠标左键被按下 | 整数型 | |
|
横向位置 | 整数型 | | | |
纵向位置 | 整数型 | | | | 功能键状态 | 整数型 | | | |
超级列表框1.鼠标按下列 = 超级列表框1.
取鼠标所在列 (横向位置
)超级列表框1.鼠标按下行 = 超级列表框1.
取鼠标所在行 (纵向位置
).子程序尾
|
_超级列表框1_鼠标移动 | 整数型 | |
|
横向位置 | 整数型 | | | |
纵向位置 | 整数型 | | | | 功能键状态 | 整数型 | | | |
.局部变量 当前行, 整数型
如果 ( (功能键状态 位与
#常量1 ) =
#常量1 )当前行 = 超级列表框1.
取鼠标所在行 (纵向位置
)如果 (当前行 >= 0
且 当前行 != 超级列表框1.鼠标按下行
)超级列表框1.
清空选择 ()如果 (当前行 > 超级列表框1.鼠标按下行
)循环 (i = 超级列表框1.鼠标按下行; i <= 当前行; i = i + 1
)超级列表框1.
选择项目 (i,
真)结束
否则
循环 (i = 当前行; i <= 超级列表框1.鼠标按下行; i = i + 1
)超级列表框1.
选择项目 (i,
真)结束
结束
结束
结束
.子程序尾