精易论坛
标题: 【方便轮子】一键保存配置 - 配置保存类3.0 [打印本页]
作者: 神女软件定制 时间: 2023-5-28 18:19
标题: 【方便轮子】一键保存配置 - 配置保存类3.0
本帖最后由 神女软件定制 于 2023-5-31 18:07 编辑
普通方法
对于这样一个窗口,需要读取和保存用户的设置。
我们一般是这样做的:
窗口程序集名 | 保 留 | 保 留 | 备 注 |
窗口程序集_测试窗口 | | | |
bjk_用户名.内容 =
读配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“用户名”,
“默认用户名”)bjk_密码.内容 =
读配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“密码”,
“”)xzk_记住密码.选中 =
读配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“记住密码”,
) =
“真”dxk_线路1.选中 =
读配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“线路1”,
“真”) =
“真”dxk_线路2.选中 =
读配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“线路2”,
) =
“真”zhk_大区.现行选中项 =
到整数 (读配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“大区”,
“0”))
写配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“用户名”, bjk_用户名.内容
)写配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“密码”, bjk_密码.内容
)写配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“记住密码”,
到文本 (xzk_记住密码.选中
))
写配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“线路1”,
到文本 (dxk_线路1.选中
))
写配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“线路2”,
到文本 (dxk_线路2.选中
))
写配置项 (取运行目录 () +
“\配置.ini”,
“常规”,
“大区”,
到文本 (zhk_大区.现行选中项
))
就很麻烦,所有的信息,都要写两次,读取写一次,保存写一次,并且很容易一不小心两边名称不匹配,或者哪边少写了一行。
所以写了三个类,这三个类依次是派生关系,一步一步层次化简化用户代码,最终实现一键保存用户配置
配置保存类
为了减少用户代码,弄了一个类,来统一管理配置的读取和保存:
像这样使用:
窗口程序集名 | 保 留 | 保 留 | 备 注 |
窗口程序集_测试窗口 | | | |
变量名 | 类 型 | 数组 | 备 注 |
cx_ini | 配置保存类 | |
cx_ini.
添加组件 (bjk_用户名,
“用户名”,
“默认用户名”)cx_ini.
添加组件 (bjk_密码
)cx_ini.
添加组件 (xzk_记住密码
)cx_ini.
添加组件 (dxk_线路1, ,
“真”)cx_ini.
添加组件 (dxk_线路2
)cx_ini.
添加组件 (zhk_大区
)cx_ini.
读取配置 ()cx_ini.
保存配置 ()瞬间就清爽了不少,只用在创建完毕的时候,一次指定好所有信息
使用方法:
公开了7个方法:
1.设置配置文件路径:用来自定义配置文件的名称,如果不调用,默认配置文件路径是:调试模式为“配置.ini”,非调试模式为“{执行文件名}.ini”
2.切换节:自定义后续调用添加组件时,使用的节名称,如果不调用默认节名称是:“常规”
3.添加组件:
参数1,通用型,可以传编辑框,选择框,单选框,组合框,滚动条,滑块条,选择夹,日期框,IP编辑框,其他组件需要用户修改源码扩展,已考虑到,后续说明如何扩展
参数2,可空,保存在ini里面的配置项名称,如果不指定,会自动检索组件的名称,比如“编辑框1”,有的时候懒得起名了,就很方便
参数3,可空,首次运行没有配置时的默认值,如果不指定,会自动检索组件设计状态下的值作为默认值,也就是可以确保首次运行没有配置时和窗口设计状态保持一致(这个比较实用)
4.移除组件:目前看起来是多余的,谁会没事干添加了又移除呢,这个是为了方便后面派生类预留的
5.读取配置:无参数,功能如名
6.保存配置:无参数,功能如名
7.重置:无参数,有的时候用户把界面上的配置搞乱了,一般是关闭程序,删除ini文件,重新启动程序。有了这个功能可以给个按钮让他重置,把界面上的配置恢复成调用“添加组件”时指定的默认值。
完整例子:
到这里,已经一定程度的减少了用户代码
配置保存类_ex
派生自配置保存类
扩展了2个方法:“快速添加_从父组件”,“快速添加_批量”,仅添加了用于批量添加控件的功能
因为派生自配置保存类,所以可以使用配置保存类的所有功能(继承)
1.快速添加_从父组件:传一个父组件,可能是窗口,分组框,或选择夹,内部使用“寻找组件”遍历所有子孙窗口,用于添加
2.快速添加_批量:有8个可空通用型参数,可以在任意位置传组件,比如:对象.快速添加_批量(,,编辑框1,,选择夹1),如果多于8个,可能需要多次调用
上面两个方法一般只使用其中一个即可
批量添加时,并没有地方指定配置项名称,内部对“配置项名称”参数留空调用基类的“添加组件”,所以配置项名称自动检索控件名称
也没有地方指定默认值,内部对“默认值”参数留空调用基类的“添加组件”,所以默认值自动检索控件设计状态下的值
快速添加_从父组件,虽然很快,但是有可能同时顺带添加了我们不想读取保存配置的控件。
所以在基类“配置保存类”上提供了“移除组件”方法,按理说移除组件应该由“配置保存类_ex”来提供,但是易语言中类的成员只是私有的,派生类不能直接访问基类的成员,所以只能由基类提供,因为实际管理的成员在基类上。
对“配置保存类”来说,“移除组件”的存在显得不太合理,只能强行解释一下:
万一有人添加了又想移除呢,谁说得准呢,人心难测
或者,为了避免从父控件批量添加时,添加了不想要的控件,可以通过控件的
标识属性来判断,可能需要修改添加这样的代码(目前没有加入):
|
快速添加_从父组件_指定 | | |
|
cs_父组件 | 通用型 | | | |
cs_指定标识 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
jb_窗口 | 窗口 | | |
jb_寻找句柄 | 整数型 | | |
jb_计次 | 整数型 | | |
jb_组件 | 窗口 | | |
_copy8 (jb_窗口, cs_父组件
)jb_寻找句柄 =
寻找组件 (jb_窗口, , , ,
)
计次循环首 (取找到组件数目 (jb_寻找句柄
), jb_计次
)
_copy8 (jb_组件,
取所找到组件 (jb_寻找句柄, jb_计次 - 1
))

如果真 (jb_组件.标记 = cs_指定标识
)
添加组件 (jb_组件
)

计次循环尾 ()清除组件寻找句柄 (jb_寻找句柄
)|
快速添加_从父组件_排除 | | |
|
cs_父组件 | 通用型 | | | |
cs_排除标识 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
jb_窗口 | 窗口 | | |
jb_寻找句柄 | 整数型 | | |
jb_计次 | 整数型 | | |
jb_组件 | 窗口 | | |
_copy8 (jb_窗口, cs_父组件
)jb_寻找句柄 =
寻找组件 (jb_窗口, , , ,
)
计次循环首 (取找到组件数目 (jb_寻找句柄
), jb_计次
)
_copy8 (jb_组件,
取所找到组件 (jb_寻找句柄, jb_计次 - 1
))

如果真 (jb_组件.标记 ≠ cs_排除标识
)
添加组件 (jb_组件
)

计次循环尾 ()清除组件寻找句柄 (jb_寻找句柄
)
示例:
配置保存类_smart
派生自配置保存类_ex
没有添加公开方法,重写了一个基类方法(多态):添加组件
写这个的初衷就是为了方便,减少用户代码,避免写大量的读配置项,写配置项……
“配置保存类”至少需要调用N个“添加组件”和“读取配置”,“保存配置”
“配置保存类_ex”提供了批量添加的方法,但是仍然需要调用“读取配置”,“保存配置”
“配置保存类_smart”可以做到只要一行代码,就可以自动保存、读取配置了
只需要像这样使用(或者其他添加控件的方式),就可以自动的读取和保存配置了:
虽然没有添加任何公开方法,但是派生自“配置保存类_ex”,而“配置保存类_ex”又派生自“配置保存类”,所以可以使用“配置保存类”和“配置保存类_ex”的所有功能
只要变量类型声明为:配置保存类_smart,不管调用哪种方式添加的控件,都会自动读取和保存配置,已经不需要调用“读取配置”和“保存配置”了。
原理是重写了“添加组件”方法,当调用添加时就自动读取了控件的配置,然后内部子类化了所有添加的控件的顶级窗口(可以不是同一个),如果顶级窗口销毁了,自动保存。所以不需要“_窗口_可否被关闭”事件和“保存配置”方法了
这里的重写,不是说重新写了代码,是面向对象里多态的一个概念override,懂的懂,不懂的一时半会确实说不明白。不过简单使用也可以不用理解这个
相对之前发过的一个版本修复了一个bug,之前版本子类化这部分,直接用字节集上的内存做代码执行了,我电脑上是没有问题的,可能有的系统内存默认属性不一样,不允许执行权限。
这个版本自行申请了有执行权限的内存,用来合成窗口过程的代码,把窗口过程引导到类中的方法中。
到这里,从“配置保存类”到“配置保存类_ex”,再到“配置保存类_smart”,一步一步层次化简化了用户代码,最终实现一键保存用户配置。
能为各位懒人做的,就这么多了
【用户扩展】
如果不需要自己修改源码扩展,可以不用看下面的了
前面说到支持这些控件:编辑框,选择框,单选框,组合框,滚动条,滑块条,选择夹,日期框,IP编辑框。
已经把应该支持的都支持了,我觉得应该是用户输入型控件,才需要保存和读取配置。列表框之类的,更偏向于展示型控件了,所以没有添加,如果想添加需要自己修改源码
找到“配置保存类._序列化”方法,读取和保存都会经过这个方法来读取和设置控件上的配置
如果想添加列表框支持,可以像这样添加一个判断分支(红框内的代码):
或者,如果想对类型为密码输入的编辑框加密存储,可以修改添加红框内的代码:
在这里修改对“配置保存类_ex”和“配置保存类_smart”依旧有效。
【可能的优化】
内部使用窗口类名判断控件的类型,不支持颜色选择器,类名也是“Button”,和单选框,选择框重复了
窗口组件转通用型了,没法取出运行时类型信息了,可能是我没找到方法,有知道的可以告知下。
然后用户扩展部分设计方式不太好,按理说不应该让用户修改库代码来实现扩展。
有一个设想的理想的方式,就是配置保存类默认实现了一些类型的序列化方式,用户可以调用“设置序列化器”来添加其他类型的支持,或者覆盖已支持类型的默认实现
但是易语言不支持,没有办法。如果要用这种模式,只能是传指针,但是这样反而增加了用户代码使用的复杂性
假想的代码:
【2023年5月31日17点52分更新】
@kmskik 反馈编译成模块后运行会崩溃,经过排查,是易语言的bug:
弄出来就分享出来了,我确实也没有编译成模块测试过

新的附件已经修复,绕过这个bug
然后更新了
1:跳过只读编辑框,(修改了配置保存类._序列化方法,判断是只读编辑框返回假就可以了)
2:“配置保存类_ex”类中添加了:快速添加_从父组件_指定标记、快速添加_从父组件_排除标记,通过易语言控件的标记属性来指定是否管理配置(前面提到过,干脆加上了)
有人说这个有点复杂,可能有点吧。不过我觉得还是给用户灵活一点,其实是由3种方式可以使用的(就是里面分层的3个类),灵活和简单,难以取舍
【源码下载】
[hide=d9999]
配置保存类-smart.e
(31.04 KB, 下载次数: 250)
[/hide]
作者: 2742282581 时间: 2023-5-28 22:42
6666666666666666666666666666666666666666666666666666666666666666666
作者: pipicool 时间: 2023-5-28 22:46
学习一下
作者: zx896825328 时间: 2023-5-28 23:12
学习一下
作者: futiem 时间: 2023-5-28 23:27
学习一下
作者: 临安 时间: 2023-5-28 23:43
看下隐藏内容~~
作者: 空竹 时间: 2023-5-28 23:45
2.0到3.0 更新日志有无?
作者: 396384183 时间: 2023-5-29 00:43
支持开源~~~~
作者: a3960382663 时间: 2023-5-29 01:50
支持开源~~~~
作者: 网络注册会员 时间: 2023-5-29 08:14
感谢分享
作者: 爱易编程 时间: 2023-5-29 08:33
感觉越写越复杂了啊
作者: wuqingg 时间: 2023-5-29 08:34
神一样的女人~~~~~·
作者: 一指温柔 时间: 2023-5-29 08:47
感谢分享
作者: ocimei 时间: 2023-5-29 09:01
感谢分享
作者: u88营销软件下载 时间: 2023-5-29 09:13
谢谢楼主的无私奉献!!!!!!
作者: pyms 时间: 2023-5-29 09:15
感谢分享,很给力!~
作者: je5426 时间: 2023-5-29 09:31
很牛批, 很方便的样子啊
作者: rectdbszy 时间: 2023-5-29 10:10
感谢分享,很给力!~
作者: sadamu999 时间: 2023-5-29 10:36
看看这个帖子:
https://125.confly.eu.org/forum.php?mod ... 14767963&extra=
关于控件类型的问题应该可以参考一下。
作者: youximeng88 时间: 2023-5-29 10:59
其实可以更简单,枚举窗口句柄,类名判定是什么控件做不同判定保存配置,这个方法只需一句代码保存或者一句代码读取
作者: ZHuanR 时间: 2023-5-29 12:59
感谢分享,很给力!
作者: FUYUEPC 时间: 2023-5-29 13:20
感谢分享,让我来看看里面有什么好东西
作者: kflizcst 时间: 2023-5-29 13:24
感谢分享,很给力!~
作者: kyo9766 时间: 2023-5-29 14:51
目前已经够用了,感谢分享
作者: xiaoniu1230 时间: 2023-5-29 15:31
感谢分享 支持开源 !
作者: 光影魔术 时间: 2023-5-29 16:57
感谢分享模块
作者: kmskik 时间: 2023-5-29 17:52
精易模块里有呀,也是一键保存所有组件的配置哦。这个有啥更好的吗
作者: 深圳梦 时间: 2023-5-29 18:05
感谢分享,很给力!~
作者: iaqkhhss 时间: 2023-5-29 19:35
支持开源~!感谢分享
作者: 神女软件定制 时间: 2023-5-29 19:36
我这个更艺术
作者: 神女软件定制 时间: 2023-5-29 19:38
三个类继承起来了,2.0是有一个是独立
方便自定义,所有读取设置放到一个函数了
修复了一个服务器系统无法运行的bug,内存属性
作者: 神女软件定制 时间: 2023-5-29 20:13
这个粗中有细,可以简单的一键,也可以更细节
作者: cqcc 时间: 2023-5-29 20:34
发现老乡一枚
作者: xiangyabing 时间: 2023-5-29 20:35
感谢分享 支持开源 !
作者: pob234 时间: 2023-5-29 21:22
感谢支持
作者: 无尘666 时间: 2023-5-29 21:23
支持开源~!感谢分享
作者: ttggnn 时间: 2023-5-29 22:05
感谢分享
作者: 88456617 时间: 2023-5-29 22:39
66666666666666666666666666666666666666
作者: ZHuanR 时间: 2023-5-29 23:12
感谢分享
作者: camingo 时间: 2023-5-29 23:36




作者: 该死dē蚊子 时间: 2023-5-29 23:42
感谢分享哦,看着挺好用的。
作者: ker519 时间: 2023-5-29 23:56
感谢分享哦,看着挺好用的。
作者: weihua2018 时间: 2023-5-30 00:15
可以加密和速度吗
作者: snufgpl 时间: 2023-5-30 00:20
能不能加密配置文件?
作者: xiaobai2021 时间: 2023-5-30 00:45






作者: hezhengA 时间: 2023-5-30 02:04
支持一下楼主!
作者: wmv520 时间: 2023-5-30 03:01
感谢分享,很给力!~
作者: shanyukun 时间: 2023-5-30 07:19
谢谢分享,强烈支持。
作者: 拿铁777 时间: 2023-5-30 07:49
和精易里面批量保证配置的有啥区别呢?多了一些其他组件吧。
作者: 一指温柔 时间: 2023-5-30 08:34
感谢分享
作者: shinid8210 时间: 2023-5-30 09:03
感谢分享,很给力!~
作者: kmskik 时间: 2023-5-30 09:12
我编译成易语言模块后,一调用快速添加 从父组件就崩溃啊,
作者: 布鲁惠斯 时间: 2023-5-30 09:14
支持开源~!感谢分享
作者: 易神 时间: 2023-5-30 09:15
支持开源~!感谢分享
作者: 深圳梦 时间: 2023-5-30 09:30
感谢分享,很给力!~
作者: 蓝色形式 时间: 2023-5-30 09:49
先回复再看 应该是个不错的轮子~
作者: 1184798949 时间: 2023-5-30 10:44
支持开源~!感谢分享
作者: 神女软件定制 时间: 2023-5-30 10:45
已经确认这个问题
大致排查是易语言的bug,派生类里显式调用的基类的版本,编译成模块后,去掉了调用基类的,变成调用本类的,导致递归死循环,最后栈溢出崩溃
作者: 梦° 时间: 2023-5-30 11:44
感谢分享,很给力!~
作者: 重新归零 时间: 2023-5-30 12:52
真的很简洁,想请问一下保存配置,是添加的所有组件一次性一起保存的吧?假如只想保存单个组件的配置的话可以单独保存吗?
作者: jianfengxu 时间: 2023-5-30 13:44
#在这里快速回复# 感觉好像并不太实用,不过还是要感谢开源
作者: Elite 时间: 2023-5-30 14:17
神奇女侠 哈哈哈
作者: kmskik 时间: 2023-5-30 15:13
神女软件定制 发表于 2023-5-30 10:45
已经确认这个问题
大致排查是易语言的bug,派生类里显式调用的基类的版本,编译成模块后,去掉了调用基 ...
这个要怎么解决呀。我想弄成模块用
作者: 冰炎by 时间: 2023-5-30 16:15
感谢分享,很给力!~
作者: 1226852858 时间: 2023-5-30 16:21
6666666666666666
作者: 苏杰哥哥 时间: 2023-5-30 16:32
搞这么多命令,感觉很复杂啊
作者: l7518597 时间: 2023-5-30 17:04
感谢分享
作者: 孤胆飞鹰 时间: 2023-5-30 17:36
非常不错,下载看看
作者: ljx111 时间: 2023-5-30 22:36
感谢分享~~~~~~~~~
作者: 神女软件定制 时间: 2023-5-30 23:11
后面有时间再更新了
作者: 不苦小和尚 时间: 2023-5-31 08:17
试试看看能不能用
作者: 一指温柔 时间: 2023-5-31 08:46
学习一下
作者: 李小壞 时间: 2023-5-31 08:51
一键保存配置 - 配置保存类3.0
作者: lm88818 时间: 2023-5-31 09:20
感谢分享,很给力!~
作者: zidoo 时间: 2023-5-31 10:13
学习一下
作者: fu1013 时间: 2023-5-31 11:17
哈哈哈 刚还在搜 如何批量保存配置
作者: zidoo 时间: 2023-5-31 11:19
刚才学会用了基本组件,灰常好用
作者: zzy28791568 时间: 2023-5-31 11:49
学习一下,看看
作者: JYYeah 时间: 2023-5-31 12:22
不错的轮子,不过还是越简单越好,直接一键保存,弄个过滤参数
作者: pkwwfpkwwf 时间: 2023-5-31 12:37
功能很强大,所以我选择精益模块的配置_批量_保存
作者: 老二天天干活 时间: 2023-5-31 12:39
不错的轮子,不过还是越简单越好,直接一键保存,弄个过滤参数
作者: k1浩瑞 时间: 2023-5-31 15:49
但那个好像不能过滤你不想保存的东西,比如你有个编辑框是做日志显示的,它也会被保存。。
作者: tancaijun 时间: 2023-5-31 16:38
1111111111111111
作者: 胜朝 时间: 2023-5-31 17:51
greatjob
作者: Ezczz 时间: 2023-5-31 18:03
666666666666
作者: jangel1 时间: 2023-6-1 01:38
学习学习
作者: 神女软件定制 时间: 2023-6-1 08:23
附件已更新
作者: yekongdeliuxing 时间: 2023-6-1 09:23
感谢分享,很给力!~
作者: 小威哥哥 时间: 2023-6-1 11:37


作者: opq123 时间: 2023-6-1 12:27
感谢分享,很给力!~
作者: liangfeng988 时间: 2023-6-1 15:08
这个跟 精易 的 那个 批量_保存_配置 有啥区别啊? 看看
作者: zzccll 时间: 2023-6-1 18:56
感谢分享,很给力!~
作者: a172158068 时间: 2023-6-1 23:46
楼主辛苦了,谢谢楼主,感谢楼主分享,楼主好人一生平安!!!
作者: hqz9494 时间: 2023-6-2 01:48
开源精神必须支持~
作者: 枷锁 时间: 2023-6-2 07:10
支持原创分享,三克油~~
作者: Gosling 时间: 2023-6-2 09:02
加上超级列表框的保存就完美了,把常见的组件都加上,也没啥扩展的了。
作者: 地狱弑天 时间: 2023-6-2 09:57
66666 这个确实方便
作者: 醉色 时间: 2023-6-2 11:31
【方便轮子】一键保存配置 - 配置保存类3.0
作者: 咸鱼666 时间: 2023-6-2 13:59
小小心意,意思一下
作者: hai20041004 时间: 2023-6-2 16:16
谢谢楼主…………学习了
欢迎光临 精易论坛 (https://125.confly.eu.org/) |
Powered by Discuz! X3.4 |