开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 24741|回复: 97
收起左侧

[易语言成品模块] 完美的窗口布局模块,动态布局控件

[复制链接]

结帖率:90% (9/10)
发表于 2021-11-21 18:38:09 | 显示全部楼层 |阅读模式   重庆市重庆市
分享例程
界面截图:
备注说明: -
在c++中createwindow,需要一个一个计算控件的左边顶边,非常麻烦
如果后面,需要在某个控件前加一个控件,就要崩溃了,后面算过的位置,都要重新改
所以想着干脆布局交给运行时

所以弄了一个布局管理类,同时弄了一个易语言的版本

易语言,主要应该就是需要外部窗口调节尺寸后,动态的修改里面控件的位置和大小。

尝试简单介绍一下,

1:里面管理的内容都叫布局盒子
1.jpg
盒子,可以包含子盒子,这是布局管理的关键,垂直盒子就是里面的子盒子是垂直排列的,水平盒子就是水平排列的
没有直接的方法指定盒子的左边和顶边,因为盒子的左边和顶边,都是靠着前面一个盒子。
就像写字一样,水平盒子布局完一个子盒子,第二个盒子左边增加,顶边不变。同理垂直盒子,左边不变,顶边增加。所以还有一种堆叠盒子图中没有画出,左边顶边都不会增加,全部相对父盒子,这种盒子是给选择夹专用的,因为选择夹每页的控件,就是像这样堆叠起来的。
水平,垂直,堆叠,xyz方向

没有子盒子的盒子,这一般就是控件了(并不是说控件不能包含子盒子,分组框,选择夹等容器都大概率包含子盒子)
或者不需要下一个盒子紧挨着,需要留一些空白,可以放一个没有子盒子的盒子,占位达到留白的效果。

盒子可以绑定一个窗口,这一般就是控件了,当布局到该盒子,简单的调用movewindow

2:留白
盒子与盒子之间不是仅仅挨着的,有一个分隔间距,默认为8个像素,
父盒子与子盒子之间,也可以有空白,叫内边距,默认是0,设置通过
[JavaScript] 纯文本查看 复制代码
l.设置内边距 (盒子ID, 8, 8, 8, 8)

每个盒子的分隔间距和上、下、左、右内边距都可以分别设置不同值。

不可见盒子上,一般不设置内边距。带窗口盒子:分组框,选择夹,一般需要设置内边距

3:盒子尺寸,指定盒子尺寸有4种类型
1.最简单的像素 24px

2.父盒子间隔单位,3u(UNIT)
这里的3u表示3个父盒子的分隔间距(默认8),就是24px,一般按钮,64px*24px,可以设置为8u*3u

3.剩余空间的百分比,50%
先分配完px和u,和留白,最后才分配百分比,百分比也是相对剩余这点空间的百分比
一个特殊的特性是:当所有子盒子的百分比分子,超过100,新的分母不是100,而不是所有百分比分子和,等同于变成权重了。
比如,200%,300%的两个盒子,200+300>100,这里的200%就表示200/(200+300),所以2个盒子会按2:3分割父盒子剩下的空间。
当需要,不管父盒子多大,还不太确定需要多少个子控件,子控件总是按比例分割全部空间时,这个特性有用。
3.自动盒子大小,auto
子盒子的大小可以由父盒子决定(百分比),这种尺寸类型下反过来了,父盒子的尺寸由子盒子决定。
指定auto后,具体尺寸为刚好容纳所有子盒子的尺寸。


如果父盒子尺寸类型为auto,有的子盒子尺寸类型为百分比,这取决于盒子是水平盒子还是垂直盒子,宽度auto还是高度auto,和子盒子宽度还是高度设置的100%
15.jpg
高度auto的垂直盒子,高度100%的子盒子,布局计算为0,不能推测到底需要多少
宽度auto的垂直盒子,宽度100%的子盒子,计算为最宽的其他能确定具体大小的子盒子的宽度。
也就是,计算auto的具体尺寸,遇到子盒子百分比尺寸时,会先假定为0,当确定之后父盒子之后,再去确定

总之不会有bug,不会有反人类正常逻辑。
如果有,那就是比较晦涩的特性,比如(当垂直盒子下宽度 或 水平盒子下高度 100%,和200%没有区别,分母总是100,分子超出100部分无效)
子盒子的尺寸永远不会超过父盒子,超出部分会被裁剪


代码:
14.jpg
布局管理器类,默认包含一个顶层盒子,添加窗口、添加水平布局、添加水平窗口布局、添加垂直布局、添加垂直窗口布局、添加堆叠窗口布局,都是添加盒子的,包装函数。
带窗口的可以附带一个窗口句柄,布局到该盒子时同时调节窗口位置。
布局盒子后会同时布局所有的子盒子。
所以只需要窗口尺寸改变后,调用管理器类的布局方法,管理器调用默认顶层盒子的布局,顶层盒子链式布局子盒子。
添加盒子后返回盒子ID。

尺寸用字符串描述,逗号分开的两个表达式(10px、10u、10%,auto,四种格式)


默认包含一个顶层盒子,水平,分隔间距8,内边距全为0
2.jpg
可以通过:
[JavaScript] 纯文本查看 复制代码
.版本 2

l.根初始化 (#Layout_VERTICAL, 8)
l.设置内边距 (, 8, 8, 8, 8)

改变默认
3.jpg

百分比 4.jpg

auto 5.jpg

其他: 6.jpg
右对齐: 7.jpg
中间对齐: 8.jpg
两边对齐: 9.jpg
啥对齐也不知道,反正是另外一种对齐了: 10.jpg

组合例子: 11.jpg


堆叠布局: 12.jpg


其他: 13.jpg
Desktop.rar (7.84 KB, 下载次数: 293)

评分

参与人数 10好评 +8 精币 +14 收起 理由
wg198300 + 1 支持开源~!感谢分享
ckyun + 1 感谢分享,很给力!~
youcaixp + 1 YYDS~!
fengyishen + 1 感谢分享,很给力!~
米米工具 + 1 + 2 支持开源~!感谢分享
喵帕斯和艾希 + 1 + 2 支持开源~!感谢分享
dinglz + 1 + 2 支持开源~!感谢分享
zidoo + 1 + 1 新技能已get√
lao3 + 1 + 2 支持开源~!感谢分享
maozaiba + 1 + 3 奉上小小红包希望笑纳

查看全部评分


友情提醒:请选择可信度高的模块,勿用未知模块,防止小人在模块内加入木马程序。【发现问题模块请到站务投诉】。

本帖被以下淘专辑推荐:

签到天数: 1 天

发表于 4 天前 | 显示全部楼层   云南省红河哈尼族彝族自治州
非常给力,谢谢!!!!!!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

结帖率:100% (6/6)

签到天数: 9 天

发表于 2024-10-3 21:39:02 | 显示全部楼层   浙江省杭州市
好东西啊,感谢分享
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2024-9-24 13:01:41 | 显示全部楼层   浙江省宁波市
YYDS~!支持开源~!感谢分享
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2024-9-24 13:00:23 | 显示全部楼层   浙江省宁波市
        感谢分享,很给力!~
回复 支持 反对

使用道具 举报

发表于 2024-6-2 18:35:43 | 显示全部楼层   河北省廊坊市

厉害啊,这个必须得试试
回复 支持 反对

使用道具 举报

签到天数: 3 天

发表于 2024-5-12 16:14:12 | 显示全部楼层   浙江省金华市
布局后,窗口首次载入正常缩放,但是关闭后,重新载入,所有组件都会往下移动,再关闭再载入会更加往下走,不知道是什么原因?能否帮忙解答一下?
回复 支持 反对

使用道具 举报

签到天数: 3 天

发表于 2024-5-11 08:46:07 | 显示全部楼层   浙江省金华市
女神你好,非常感谢您分享布局方法,我用了您的方法后发现超级列表框在数据重新读取后,大小位置保持在最后一次的状态,不知道是不是我操作有问题,望回复为盼。

补充内容 (2024-5-12 16:15):
该问题已解决。
回复 支持 反对

使用道具 举报

签到天数: 9 天

发表于 2024-1-15 09:21:21 | 显示全部楼层   广西壮族自治区桂林市
类似其它编辑器中的布局模式 不错!
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2023-11-29 13:41:01 | 显示全部楼层   四川省南充市
厉害啊,这个必须得试试
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
发表于 2023-10-24 21:04:12 | 显示全部楼层   贵州省遵义市
实现代码很少
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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