这篇主要介绍duilib如何使用脚本。
我认为脚本的存在的意义就是补充UI库的不足,与业务逻辑无关的UI操作,都应该在脚本中完成。当然有些经常需要改动的算法,放入脚本中运行,也是挺方便的。
使用中需要注意几点,
1,和所有脚本语言一样,脚本中没有指针,相应的操作是“@”为指针,&为引用。除此之外,和写C++没有什么区别了。
CPaintManagerUI @pManager = btnControl.GetManager(); //获取Manager指针
CControlUI @pControl = pManager.FindControl("ctrlname"); //没有指针操作符“->”,还是用"."表示。
pControl.SetText("It is me !!!"); //用"."调用成员函数。
2,不提供Shared与否的方式,脚本文件必须一次性载入,统一放在主窗口xml头部。脚本内容不能嵌套在布局文件中。
<Window>
<Include source="config.xml" />
<script source="testbutton.as" />
<script source="customlabel.as" />
<VerticalLayout>
..............
</VerticalLayout>
接下来演示一下,脚本运作方式。以下面这个窗口为例,我们希望在button上面显示一个时钟。
1,新建脚本文件 testbutton.as,插入2个函数
bool On_Control_Init(CControlUI &obj)
bool On_Control_Event(CControlUI &obj, TEventUI &ev)
2,书写脚本内容,函数名一般要改一下。
bool OnTestButtonInit(CControlUI &obj)
{
obj.SetTimer(1,1000); //创建定时器
return true;
}
bool OnTestButtonEvent(CControlUI &obj, TEventUI &ev)
{
if(ev.Type == UIEVENT_TIMER) //在定时器事件中,更新显示文本。
{
datetime dt;
dt.GetCurrentTime();
SetText(dt.Format("%Y-%m-%d %H:%M:%S"));
}
return false;
}
3,在设计器中关联函数
4,把脚本文件放到xml中
<?xml version="1.0" encoding="UTF-8"?>
<Window size="522,400" sizebox="0,0,4,4" caption="0,0,0,20" showshadow="true" shadowsize="2" shadowposition="2,2" shadowcolor="0xFF4B4B4B">
<Include source="config.xml" />
<script source="testbutton.as" />
5,设计器中测试窗口。可以看到窗口中一秒更新一次时间显示。
脚本演示大概就是这样子了。
设计器带的脚本编辑有语法提示,写起来不是太困难。经过我一顿骚操作,大量的模板+宏,注册控件很简单了,工作量也很少,只是要经过无脑复制粘贴无数次。不知道为什么DuiScript这个工程Release编译时间要很长,Debug编译只要几秒钟,哪位高手帮我看看是什么原因。
其实加入脚本系统,并不难,难的是工作量。Python首先不考虑,因为需要安装环境,需要安装环境的都不考虑。lua不要安装环境,但是注册函数太过麻烦了,再说了它和C++语法相差太远了。
angelscript官方主页
代码共享地址:
https://gitee.com/Liqs99/DuiLib_DuiEditor
https://github.com/xfcanyue/DuiLib_DuiEditor
duilib设计器交流群:819272442