自定义键盘

自定义键盘前需解锁键盘,请参考 键盘解锁和重置

进入键盘时自动将输入框清空

提示

其实就是在键盘的后初始化事件中将input.txt和show.txt赋值为空,请注意两个引号之间不要有空格,否则会导致转换失败的

完整的代码如下

1input.txt=""
2show.txt=""
../../_images/1_0.jpg

键盘页面默认为拼音输入

当前工程的编码必须是GB2312,且当前配置的键盘必须为输入法键盘。

在页面的后初始化页面中去click中英切换按键(模拟人手去自动切换输入法)

../../_images/keyboard_pinyin.jpg ../../_images/keyboard_pinyin2.jpg

键盘页面默认为英文大写

在页面的后初始化页面中去click caps按键(模拟人手去自动切换输入法)

../../_images/keyboard_caps.jpg ../../_images/keyboard_caps2.jpg

键盘只能输入32个字符需要改成能输入更多的字符

将键盘页面的show.txt_maxl和input.txt_maxl的值改为你需要的值即可

如何让键盘的光标不闪烁

提示

关闭键盘页面的tm0控件使能即可

也可以在页面后初始化事件中判断跳转过来的控件的pw属性(需要文本控件,数字控件不支持pw属性)

完整的代码如下

 1if(p[loadpageid.val].b[loadcmpid.val].type==116)
 2{
 3   if(p[loadpageid.val].b[loadcmpid.val].pw==1)
 4   {
 5      tm0.en=0
 6   }else
 7   {
 8      tm0.en=1
 9   }
10}
../../_images/1_1.jpg

键盘页面限制输入数据的值

提示

通过定时器定时转换input.txt的数据到sys0中,然后对sys0的值进行判断

新建一个定时器tm0,将objname改为tmLimit,tim改为50,en设置为1,在 tmLimit 定时器中编写以下代码

 1 covx input.txt,sys0,0,0
 2 //区分不同页面的不同变量,实现对不同变量的不同限制
 3 if(loadpageid.val==0&&loadcmpid.val==page0.n0.id)
 4 {
 5     if(sys0<0)
 6     {
 7     input.txt="0"
 8     }else if(sys0>100)
 9     {
10     input.txt="100"
11     }
12 }else if(loadpageid.val==0&&loadcmpid.val==page0.n1.id)
13 {
14     if(sys0<0)
15     {
16     input.txt="0"
17     }else if(sys0>50)
18     {
19     input.txt="50"
20     }
21 }else if(loadpageid.val==0&&loadcmpid.val==page0.n2.id)
22 {
23     if(sys0<0)
24     {
25     input.txt="0"
26     }else if(sys0>70)
27     {
28     input.txt="70"
29     }
30 }

在键盘页面按下OK键时将参数通过串口发送出去

1、以文本类型发送

提示

编辑ok按钮的弹起事件,在page指令前添加以下代码

../../_images/1_5.png

注意

page指令之后的指令是不会被执行的,因为已经跳转到别的页面了。

提示

这里作为帧头的 55 并不固定,是可以修改为你自己定义的其他帧头,你可以定义多个字节作为帧头

00 01 02 是作为标记来区分n0.val、n1.val、n2.val,可以根据自己的需求进行更改

完整的代码如下

 1//调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,其他的逻辑本页会自动实现
 2//loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
 3if(p[loadpageid.val].b[loadcmpid.val].type==54)
 4{
 5   covx input.txt,p[loadpageid.val].b[loadcmpid.val].val,0,0
 6}else if(p[loadpageid.val].b[loadcmpid.val].type==59)
 7{
 8   covx input.txt,temp.val,0,0
 9if(temp.val<0)
10{
11   temp.val*=-1
12}
13for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
14{
15   temp.val*=10
16}
17p[loadpageid.val].b[loadcmpid.val].val=temp.val
18strlen input.txt,temp.val
19temp.val--
20while(temp.val>=0)
21{
22   substr input.txt,tempstr.txt,temp.val,1
23   if(tempstr.txt==".")
24   {
25      substr input.txt,tempstr.txt,temp.val+1,p[loadpageid.val].b[loadcmpid.val].vvs1
26      covx tempstr.txt,temp2.val,0,0
27      strlen tempstr.txt,temp.val
28      while(temp.val<p[loadpageid.val].b[loadcmpid.val].vvs1)
29      {
30         temp2.val*=10
31         temp.val++
32      }
33      p[loadpageid.val].b[loadcmpid.val].val+=temp2.val
34      temp.val=-1
35   }
36   temp.val--
37}
38substr input.txt,tempstr.txt,0,1
39if(tempstr.txt=="-")
40{
41   p[loadpageid.val].b[loadcmpid.val].val*=-1
42}
43}else
44{
45   p[loadpageid.val].b[loadcmpid.val].txt=input.txt
46}
47//区分不同页面的不同变量
48if(loadpageid.val==0&&loadcmpid.val==page0.n0.id)
49{
50   printh 55 00  //先发送一个帧头,用来告诉下位机这个是n0
51   prints input.txt,0  //发送输入框内的数据
52   printh 0d 0a  //发送帧尾
53}else if(loadpageid.val==0&&loadcmpid.val==page0.n1.id)
54{
55   printh 55 01  //先发送一个帧头,用来告诉下位机这个是n1
56   prints input.txt,0  //发送输入框内的数据
57   printh 0d 0a  //发送帧尾
58}else if(loadpageid.val==0&&loadcmpid.val==page0.n2.id)
59{
60   printh 55 02  //先发送一个帧头,用来告诉下位机这个是n2
61   prints input.txt,0  //发送输入框内的数据
62   printh 0d 0a  //发送帧尾
63}
64page loadpageid.val

2、以数值类型发送

提示

编辑ok按钮的弹起事件,在page指令前添加以下代码

../../_images/1_6.png

注意

page指令之后的指令是不会被执行的,因为已经跳转到别的页面了。

提示

这里作为帧头的 55 并不固定,是可以修改为你自己定义的其他帧头,你可以定义多个字节作为帧头

00 01 02 是作为标记来区分n0.val、n1.val、n2.val,可以根据自己的需求进行更改

完整的代码如下

 1 //调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,其他的逻辑本页会自动实现
 2 //loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
 3 if(p[loadpageid.val].b[loadcmpid.val].type==54)
 4 {
 5     covx input.txt,p[loadpageid.val].b[loadcmpid.val].val,0,0
 6 }else if(p[loadpageid.val].b[loadcmpid.val].type==59)
 7 {
 8     covx input.txt,temp.val,0,0
 9     if(temp.val<0)
10     {
11     temp.val*=-1
12     }
13     for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
14     {
15     temp.val*=10
16     }
17     p[loadpageid.val].b[loadcmpid.val].val=temp.val
18     strlen input.txt,temp.val
19     temp.val--
20     while(temp.val>=0)
21     {
22     substr input.txt,tempstr.txt,temp.val,1
23     if(tempstr.txt==".")
24     {
25         substr input.txt,tempstr.txt,temp.val+1,p[loadpageid.val].b[loadcmpid.val].vvs1
26         covx tempstr.txt,temp2.val,0,0
27         strlen tempstr.txt,temp.val
28         while(temp.val<p[loadpageid.val].b[loadcmpid.val].vvs1)
29         {
30         temp2.val*=10
31         temp.val++
32         }
33         p[loadpageid.val].b[loadcmpid.val].val+=temp2.val
34         temp.val=-1
35     }
36     temp.val--
37     }
38     substr input.txt,tempstr.txt,0,1
39     if(tempstr.txt=="-")
40     {
41     p[loadpageid.val].b[loadcmpid.val].val*=-1
42     }
43 }else
44 {
45     p[loadpageid.val].b[loadcmpid.val].txt=input.txt
46 }
47 //区分不同页面的不同变量
48 if(loadpageid.val==0&&loadcmpid.val==page0.n0.id)
49 {
50     //先发送一个帧头,用来告诉下位机这个是n0
51     printh 55 00
52
53     //将文本转换为数值
54     covx input.txt,sys0,0,0
55
56     //发送输入框内的数据
57     prints sys0,0
58
59     //发送帧尾
60     printh 0d 0a
61
62 }else if(loadpageid.val==0&&loadcmpid.val==page0.n1.id)
63 {
64     //先发送一个帧头,用来告诉下位机这个是n1
65     printh 55 01
66
67     //将文本转换为数值
68     covx input.txt,sys0,0,0
69
70     //发送输入框内的数据
71     prints sys0,0
72
73     //发送帧尾
74     printh 0d 0a
75 }else if(loadpageid.val==0&&loadcmpid.val==page0.n2.id)
76 {
77     //先发送一个帧头,用来告诉下位机这个是n2
78     printh 55 02
79
80     //将文本转换为数值
81     covx input.txt,sys0,0,0
82
83     //发送输入框内的数据
84     prints sys0,0
85
86     //发送帧尾
87     printh 0d 0a
88 }
89 page loadpageid.val

不同控件在系统键盘设置好参数存储到用户存储区

提示

编辑ok按钮的弹起事件,在page指令前添加以下代码

../../_images/1_7.png

完整代码如下

 1//调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,其他的逻辑本页会自动实现
 2//loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
 3if(p[loadpageid.val].b[loadcmpid.val].type==54)
 4{
 5   covx input.txt,p[loadpageid.val].b[loadcmpid.val].val,0,0
 6}else if(p[loadpageid.val].b[loadcmpid.val].type==59)
 7{
 8   covx input.txt,temp.val,0,0
 9if(temp.val<0)
10{
11   temp.val*=-1
12}
13for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
14{
15   temp.val*=10
16}
17   p[loadpageid.val].b[loadcmpid.val].val=temp.val
18   strlen input.txt,temp.val
19   temp.val--
20   while(temp.val>=0)
21{
22   substr input.txt,tempstr.txt,temp.val,1
23   if(tempstr.txt==".")
24   {
25      substr input.txt,tempstr.txt,temp.val+1,p[loadpageid.val].b[loadcmpid.val].vvs1
26      covx tempstr.txt,temp2.val,0,0
27      strlen tempstr.txt,temp.val
28      while(temp.val<p[loadpageid.val].b[loadcmpid.val].vvs1)
29      {
30         temp2.val*=10
31         temp.val++
32      }
33      p[loadpageid.val].b[loadcmpid.val].val+=temp2.val
34      temp.val=-1
35   }
36   temp.val--
37}
38substr input.txt,tempstr.txt,0,1
39if(tempstr.txt=="-")
40{
41   p[loadpageid.val].b[loadcmpid.val].val*=-1
42}
43}else
44{
45   p[loadpageid.val].b[loadcmpid.val].txt=input.txt
46}
47//区分不同页面的不同变量
48if(loadpageid.val==0&&loadcmpid.val==page0.n0.id)
49{
50   covx input.txt,sys0,0,0
51   //如果是n0,写在10的位置
52   wepo sys0,10
53}else if(loadpageid.val==0&&loadcmpid.val==page0.n1.id)
54{
55   covx input.txt,sys0,0,0
56   //如果是n1,写在14的位置
57   wepo sys0,14
58}else if(loadpageid.val==0&&loadcmpid.val==page0.n2.id)
59{
60   covx input.txt,sys0,0,0
61   //如果是n2,写在18的位置
62   wepo sys0,18
63}
64page loadpageid.val

注意

page指令之后的指令是不会被执行的,因为已经跳转到别的页面了。

存储变量类型为txt

../../_images/1_8.png

完整的代码如下

 1//调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,其他的逻辑本页会自动实现
 2//loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
 3if(p[loadpageid.val].b[loadcmpid.val].type==54)
 4{
 5   covx input.txt,p[loadpageid.val].b[loadcmpid.val].val,0,0
 6}else if(p[loadpageid.val].b[loadcmpid.val].type==59)
 7{
 8   covx input.txt,temp.val,0,0
 9if(temp.val<0)
10{
11   temp.val*=-1
12}
13for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
14{
15   temp.val*=10
16}
17p[loadpageid.val].b[loadcmpid.val].val=temp.val
18strlen input.txt,temp.val
19temp.val--
20while(temp.val>=0)
21{
22   substr input.txt,tempstr.txt,temp.val,1
23   if(tempstr.txt==".")
24   {
25      substr input.txt,tempstr.txt,temp.val+1,p[loadpageid.val].b[loadcmpid.val].vvs1
26      covx tempstr.txt,temp2.val,0,0
27      strlen tempstr.txt,temp.val
28      while(temp.val<p[loadpageid.val].b[loadcmpid.val].vvs1)
29      {
30         temp2.val*=10
31         temp.val++
32      }
33      p[loadpageid.val].b[loadcmpid.val].val+=temp2.val
34      temp.val=-1
35   }
36   temp.val--
37}
38substr input.txt,tempstr.txt,0,1
39if(tempstr.txt=="-")
40{
41   p[loadpageid.val].b[loadcmpid.val].val*=-1
42}
43}else
44{
45   p[loadpageid.val].b[loadcmpid.val].txt=input.txt
46}
47//区分不同页面的不同变量
48if(loadpageid.val==0&&loadcmpid.val==page0.t0.id)
49{
50   //如果是t0,写在100的位置,注意分配好存储所需的掉电存储空间空间
51   //此处仅为演示,默认的input.txt_maxl为32,会写入32+1=33个字节,占用100-132
52   wepo input.txt,100
53}else if(loadpageid.val==0&&loadcmpid.val==page0.t1.id)
54{
55   //如果是t1,写在120的位置,注意分配好存储所需的掉电存储空间空间
56   //此处仅为演示,默认的input.txt_maxl为32,会写入32+1=33个字节,占用120-152
57   wepo input.txt,120
58}else if(loadpageid.val==0&&loadcmpid.val==page0.t2.id)
59{
60   //如果是t2,写在140的位置,注意分配好存储所需的掉电存储空间空间
61   //此处仅为演示,默认的input.txt_maxl为32,会写入32+1=33个字节,占用140-172
62   wepo input.txt,140
63}
64page loadpageid.val

注意

page指令之后的指令是不会被执行的,因为已经跳转到别的页面了。

键盘-样例工程下载

资源合集汇总