广州大彩串口屏论坛_大彩开发者交流论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 509|回复: 3

系统键盘输入字符串写内存后,页面更新后原始字符串回写

[复制链接]

2

主题

4

帖子

30

积分

新手上路

Rank: 1

积分
30
发表于 2026-3-6 13:40:09 | 显示全部楼层 |阅读模式
本帖最后由 lvkejun 于 2026-3-6 13:42 编辑

--开发环境visualTFT+LUA
--下面代码中涉及控件ID3,为Text_Display,使用弹出系统键盘输入,字符串会被转为大写
--如果文本字符串被写进内存,就会发生:原始输入字符串,会被系统在画面更新完成后,重新回写控件的情况(即如果字符串有小写,恢复成小写)。
--以下是on_control_notify中的部分代码
dev_code  = string.upper( get_text(DEV_PAR_SCREEN,3) )        --转大写
dev_code  = dev_code  .. string.rep('0', math.max(0, 6 - #dev_code)) --不足6位,用'0'补足
set_text(DEV_PAR_SCREEN,3,dev_code)
for i = 1, 6
do
        eeprom_data[5 + i] = string.byte(dev_code:sub(i,i))
end
write_flash(0,eeprom_data)
flush_flash()
flush_nor()

--系统初始化时回写控件
--on_init中的部分代码
function on_init()
        eeprom_data = read_flash(0, 13)
        -- 获取设备编码        
        for i = 6,11
        do
                dev_code = dev_code..string.char(eeprom_data)
        end
        set_text(DEV_PAR_SCREEN,3,dev_code )
end

--现在问题:画面完成后,控件文本会被系统回写成输入时的小写状态字符串,怎么解决?
回复

使用道具 举报

0

主题

988

帖子

2924

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2924
发表于 2026-3-6 17:59:48 | 显示全部楼层
直接用字符串的方式存储write_flash_string(addr,str)内容,抓取调试信息排查下初始化读取read_flash_string(addr)的内容print出来看是不是正确的
回复

使用道具 举报

2

主题

4

帖子

30

积分

新手上路

Rank: 1

积分
30
 楼主| 发表于 2026-3-6 21:56:21 | 显示全部楼层
dctechnology 发表于 2026-3-6 17:59
直接用字符串的方式存储write_flash_string(addr,str)内容,抓取调试信息排查下初始化读取read_flash_strin ...

感谢回复,晚点试一下。
回复

使用道具 举报

2

主题

4

帖子

30

积分

新手上路

Rank: 1

积分
30
 楼主| 发表于 2026-3-7 11:03:22 | 显示全部楼层
dctechnology 发表于 2026-3-6 17:59
直接用字符串的方式存储write_flash_string(addr,str)内容,抓取调试信息排查下初始化读取read_flash_strin ...

--开发环境visualTFT+LUA
--我把问题重新理一下,你看问题出在哪里:
--1.在页面DEV_PAR_SCREEN,的控件ID = 3 的Text_Display,用系统弹出的键盘输入:'abcdef',注意是小写
--2.
str = get_text(DEV_PAR_SCREEN,3)
--3.
str = string.upper(str)        --str = 'ABCDEF'
--4. 写内存,正常
write_flash_string(1,str) -- 'ABCDEF'
--5.读内存,正常
str = DEVread_flash_string(1) --'ABCDEF'
--6.更新控件
set_text(DEV_PAR_SCREEN,3,str)
--7.显示页面,不正常:
--正常情况下,显示应该是'ABCDEF'
--但实际是,在显示完'ABCDEF'后,会被系统改回为'abcdef'
--实际运行应该是:软键盘在用户点击确认后,软件系统将文本写入内存(不是用户lua行为)
--注意:不是所有的用户输入都会写入内存,而是系统检测到输入的文本在lua中后续代码中要写入内存的时候才发生将原始文本写入内存
--如果用户输入字符串不写入内存,系统也不会把原始字符串写入内存
--如何,让系统不将原始输入字符串回写控件?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|广州大彩串口屏论坛_大彩开发者交流论坛

GMT+8, 2026-5-12 20:33 , Processed in 0.032154 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表