硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4034|回复: 16
收起左侧

[emWin] 多行文本控件可以实现滚动显示吗?

[复制链接]

23

主题

78

回帖

147

积分

初级会员

积分
147
发表于 2019-8-27 19:47:08 | 显示全部楼层 |阅读模式
硬汉哥,请教一下,现在想实现实时信息刷新,假如多行文本控件显示五行信息,当出现第六个信息时文本向上滚动,第六行信息显示在原来第五行的位置!

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2019-8-27 19:53:27 | 显示全部楼层
可以,我记得有个add函数,每次添加完毕一行记得加上\n换行
回复

使用道具 举报

23

主题

78

回帖

147

积分

初级会员

积分
147
 楼主| 发表于 2019-8-27 19:58:14 | 显示全部楼层
eric2013 发表于 2019-8-27 19:53
可以,我记得有个add函数,每次添加完毕一行记得加上\n换行

多行文本控件初始化时需要设置成插入模式还是覆盖模式?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2019-8-27 20:18:11 | 显示全部楼层
不用覆盖
回复

使用道具 举报

23

主题

78

回帖

147

积分

初级会员

积分
147
 楼主| 发表于 2019-8-27 20:54:44 | 显示全部楼层

好的,我明天试试
回复

使用道具 举报

23

主题

78

回帖

147

积分

初级会员

积分
147
 楼主| 发表于 2019-8-28 16:02:22 | 显示全部楼层

硬汉哥你好,昨天问你了关于多行文本控件,今天试了一下有点问题。
文本控件初始化为最大缓冲字节数大小为2000 代码如下MULTIEDIT_SetBufferSize(hItem, 2000);
我一直用MULTIEDIT_AddText函数添加文本信息,然后通过MULTIEDIT_GetTextSize(hItem);读取当前缓冲区大小,不断刷新数据,最后读取到的当前缓冲区大小会超过初始化时设置的最大缓冲大小,如果保持一直刷新数据的话,程序会后因为显存不够死机吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2019-8-28 16:04:10 | 显示全部楼层
手牵手看夕阳 发表于 2019-8-28 16:02
硬汉哥你好,昨天问你了关于多行文本控件,今天试了一下有点问题。
文本控件初始化为最大缓冲字节数大小 ...

获取动态内存大试试
回复

使用道具 举报

23

主题

78

回帖

147

积分

初级会员

积分
147
 楼主| 发表于 2019-8-28 16:27:45 | 显示全部楼层
eric2013 发表于 2019-8-28 16:04
获取动态内存大试试

没有明白您什么意思?
多行文本控件中以前显示过的数据可以删掉吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2019-8-28 17:04:55 | 显示全部楼层
手牵手看夕阳 发表于 2019-8-28 16:27
没有明白您什么意思?
多行文本控件中以前显示过的数据可以删掉吗?

获取emWin动态内存剩余大,看看是不是在减少。

这个控件不支持
回复

使用道具 举报

23

主题

78

回帖

147

积分

初级会员

积分
147
 楼主| 发表于 2019-8-28 17:35:25 | 显示全部楼层
eric2013 发表于 2019-8-28 17:04
获取emWin动态内存剩余大,看看是不是在减少。

这个控件不支持

不好意思,再弱弱的问一下,怎么获取动态内存?
回复

使用道具 举报

23

主题

78

回帖

147

积分

初级会员

积分
147
 楼主| 发表于 2019-8-28 19:07:14 | 显示全部楼层
eric2013 发表于 2019-8-28 17:04
获取emWin动态内存剩余大,看看是不是在减少。

这个控件不支持

我记得有个函数可以查询动态内存,忘记是哪个了?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2019-8-29 00:47:47 | 显示全部楼层
手牵手看夕阳 发表于 2019-8-28 19:07
我记得有个函数可以查询动态内存,忘记是哪个了?

GUI_ALLOC_GetNumFreeBytes()
GUI_ALLOC_GetNumUsedBytes()
回复

使用道具 举报

9

主题

161

回帖

188

积分

初级会员

积分
188
发表于 2019-8-29 08:31:03 | 显示全部楼层
MARK一下,楼主解决了记得分享一下,谢谢。之前也想实现这个功能,但是一直没弄好
回复

使用道具 举报

23

主题

78

回帖

147

积分

初级会员

积分
147
 楼主| 发表于 2019-8-30 15:19:19 | 显示全部楼层
eric2013 发表于 2019-8-29 00:47
GUI_ALLOC_GetNumFreeBytes()
GUI_ALLOC_GetNumUsedBytes()

多行文本控件初始化设置缓冲区大小后,程序运行过程中不断的通过MULTIEDIT_AddText函数添加文本信息,当初始化设置的缓冲区用完后,会使用emwin动态内存。
我是这样做的,先按照控件大小计算写满整个控件页面需要多少字节缓冲(有API函数直接调用),然后初始化时设置多行文本控件缓冲区为10个页面缓冲大小。
程序运行时添加文本信息,先判断当前控件已使用缓冲,是否接近初始化缓冲区大小。如果初始化缓冲区即将用完通过MULTIEDIT_SetText函数重新设置文本(该函数设置文本时,会把以前文本记录删掉),否则就用MULTIEDIT_AddText函数添加文本信息。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2019-8-31 01:23:59 | 显示全部楼层
手牵手看夕阳 发表于 2019-8-30 15:19
多行文本控件初始化设置缓冲区大小后,程序运行过程中不断的通过MULTIEDIT_AddText函数添加文本信息,当 ...

可以,其实你用listview,发现很方便
回复

使用道具 举报

23

主题

78

回帖

147

积分

初级会员

积分
147
 楼主| 发表于 2019-9-1 14:17:48 | 显示全部楼层
eric2013 发表于 2019-8-31 01:23
可以,其实你用listview,发现很方便

当初没有想到Listview,以后可以试试
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2019-9-2 01:45:21 | 显示全部楼层
手牵手看夕阳 发表于 2019-9-1 14:17
当初没有想到Listview,以后可以试试

这个有例子,此贴的CAN界面就是:

http://www.armbbs.cn/forum.php?m ... 7330&extra=page%3D1

回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-9 15:15 , Processed in 0.391866 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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