一:键盘的实现原理
PW  是否显示为密码(内容仍为实际内容,仅仅显示出来为*):0-否;1-是。
 可读,可通过上位机修改,可通过指令修改。
 covx-变量类型转换?
 串口屏上仅有两种数据类型,即数值和字符串类型,当需要将字符串类型转换为数字类型或者将数字类型转换为字符串类型时,才使用covx指令
目前仅有txt、path、dir、filter这4个属性属性是字符串型属性,其他属性一般都是数值型属性。
covx att1,att2,lenth,format
att1:源变量
att2:目标变量
lenth:字符串的长度(0为自动长度,非0为固定长度)
format:申明数值类型(0-数字;1-货币;2-Hex)
//把滑块h0的val数值变量转换成10进制数字字符串并赋值给文本t0的txt变量,长度为自动
covx h0.val,t0.txt,0,0
(text 属性txt_maxl 800)
①变量loadpageid.val:调用页的页面ID。
②变量loadcmpid.val:调用页的控件ID。
③定时器tm0:让输入框有个光标不断闪烁,如果不需要,控件属性en=0即可。
④变量inputlenth:获取正在使用系统键盘控件字符最大长度。
⑤变量input:输入的数据。(属性txt_maxl改200)
⑥文本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
 下面的代码为键盘页面的前初始化事件
//调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,
 其他的逻辑本页会自动实现
//loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
if(p[loadpageid.val].b[loadcmpid.val].type==54)//整数  控件 n0
 //        页面ID p(age0)     控件ID(2)TYPE 54
 {
  covx p[loadpageid.val].b[loadcmpid.val].val,input.txt,0,0
 //源变量                                    目标变量  0为自动长度 0-数字
   inputlenth.val=24//
}else if(p[loadpageid.val].b[loadcmpid.val].type==59)//虚拟浮点数   控件 x0
 //        页面ID p(age0)     控件ID
 {
  inputlenth.val=p[loadpageid.val].b[loadcmpid.val].val//
 //              页面ID      控件ID
   if(inputlenth.val<0)
{
inputlenth.val*=-1//乘负数
input.txt="-" //负号
}else
{
input.txt="" //清除负号
}
temp.val=1
for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
{
temp.val*=10
}
temp2.val=inputlenth.val/temp.val//得到整数位
  cov temp2.val,tempstr.txt,0
   变量类型转换?
input.txt+=tempstr.txt+"."
temp2.val=temp2.val*temp.val-inputlenth.val//得到小数位
if(temp2.val<0)
{
temp2.val*=-1
}
  covx temp2.val,tempstr.txt,p[loadpageid.val].b[loadcmpid.val].vvs1,0
   变量类型转换?
   input.txt+=tempstr.txt
inputlenth.val=24
}else
{
input.txt=p[loadpageid.val].b[loadcmpid.val].txt
inputlenth.val=p[loadpageid.val].b[loadcmpid.val].txt_maxl
if(p[loadpageid.val].b[loadcmpid.val].type==116)//文本控件 设置PW属性是 密码格式
{
show.pw=p[loadpageid.val].b[loadcmpid.val].pw//是否显示为密码
}
}
show.txt=input.txt
下面的代码为键盘页面的OK按键的弹起事件
//调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,其他的逻辑本页会自动实现
//loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
if(p[loadpageid.val].b[loadcmpid.val].type==54)
{
covx input.txt,p[loadpageid.val].b[loadcmpid.val].val,0,0
}else if(p[loadpageid.val].b[loadcmpid.val].type==59)
{
covx input.txt,temp.val,0,0
if(temp.val<0)
{
temp.val*=-1
}
for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
{
temp.val*=10
}
p[loadpageid.val].b[loadcmpid.val].val=temp.val
strlen input.txt,temp.val
temp.val--
while(temp.val>=0)
{
substr input.txt,tempstr.txt,temp.val,1
if(tempstr.txt==".")
{
substr input.txt,tempstr.txt,temp.val+1,p[loadpageid.val].b[loadcmpid.val].vvs1
covx tempstr.txt,temp2.val,0,0
strlen tempstr.txt,temp.val
while(temp.val<p[loadpageid.val].b[loadcmpid.val].vvs1)
{
temp2.val*=10
temp.val++
}
p[loadpageid.val].b[loadcmpid.val].val+=temp2.val
temp.val=-1
}
temp.val--
}
substr input.txt,tempstr.txt,0,1
if(tempstr.txt=="-")
{
p[loadpageid.val].b[loadcmpid.val].val*=-1
}
}else
{
p[loadpageid.val].b[loadcmpid.val].txt=input.txt
}
page loadpageid.val
 可以看到输入完成后赋值给原始控件分为3个步骤
通过p[loadpageid.val].b[loadcmpid.val].type判断触发控件的类型是数字控件、虚拟浮点数或者其他,loadpageid.val和loadcmpid.val是如何传进来可以参考 其他跳转到键盘页面的方法
根据不同的控件类型,将input.txt赋值给原始控件
    返回 loadpageid.val所记录的页面id
 /****************************************************/
 /****************************************************/
 /****************************************************/
 /****************************************************/
 完成键
 //调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,其他的逻辑本页会自动实现
 //loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
 if(p[loadpageid.val].b[loadcmpid.val].type==54)
 {
   covx input.txt,p[loadpageid.val].b[loadcmpid.val].val,0,0//变量类型转换
 }else if(p[loadpageid.val].b[loadcmpid.val].type==59)
 {
   covx input.txt,temp.val,0,0
   if(temp.val<0)
   {
     temp.val*=-1
   }
   for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
   {
     temp.val*=10
   }
   p[loadpageid.val].b[loadcmpid.val].val=temp.val
   strlen input.txt,temp.val//字符串变量字符长度测试
   temp.val--
   while(temp.val>=0)
   {
     substr input.txt,tempstr.txt,temp.val,1//字符串截取
     if(tempstr.txt==".")
     {
       substr input.txt,tempstr.txt,temp.val+1,p[loadpageid.val].b[loadcmpid.val].vvs1//字符串截取
       covx tempstr.txt,temp2.val,0,0//
       strlen tempstr.txt,temp.val//字符串变量字符长度测试
       while(temp.val<p[loadpageid.val].b[loadcmpid.val].vvs1)
       {
         temp2.val*=10
         temp.val++
       }
       p[loadpageid.val].b[loadcmpid.val].val+=temp2.val
       temp.val=-1
     }
     temp.val--
   }
   substr input.txt,tempstr.txt,0,1//字符串截取
   if(tempstr.txt=="-")
   {
     p[loadpageid.val].b[loadcmpid.val].val*=-1
   }
 }else
 {
   Flag=1                                            //完成输入标志置一
   p[loadpageid.val].b[loadcmpid.val].txt=input.txt
 }
 page loadpageid.val
二:键盘解析
OK KEY
可以看到输入完成后赋值给原始控件分为3个步骤
    通过p[loadpageid.val].b[loadcmpid.val].type判断触发控件的类型是数字控件、
 虚拟浮点数或者其他,loadpageid.val和loadcmpid.val是如何传进来可以参考 其他跳转到键盘页面的方法
根据不同的控件类型,将input.txt赋值给原始控件
返回 loadpageid.val所记录的页面id
//调用此页之前,先对此页的loadpageid.val和loadcmpid.val赋值就可以了,其他的逻辑本页会自动实现
 //loadpageid.val表示调用页的页面ID,loadcmpid.val表示调用页的控件ID
 if(p[loadpageid.val].b[loadcmpid.val].type==54)//数字控件类型
 {
 covx input.txt,p[loadpageid.val].b[loadcmpid.val].val,0,0//input.txt转换成字符串复制给调用页控件
 }else if(p[loadpageid.val].b[loadcmpid.val].type==59)//浮点数控件
 {
 covx-变量类型转换?
 covx att1,att2,lenth,format att1:源变量 att2:目标变量lenth:字符串的长度(0为自动长度.非0为固定长度)
 format:申明数值类型(0-数字;1-货币;2-Hex)
 covx-示例1?
//把滑块h0的val数值变量转换成10进制数字字符串并赋值给文本t0的txt变量,长度为自动
 //covx h0.val,t0.txt,0,0
 covx input.txt,temp.val,0,0//把input.txt转换成字符串复制给temp.val
 if(temp.val<0)//
 {
 temp.val*=-1
 }
 for(temp2.val=0;temp2.val<p[loadpageid.val].b[loadcmpid.val].vvs1;temp2.val++)
 {
 temp.val*=10
 }
 p[loadpageid.val].b[loadcmpid.val].val=temp.val//temp临时
 strlen input.txt,temp.val//
 temp.val--
 while(temp.val>=0)
 {
 substr input.txt,tempstr.txt,temp.val,1
 if(tempstr.txt==".")
 {
 substr input.txt,tempstr.txt,temp.val+1,p[loadpageid.val].b[loadcmpid.val].vvs1
 covx tempstr.txt,temp2.val,0,0
 strlen tempstr.txt,temp.val
 while(temp.val<p[loadpageid.val].b[loadcmpid.val].vvs1)
 {
 temp2.val*=10
 temp.val++
 }
 p[loadpageid.val].b[loadcmpid.val].val+=temp2.val
 temp.val=-1
 }
 temp.val--
 }
 substr input.txt,tempstr.txt,0,1
 if(tempstr.txt=="-")
 {
 p[loadpageid.val].b[loadcmpid.val].val*=-1
 }
 }else
 {
 p[loadpageid.val].b[loadcmpid.val].txt=input.txt
 }
 page loadpageid.val
keybdB.loadpageid.val=dp
 keybdB.loadcmpid.val=n0.id
 page keybdB
OK键跳转之前
 print input.txt,0






![[书生·浦语大模型实战营]——在茴香豆 Web 版中创建自己领域的知识问答助手](https://img-blog.csdnimg.cn/direct/20f83b9661ae450c9737d1c320030803.png)








![[ue5]建模场景学习笔记(1)——混合材质](https://img-blog.csdnimg.cn/direct/235e39772cb74f8889b9d440495e1716.png)





