开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 27228|回复: 100
打印 上一主题 下一主题
收起左侧

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

[复制链接]

结帖率:93% (13/14)
跳转到指定楼层
楼主
发表于 2021-11-21 18:38:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   重庆市重庆市
分享例程
界面截图:
备注说明: -
在c++中createwindow,需要一个一个计算控件的左边顶边,非常麻烦
如果后面,需要在某个控件前加一个控件,就要崩溃了,后面算过的位置,都要重新改
所以想着干脆布局交给运行时

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

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

尝试简单介绍一下,

1:里面管理的内容都叫布局盒子

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

高度auto的垂直盒子,高度100%的子盒子,布局计算为0,不能推测到底需要多少
宽度auto的垂直盒子,宽度100%的子盒子,计算为最宽的其他能确定具体大小的子盒子的宽度。
也就是,计算auto的具体尺寸,遇到子盒子百分比尺寸时,会先假定为0,当确定之后父盒子之后,再去确定

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


代码:

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

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


默认包含一个顶层盒子,水平,分隔间距8,内边距全为0

可以通过:
[JavaScript] 纯文本查看 复制代码
.版本 2

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

改变默认


百分比

auto

其他:
右对齐:
中间对齐:
两边对齐:
啥对齐也不知道,反正是另外一种对齐了:

组合例子:


堆叠布局:


其他:
Desktop.rar (7.84 KB, 下载次数: 317)
实现代码很少,介绍了这么多……



评分

参与人数 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 奉上小小红包希望笑纳

查看全部评分


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

本帖被以下淘专辑推荐:

结帖率:97% (369/382)

签到天数: 6 天

沙发
发表于 2021-11-21 19:09:42 | 只看该作者   福建省泉州市
看不懂,牛逼
回复 支持 反对

使用道具 举报

签到天数: 2 天

板凳
发表于 2021-11-21 19:12:21 | 只看该作者   北京市北京市
感谢楼主分享!
回复 支持 反对

使用道具 举报

结帖率:82% (14/17)

签到天数: 7 天

地板
发表于 2021-11-21 19:19:51 | 只看该作者   江西省宜春市
看不懂,牛逼
回复 支持 反对

使用道具 举报

结帖率:81% (21/26)

签到天数: 1 天

地下
发表于 2021-11-21 19:21:11 | 只看该作者   浙江省温州市
看起来很牛批啊
回复 支持 反对

使用道具 举报

签到天数: 2 天

6
发表于 2021-11-21 22:40:10 | 只看该作者   河北省唐山市
挺牛逼的看起来来
回复 支持 反对

使用道具 举报

结帖率:63% (5/8)
7
发表于 2021-11-21 23:44:00 | 只看该作者   内蒙古自治区呼和浩特市
看下隐藏内容~~
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 5 天

8
发表于 2021-11-22 10:27:40 | 只看该作者   湖北省天门市
别的先不说  光这介绍就花了不少时间  感谢
回复 支持 反对

使用道具 举报

签到天数: 7 天

9
发表于 2021-11-22 11:06:01 | 只看该作者   广东省阳江市
3333333333333333333333333
回复 支持 反对

使用道具 举报

结帖率:38% (3/8)

签到天数: 1 天

10
发表于 2021-11-22 13:42:16 | 只看该作者   广西壮族自治区柳州市
感谢楼主分享!
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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