aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 28391|回复: 8

使用 fsys.table,fsys.config 创建配置文件

[复制链接]

166

主题

2154

回帖

1万

积分

管理员

积分
13056
发表于 2016-1-23 19:33:59 | 显示全部楼层 |阅读模式

166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-1-23 19:34:49 | 显示全部楼层
fsys.config 实际上是对 fsys.table的封装,
fsys.table的功能是是将table对象映射为硬盘文件 - 以创建一个可持久化的table对象,在aardio中数组、哈希表、结构体等等都是table(请参考语法文档)。

fsys.table使用 table.tostring() 函数将一个table转换为aardio代码并写入一个字符串对象(忽略表的所有函数成员)。然后将此字符串写入硬盘,在加载文件时,使用 eval()函数解析aardio 代码重新生成table对象。

fsys.table的用法非常简单,最简单的例子:
import fsys.table;
var ftbl = fsys.table("/test/test.table"); //注意目录或文件不存在时会自动创建
ftbl.name = 123;

上面的ftbl对象就象一个普通的table对象那样使用,
区别是在线程结束时,他会自动更新对应的硬盘文件的值( 控制台程序直接点关闭按钮 - 这种异常终止程序时不会更新硬盘文件)。

ftbl对象 还提供以下成员函数:
ftbl.load() 函数用于再次从硬盘文件重新载入值。
ftbl.save() 函数用于手动保存表到硬盘文件。
ftbl.assign() 函数用于将参数指定的表混入到当前对象,类似table.assign ()函数。
ftbl.mix() 函数同样是混入表到当前对象,但是不会覆盖已经存在的值,类似 table.mix() 函数。
ftbl.beforeSave 用于自定义一个回调函数,可在保存配置文件以前自动调用。




166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-1-23 19:47:36 | 显示全部楼层
fsys.config与fsys.table类似,区别是创建参数是一个文件目录,而不是指定一个文件路径。
在获取fsys.config配置对象的成员时,自动将其生成一个fsys.table对象,

示例代码:
import fsys.config;
config = fsys.config(
"/config/")
config.uiSetting.height = 123;
config的成员配置文件名不能以下划线开始,例如 config._uiSetting 这样写是错的。
上面的 config.uiSetting 将会自动生成一个fsys.talbe对象 - 对应的硬盘文件存储于创建 fsys.config对象时指定的 "/config/"目录下(即 config.uiSetting 对应的硬盘文件为 "/config/uiSetting.table").

config仅提供一个函数,即 config.saveAll() 用于保存所有的配置文件。
当然即使你不调用这个函数,在退出程序时,也会自动保存(除非程序意外终止)。

如果你不希望将配置文件保存在当前目录,而是系统的AppData目录(这也是推荐的做法),那么可以象下面这样写
config = ..fsys.config(
    ..fsys.getSpecial( 0x1c /*_CSIDL_LOCAL_APPDATA*/ ,"/应用程序名/" )
);


166

主题

2154

回帖

1万

积分

管理员

积分
13056
 楼主| 发表于 2016-1-23 20:23:13 | 显示全部楼层
win.form创建的窗口对象,可以使用 bindConfig() 函数将控件绑定到配置文件,示例:
import fsys.config;
config = fsys.config(
"/config/");

//将窗口控件绑定到配置文件 config.mainForm
winform.bindConfig( config.winform,{
    edit = "text";
    radiobutton =
"checked";
    checkbox =
"checked";
    combobox =
"selIndex";
} );

这个函数的第一个参数指定一个fsys.table对象,
第二个参数可选指定一个表(可省略此参数),键为控件类名,值为需要同步到配置文件的属性。

窗口在绑定配置文件以后,在窗口销毁后,控件指定的值将会自动同步到配置文件。


下面是一个更完整的例子,演示了如何重置控件的值、如何手动保存配置:
import win.ui;
/*DSG{{*/
winform = ..win.form(text="aardio form";right=599;bottom=399)
winform.add(
btnReset={cls="button";text="重置";left=389;top=351;right=521;bottom=379;z=3};
btnSave={cls="button";text="保存";left=231;top=351;right=363;bottom=379;z=1};
edit3={cls="edit";text="edit3";left=44;top=42;right=407;bottom=68;edge=1;multiline=1;z=2}
)
/*}}*/

import fsys.config;

//创建配置文件
var config = fsys.config("/config/");

//将窗口控件绑定到配置文件 config.mainForm
winform.bindConfig( config.winform,{
    edit = "text";
} );

//取消或重置为初始值
winform.btnReset.oncommand = function(id,event){
    config.winform.load();
}

//也可以手动保存配置文件
winform.btnSave.oncommand = function(id,event){
    config.winform.save();
}

//显示窗口
winform.show();

//启动界面线程消息循环
win.loopMessage();

绑定配置文件的窗口能自动同步控件的指定值到配置文件。


47

主题

131

回帖

1167

积分

荣誉会员

积分
1167
发表于 2016-1-23 21:26:39 | 显示全部楼层
谢谢

0

主题

8

回帖

83

积分

培训班

积分
83
发表于 2016-1-23 22:17:12 | 显示全部楼层
好,太好了,正是我想学习的,嘿嘿,好幸福——想什么就来什么,感谢版主!

1

主题

4

回帖

54

积分

一级会员

积分
54
发表于 2016-4-3 20:54:22 | 显示全部楼层
好东西,学习了

0

主题

2

回帖

13

积分

新手入门

积分
13
发表于 2016-4-24 23:41:21 | 显示全部楼层
一切变的简单

0

主题

4

回帖

86

积分

一级会员

积分
86
发表于 2018-6-28 16:39:09 | 显示全部楼层
非常方便,发现这个语言真是神器
学习了,不错。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-1-13 14:56 , Processed in 0.072327 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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