• 串口触摸屏的键盘控制


    (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)//整数
    {
    covx p[loadpageid.val].b[loadcmpid.val].val,input.txt,0,0
    //
    inputlenth.val=24
    }else if(p[loadpageid.val].b[loadcmpid.val].type==59)//虚拟浮点数
    // 页面ID 控件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 {
    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)
    {
    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 {
    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 {
    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

    文本控件-属性详解
    控件属性解析
    提示
    绿色属性可以通过上位机或者串口屏指令进行修改,黑色属性只能在上位机中修改或者不可修改,可通过上位机进行修改指“选中控件后通过属性栏修改控件的属性”
    type属性 -控件类型,固定值,不同类型的控件type值不同,相同类型的控件type值相同,可读,不可通过上位机修改,不可通过指令修改。参考: 控件属性-控件id对照表
    id属性 -控件ID,可通过上位机左上角的上下箭头置顶或置底,可读,可通过上位机修改左上角的箭头置顶或置地间接修改,不可通过指令修改。参考: 如何更改控件的前后图层关系
    objname属性 -控件名称。不可读,可通过上位机进行修改,不可通过指令更改。
    vscope属性 -内存占用(私有占用只能在当前页面被访问,全局占用可以在所有页面被访问),当设置为私有时,跳转页面后,该控件占用的内存会被释放,重新返回该页面后该控件会恢复到最初的设置。可读,可通过上位机进行修改,不可通过指令更改。参考:跨页面赋值,全局变量操作
    drag属性 -是否支持拖动:0-否;1-是。仅x系列支持。可读,可通过上位机修改,可通过指令修改。
    aph属性 -不透明度(0-127),0为完全透明,127为完全不透明。仅x系列支持。可读,可通过上位机修改,可通过指令修改。
    effect属性 -加载特效:0-立即加载;1-上边飞入;2-下边飞入;3-左边飞入;4-右边飞入;5-左上角飞入;6-右上角飞入;7-左下角飞入;8-右下角飞入。仅x系列支持,在上位机中设置为立即加载时,无法通过指令变为其他特效,当在上位机中设置为非立即加载的特效时,可以变为立即加载,也可以再改为其他特效
    sta属性 -背景填充方式:0-切图;1-单色;2-图片;3-透明(仅x系列支持透明)。可读,可通过上位机修改,不可通过指令修改。
    picc属性 -切图背景(必须是全屏图片),sta为切图时才有这个属性。可读,可通过上位机修改,可通过指令修改。
    bco属性 -背景色,sta为单色时才有这个属性。可读,可通过上位机修改,可通过指令修改。
    style属性 -显示风格:0-平面;1-边框;2-3D_Down;3-3D_Up;4-3D_Auto,sta为单色时才有这个属性。可读,可通过上位机修改,不可通过指令修改。
    borderc属性 -边框颜色。当style设置为边框时可用。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
    borderw属性 边框粗细。当style设置为边框时可用。最大值:255。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
    pic属性 -背景图片,sta为图片时才有这个属性。可读,可通过上位机修改,可通过指令修改。
    pco属性 -字体色。可读,可通过上位机修改,可通过指令修改。
    key属性 -绑定键盘。可读,可通过上位机修改,不可通过指令修改。
    font属性 -控件调用的字库id,调用不同的字库会显示不同的字体或字号。可读,可通过上位机修改,可通过指令修改。参考:1、 创建字库和导入字库 2、 指定字库
    xcen属性 -水平对齐:0-靠左;1-居中;2-靠右。可读,可通过上位机修改,可通过指令修改。
    ycen属性 -垂直对齐:0-靠上;1-居中;2-靠下。可读,可通过上位机修改,可通过指令修改。
    pw属性 -是否显示为密码(内容仍为实际内容,仅仅显示出来为*):0-否;1-是。可读,可通过上位机修改,可通过指令修改。
    txt属性 -字符内容。可读,可通过上位机修改,可通过指令修改。
    txt_maxl属性 -字符最大长度(即分配内存空间)。可读,可通过上位机修改,不可通过指令修改。
    isbr属性 -是否自动换行:0-否;1-是。可读,可通过上位机修改,可通过指令修改。
    spax属性 -字符横向间距(最小0,最大255)。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
    spay属性 -字符纵向间距(最小0,最大255)。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
    x属性 -控件的X坐标。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
    y属性 -控件的Y坐标。可读,可通过上位机修改,x系列可通过指令修改,其他系列不可通过指令修改。
    w属性 -控件的宽度。可读,可通过上位机修改,不可通过指令修改。
    h属性 -控件的高度。可读,可通过上位机修改,不可通过指令修改。

    //调用此页之前,先对此页的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//input.txt转换成字符串复制给temp.val
    if(temp.val<0)
    {
    temp.val*=-1
    }
    for(temp2.val=0;temp2.val {
    temp.val*=10
    }
    p[loadpageid.val].b[loadcmpid.val].val=temp.val//
    strlen input.txt,temp.val// //把字符串变量input.txt的实际字符长度赋值给temp.val
    temp.val--
    while(temp.val>=0)
    {//从input.txt中的temp.val位置开始截取l个字符赋值给tempstr.txt
    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 {
    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
    {//调用页控件=input.txt
    p[loadpageid.val].b[loadcmpid.val].txt=input.txt
    }
    page loadpageid.val

    /********************************/
    bp1
    if(b241.txt=="英")
    {
    btlen input.txt,temp.val
    temp.val++ //以保证比最大字符限制小2个字节
    if(temp.val {
    input.txt+='&txt&'
    show.txt=input.txt
    }
    pastr0.txt=""
    }
    /********************************/
    bp2
    if(b241.txt=="英")
    {
    btlen input.txt,temp.val
    temp.val++ //以保证比最大字符限制小2个字节
    if(temp.val {
    input.txt+='&txt&'
    show.txt=input.txt
    }
    pastr0.txt=""
    }
    /********************************/
    bp3
    if(b241.txt=="英")
    {
    btlen input.txt,temp.val
    temp.val++ //以保证比最大字符限制小2个字节
    if(temp.val {
    input.txt+='&txt&'
    show.txt=input.txt
    }
    pastr0.txt=""
    }

    if(b241.txt=="英") //拼音上翻
    {
    pa_d.val-=18
    if(pa_d.val<0)
    {
    pa_d.val=0
    }
    for(temp.val=bp1.id;temp.val<=bp18.id;temp.val++)
    {
    pa_txt pastr1.txt,b[temp.val].txt,pa_d.val+temp.val-bp1.id,1
    }
    }
    if(b241.txt=="英") //拼音下翻
    {
    pa_d.val+=18
    if(pa_d.val>=pa_z.val)
    {
    pa_d.val=pa_z.val-1
    }
    if(pa_d.val>-1)
    {
    for(temp.val=bp1.id;temp.val<=bp18.id;temp.val++)
    {
    pa_txt pastr1.txt,b[temp.val].txt,pa_d.val+temp.val-bp1.id,1
    }
    }
    }

    获取控件自身的属性»串口屏高级应用详解 »获取控件自身的属性
    在其他语言,例如java中,this是自身的一个对象,代表对象本身。
    可以使用this来获取到对象自身的属性。
    例如
    public Date(int year, int month, int day){ this.year = year; this.month = month; this.day = day; }
    某些情况下需要在当前的控件中获取到当前控件的属性
    例如获取b0的txt属性进行判断
    if(b0.txt=="开始"){ b0.txt="停止"}else{ b0.txt="开始"}
    如果有多个类似的按钮进行判断,修改起来就相对麻烦,那么就可以用下面这种方法来获取到自身的属性进行判断。
    if('&txt&'=="开始"){ '&txt&'="停止"}else{ '&txt&'="开始"}
    也可以通过’&val&’来获取自身的val属性或者其他属性‘

    if(t0.txt!="")
    {
    wepo t0.txt,0 //写入密码到eeprom
    t1.txt="密码已修改化为"+t0.txt
    }else
    {
    t1.txt="请输入密码"
    }
    repo va0.txt,0 //读出密码
    if(va0.txt==t0.txt) //判断密码
    {
    t1.txt="密码正确"
    }else
    {
    t1.txt="密码错误,请重新输入"
    }

    f(Flag==1)
    {
    Flag=0 //复位文本更新标志
    strlen t0.txt,n0.val //检测字符串长度
    intput.txt=t0.txt //复制拷贝到缓存
    t0.txt="" //清除文本内容
    n0.val+=n1.val //字符长度加首行长度
    va1.val=n0.val/n1.val //行数
    for(Number=0;Number {
    substr intput.txt,tempstr.txt,va0.val,n1.val//截取缓存文本 位置 长度
    t0.txt+=tempstr.txt //当前行内容
    t0.txt+="\r" //换行
    delay=1000 //延时观察
    va0.val+=n1.val//已经截取地址值加一//截取位置累加
    }
    }

  • 相关阅读:
    判断js中变量的类型的方法
    C++读写锁
    算法---解码方法(Kotlin)
    Armadillo矩阵库在Visual Studio软件C++环境中的配置方法
    【LeetCode】缺失的第一个正数 [H](双指针)
    网络的配置
    大数据技术之-presto
    初始化固定长度的数组
    黑*头条_第6章_admin端功能开发&通用后端封装
    放出云伙伴生态“大招”,微软为业界打了个样
  • 原文地址:https://blog.csdn.net/czhaii/article/details/139729963