注意
如果您没有修改键盘功能的需求不需要再往下看了,可以查看其它章节
键盘的实现原理
系统键盘-常用控件和变量说明
①变量loadpageid.val:调用页的页面ID。
②变量loadcmpid.val:调用页的控件ID。
③定时器tm0:让输入框有个光标不断闪烁,如果不需要,控件属性en=0即可。
④变量inputlenth:获取正在使用系统键盘控件字符最大长度。
⑤变量input:输入的数据。
⑥文本show:键盘显示的数据,主要目的是为了让输入框有个闪烁的效果。
其他跳转到键盘页面的方法
注意
正常情况下是不需要配下面这三条代码的
是为了让其他原本不支持键盘的控件控件也能调用键盘
或者是从其他工程中导入的键盘,因为不是用正常方法添加的键盘,没法通过key属性进行配置,需要使用这个方法
page到键盘页之前,先对键盘页的loadgageid.val和loadcmpid.val赋值就可以了
一般在文本控件或数字控件的按下事件中进行赋值,键盘名.loadpageid.val=dp,键盘名.loadcmpid.val=当前控件的id
其他的逻辑会自动实现,loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID,然后调用page 指令跳转到键盘页面即可
这样就可以在键盘页面判断跳转过来的控件类型(type属性),然后根据不同类型调用不同代码转换到键盘上进行显示
keybdAP.loadpageid.val=dp
keybdAP.loadcmpid.val='&id&'
page keybdAP
配置键盘的过程其实就是上位机帮我们自动添加了这三条代码。
演示工程下载链接:
键盘如何获取到原始控件的值
下面的代码为键盘页面的前初始化事件
1//调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,其他的逻辑本页会自动实现
2//loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
3if(p[loadpageid.val].b[loadcmpid.val].type==54)
4{
5 covx p[loadpageid.val].b[loadcmpid.val].val,input.txt,0,0
6 inputlenth.val=24
7}else if(p[loadpageid.val].b[loadcmpid.val].type==59)
8{
9 inputlenth.val=p[loadpageid.val].b[loadcmpid.val].val
10 if(inputlenth.val<0)
11 {
12 inputlenth.val*=-1
13 input.txt="-"
14 }else
15 {
16 input.txt=""
17 }
18 temp.val=1
19 for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
20 {
21 temp.val*=10
22 }
23 temp2.val=inputlenth.val/temp.val//得到整数位
24 cov temp2.val,tempstr.txt,0
25 input.txt+=tempstr.txt+"."
26 temp2.val=temp2.val*temp.val-inputlenth.val//得到小数位
27 if(temp2.val<0)
28 {
29 temp2.val*=-1
30 }
31 covx temp2.val,tempstr.txt,p[loadpageid.val].b[loadcmpid.val].vvs1,0
32 input.txt+=tempstr.txt
33 inputlenth.val=24
34}else
35{
36 input.txt=p[loadpageid.val].b[loadcmpid.val].txt
37 inputlenth.val=p[loadpageid.val].b[loadcmpid.val].txt_maxl
38 if(p[loadpageid.val].b[loadcmpid.val].type==116)
39 {
40 show.pw=p[loadpageid.val].b[loadcmpid.val].pw
41 }
42}
43show.txt=input.txt
可以看到获取到原始控件的值分为3个步骤
通过p[loadpageid.val].b[loadcmpid.val].type判断原始控件的类型是数字控件、虚拟浮点数或者其他,loadpageid.val和loadcmpid.val是如何传进来可以参考 其他跳转到键盘页面的方法
根据不同的控件类型,将数据赋值到input.txt中
将input.txt赋值给show.txt
输入完成后如何赋值给原始控件
下面的代码为键盘页面的OK按键的弹起事件
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
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}
47page loadpageid.val
可以看到输入完成后赋值给原始控件分为3个步骤
通过p[loadpageid.val].b[loadcmpid.val].type判断触发控件的类型是数字控件、虚拟浮点数或者其他,loadpageid.val和loadcmpid.val是如何传进来可以参考 其他跳转到键盘页面的方法
根据不同的控件类型,将input.txt赋值给原始控件
返回 loadpageid.val所记录的页面id