|
发表于 2021-1-2 03:07:58
|
显示全部楼层
江西省九江市
.版本 2
.子程序 窗口_自动排列, , 公开, 自动将多个窗口,整齐的排列好。
.参数 窗口句柄, 整数型, 数组, 需要自动排列的窗口句柄数组
.参数 横间距, 整数型, 可空, 窗口之间的横向间距
.参数 纵间距, 整数型, 可空, 窗口之间的纵向间距
.参数 每行数量, 整数型, 可空, 每行几个窗口。留空则根据屏幕尺寸自动计算
.参数 对齐方式, 整数型, 可空, 0.左上角;1.右上角;2.左下角;3.右下角;4.局中
.参数 是否按标题排列, 整数型, 可空, 可空 默认:0 =不按标题排序 1=从小到大 其他非零=从大到小
.参数 新宽度, 整数型, 可空, 为0或省略时,不修改宽度
.参数 新高度, 整数型, 可空, 为0或省略时,不修改高度
.局部变量 总数, 整数型
.局部变量 行数, 整数型
.局部变量 窗口矩形, 矩形_
.局部变量 窗口宽度, 整数型
.局部变量 窗口高度, 整数型
.局部变量 临时矩形, 矩形_
.局部变量 屏幕宽度, 整数型
.局部变量 屏幕高度, 整数型
.局部变量 任务栏位置, 整数型
.局部变量 任务栏高度, 整数型
.局部变量 索引, 整数型
.局部变量 次数1, 整数型
.局部变量 次数2, 整数型
.局部变量 余数, 整数型
.局部变量 标题数组, 文本型, , "0"
总数 = 取数组成员数 (窗口句柄)
.如果真 (总数 = 0)
输出调试文本 (“窗口数量不能为0 ”)
返回 ()
.如果真结束
.如果真 (是否按标题排列 > 0)
重定义数组 (标题数组, 假, 总数)
.计次循环首 (总数, 次数1)
标题数组 [次数1] = 取窗口标题_ (窗口句柄 [次数1]) + “|+|” + 到文本 (窗口句柄 [次数1])
' _窗口激活_SwitchToThisWindow (句柄数组 [n], 真)
.计次循环尾 ()
数组_排序S_ASM (标题数组, 选择 (是否按标题排列 = 1, 真, 假))
.计次循环首 (总数, 次数1)
窗口句柄 [次数1] = 到整数 (取文本右边_ (标题数组 [次数1], “|+|”))
.计次循环尾 ()
.如果真结束
.' 如果真 (_窗口是否最小化_IsIconic (窗口句柄 [1]))
' _窗口激活_SwitchToThisWindow (窗口句柄 [1], 真)
.如果真结束
_窗口取外矩形_GetWindowRect (窗口句柄 [1], 窗口矩形)
窗口宽度 = 窗口矩形.宽度 - 窗口矩形.左边
窗口高度 = 窗口矩形.高度 - 窗口矩形.顶边
' 输出调试文本 (窗口宽度, 窗口高度)
.如果真 (新宽度 > 0)
窗口宽度 = 新宽度
.如果真结束
.如果真 (新高度 > 0)
窗口高度 = 新高度
.如果真结束
.如果真 (对齐方式 = 4 且 每行数量 = 0)
每行数量 = 绝对取整 (求平方根 (总数))
.如果真结束
.如果真 (每行数量 ≤ 0)
.如果 (窗口宽度 ≥ 取屏幕宽度 ())
每行数量 = 1
.否则
每行数量 = 绝对取整 (取屏幕宽度 () ÷ 窗口宽度)
.如果结束
.如果真结束
屏幕宽度 = 取屏幕宽度 ()
屏幕高度 = 取屏幕高度 () - 40
行数 = 总数 ÷ 每行数量
余数 = 总数 % 每行数量
.如果真 (余数 > 0)
行数 = 行数 + 1
.如果真结束
' 计算总矩形.宽度高
临时矩形.宽度 = 窗口宽度 + (窗口宽度 + 横间距) × (每行数量 - 1)
.如果真 (临时矩形.宽度 > 屏幕宽度)
输出调试文本 (“自动排列宽度超出屏幕。”)
.如果真结束
临时矩形.高度 = 窗口高度 + (窗口高度 + 纵间距) × (行数 - 1)
.如果真 (临时矩形.高度 > 屏幕高度)
输出调试文本 (“自动排列高度超出屏幕。”)
.如果真结束
' 计算并排列窗口位置
索引 = 1
.计次循环首 (行数, 次数1)
.如果真 (余数 > 0 且 次数1 = 行数)
每行数量 = 余数
.如果真结束
.如果真 (对齐方式 = 0) ' 左上角
临时矩形.左边 = 0
临时矩形.顶边 = (次数1 - 1) × (窗口高度 + 纵间距)
.如果真结束
.如果真 (对齐方式 = 1) ' 右上角
临时矩形.左边 = 屏幕宽度 - 窗口宽度
临时矩形.顶边 = (次数1 - 1) × (窗口高度 + 纵间距)
.如果真结束
.如果真 (对齐方式 = 2) ' 左下角
临时矩形.顶边 = 屏幕高度 - 窗口高度 - (次数1 - 1) × (窗口高度 + 纵间距)
临时矩形.左边 = 0
.如果真结束
.如果真 (对齐方式 = 3) ' 右下角
临时矩形.顶边 = 屏幕高度 - 窗口高度 - (次数1 - 1) × (窗口高度 + 纵间距)
临时矩形.左边 = 屏幕宽度 - 窗口宽度
.如果真结束
.如果真 (对齐方式 = 4) ' 居中
临时矩形.左边 = 屏幕宽度 ÷ 2 - (窗口宽度 + (窗口宽度 + 横间距) × (每行数量 - 1)) ÷ 2
临时矩形.顶边 = (屏幕高度 - 临时矩形.高度) ÷ 2 + (次数1 - 1) × (窗口高度 + 纵间距)
.如果真结束
' 保持窗口在屏幕内
.如果真 (临时矩形.左边 < 0)
临时矩形.左边 = 0
.如果真结束
.如果真 (临时矩形.顶边 < 0)
临时矩形.顶边 = 0
.如果真结束
.如果真 (临时矩形.左边 + 窗口宽度 > 屏幕宽度)
临时矩形.左边 = 屏幕宽度 - 窗口宽度
.如果真结束
.如果真 (临时矩形.顶边 + 窗口高度 > 屏幕高度)
临时矩形.顶边 = 屏幕高度 - 窗口高度
.如果真结束
.计次循环首 (每行数量, 次数2)
' 如果真 (_窗口是否最小化_IsIconic (窗口句柄 [索引]))
_窗口移动_MoveWindow (窗口句柄 [索引], 临时矩形.左边, 临时矩形.顶边, 窗口宽度, 窗口高度, 真)
_窗口激活_SwitchToThisWindow (窗口句柄 [索引], 真)
索引 = 索引 + 1
.如果真 (对齐方式 = 0) ' 左上角
临时矩形.左边 = 临时矩形.左边 + 窗口宽度 + 横间距
.如果真结束
.如果真 (对齐方式 = 1) ' 右上角
临时矩形.左边 = 临时矩形.左边 - (窗口宽度 + 横间距)
.如果真结束
.如果真 (对齐方式 = 2) ' 左下角
临时矩形.左边 = 临时矩形.左边 + 窗口宽度 + 横间距
.如果真结束
.如果真 (对齐方式 = 3) ' 右下角
临时矩形.左边 = 临时矩形.左边 - (窗口宽度 + 横间距)
.如果真结束
.如果真 (对齐方式 = 4) ' 居中
临时矩形.左边 = 临时矩形.左边 + 窗口宽度 + 横间距
.如果真结束
_处理事件 ()
.计次循环尾 ()
临时矩形.顶边 = 临时矩形.顶边 + 纵间距
_处理事件 ()
.计次循环尾 ()
|
|