构建一个基础页面
可以看到,最初始的页面实际上是两个控件类被初始化(具体的控件详解参见:基本页面控件详解 ),最后执行了start()语句,首先我们看下start()语句:
- appbase是一个非常特殊的控件,该控件在服务器的控件群中不存在,是每个用户自己系统的特有控件,由于每个页面都有app这个控件,因此内部的方法在每个页面都存在,因此我们可以把该控件理解为全局控件,适合做通信代码,毕竟通信的时候不知道当前在哪个页面。
- page是一个基础控件,主要处理页面的背景,按照上面的图可以看到:
- 第一步,先执行create事件,由于page控件的create事件没有代码,相当于没有执行;
- 第二步,由于page控件没有任何定时器和触摸热区,因此这些也没有执行
- 第三步,执行draw事件
void draw(){//绘制背景
if (mode==0){
bcls(bc);
}else if (mode==1){
bpic(pn);
}else if (mode==2){
bgrad(color1,color2);
}
}
从代码中可以看出,根据mode属性的值,分别调用不同的语句进行绘制,包括bcls绘制固定背景,bpic绘制背景图片,bgrad绘制过渡色背景
- 第四步,执行show事件;page控件的show事件无代码,相当于无执行;
扩展理解
class app=loadcom(appbase);
class page=loadcom(page);
cls(1);
start();
cls(2);
- cls(1);会被执行,但是迅速会被start()中page的draw事件绘制背景覆盖,因此cls(1)这个位置是可以执行的,但是不能放置界面绘图语句,因为page控件会覆盖;一般我们在此位置防止一些非绘图的初始化语句,比如数据绑定语句。
- 而cls(2)是不会被执行的,因为start()会调用操作事件处理程序,因此start()后面的语句不能被执行。
- 那么,如何在绘制背景之后再绘制一些背景呢?需要覆盖page.show()事件
class app=loadcom(appbase);
class page=loadcom(page);
void page.show(){
boxf(10,10,100,100,1);
}
start();
执行效果:
- 备注:右上角的时间是wifi模块中appbase控件实现的