嵌入式学习小组
直播中

张秀梅

7年用户 195经验值
私信 关注

如何让edit的编辑框中高位为0的不显示?

EDIT_SetDecMode(WM_GetDialogItem(hWin,GUI_ID_EDIT0),200,0,999999999,0,0);
  EDIT_SetMaxLen(WM_GetDialogItem(hWin,GUI_ID_EDIT0),10);
  EDIT_SetValue(WM_GetDialogItem(hWin,GUI_ID_EDIT0),value);
最大长度是10,显示的时候就除了value的值外其他值是0,例如value=12345;显示的就是0000012345,怎样可以让这高位为0的不显示出来呢?

回帖(6)

俞舟群

2019-8-27 08:56:46
方法见下面的两个函数, 我就不多说了, 相信你能看懂的
/********************************************************************************************
函 数 名: 有符号整数转换为字符串函数,高位为0,则不显示
调    用: CX_printh(u8 *str, s32 Dat,u8 len)
参    数: *str  字符串转换后保存的首地址
          Dat:数值(+-0~4294967295);
          len:长度(即要显示的位数,最大只转换8位有效值)
返 回 值: 转换结果保存 字符串指针所指向的地址中
********************************************************************************************/
void CX_printh(u8 *str, s32 Dat,u8 len)
     {   
     u8 i,tem,at,af;
     at = 0; //清标志位
     af = 0; //清标志位
     if(len>10)len=10;
     if(Dat < 0){Dat =-Dat; *str = '-'; str++; af = 0xff;}//如果是负数,先转为正数,并装入符号位                                          
     for(i=0;i         {
        tem=(Dat/CX_pow(10,len-i-1))%10;//取得当前位数字
        if(tem == 0){if(at != 0){*str = 0x30; str ++;}}
        else{
            at = 0xff; //置标位位
            *str = tem + 0x30;
            str ++;
            }
        }
     if(at == 0 && af == 0xff)
       {
       str --;
       *str = '0';
       str ++;
       }
     else{
         if(at == 0 && af ==0){*str = '0'; str ++;}
         }
     *str = ''; //写入结束符号
     }
/********************************************************************************************
函数名:浮点数转化为字符串函数
调  用:CX_printf(*str, float Fdat,u8 Hc,u8 Fl);
参  数:*str 字符串转换后保存的首地址
        Fdat:数值(+-0.0005~999999.9999);         
        Hc:整数长度(即要显示的位数)
        Fl:小数长度(即要显示的位数)
返回值:转换结果保存 字符串指针所指向的地址中
********************************************************************************************/
void CX_printf(u8 *str, float Fdat,u8 Hc,u8 Fl)
     {  
     u32 const Pow[]={1,10,100,1000,10000,100000,10000000,100000000,1000000000};
     u32 Dat1, Dat2;
     u8 i,tem,at;
     if(Fdat < 0){Fdat = -Fdat;        *str ='-'; str ++; }
     if(Hc>8)Hc=8; //限制整数部份最多8个位
     if(Fl>4)Fl=4; //限制小数部份最多4个位的精度
     Dat1 = Fdat;  //取整数部份
     Dat2 = (Fdat-Dat1) * Pow[Fl];//取小数部份并将其转换为整数
     i = ((Fdat-Dat1)*Pow[Fl+1])- Dat2 *10; //四舍五入处理
     if(i>=5)
       {
       Dat2 += 1;
       if(Dat2 ==Pow[Fl]){Dat2 =0;Dat1 += 1;}
       }
     at = 0; //清标志位
     for(i=0;i         {
        tem = (Dat1/Pow[Hc-i-1])%10; //取得当前位数字
        if(tem == 0){if(at != 0){*str = 0x30; str ++;}}
        else{
            at = 0xff; //置标位位
            *str = tem + 0x30;
            str ++;
            }
        }
     if(at == 0){*str = 0x30; str ++;}  //如果整数部份为零则补零
     *str = '.'; //写入小数点
     str ++;
     for(i=0;i         {
        tem = (Dat2/Pow[Fl-i-1])%10; //取得当前位数字
        *str = tem + 0x30;
        str ++;
        }
     *str = '' ; //装入结束符号
     }
调用, 方法 定义一个数组,用内存管理申请的指针也行
  u8 Br[20];
u16 Dat = 12345; 这是要显示的数据(整数)
float  F = 123.123;
CX_printh(Br,Dat,5);   //先把数据转为指定的显示格式
LCD_word(10,24,(const char *)Br);//显示参数  
CX_printf(Br,F,3,3); //将浮点数转为字符串
LCD_word(10,24,(const char *)Br);//显示参数
这是在 19264 液晶屏中的显示调用, 你可以参考一下
举报

王艳红

2019-8-27 09:10:59
应该改不了,EDIT小工具没看到有设置显示模式的函数。或者你不要 开启EDIT的十进制模式,显示的时候将十进制数值转成字符串,然后在显示,这样高位为0的时候应该就不会显示了
举报

马健

2019-8-27 09:22:03
显示的话只能改成字符显示了
举报

崔琳

2019-8-27 09:27:27
大神,能不能把程序发一份参考下?
现在要输入用户的ID AGE HEIGHT WEIGHT信息并保存。
使用触摸屏软键盘输入。
初始想法是设置为十进制模式,但是不知道怎么输入了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分