gui guider 输入框可否增加功能实现富文本输入,实现语法高亮?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

gui guider 输入框可否增加功能实现富文本输入,实现语法高亮?

Jump to solution
1,622 Views
lzzz
Contributor II

目前的文本框textarea底层实现是把text看成是一个完整的label,对其修改颜色的话是整体适用,并不能满足一些实际场景,比如嵌入到一些工控机的上位机中,整个编辑文本只有一种颜色的话,不能界面友好,至于span的话虽然是多label,但是不满足文本在线实时编辑,交互的功能,是否正在研发或者有这个计划呢,或者有内测版本可实现此功能。

0 Kudos
Reply
1 Solution
1,332 Views
lzzz
Contributor II

lzzz_0-1723165811893.png

在lv_draw_label.c 里面有个

void LV_ATTRIBUTE_FAST_MEM lv_draw_label,里面是实际上对输入字符的颜色处理,它是逐行逐字符处理的,有个变量bidi_txt存储的是一行的txt,可以在进入while循环对每个字符之前,再写一个while,对每个字符赋予标志位,可以理解为状态机的意思,当对每个字符描绘的时候就可以根据规则实现语法高亮了,我是单独写了一个lv_draw_text.c的文件,区别本身的label,仅针对textarea,实现富文本功能,后续会更新更多功能实现,目前实现了关键字,注释,错误代码高亮等功能。

View solution in original post

0 Kudos
Reply
5 Replies
1,588 Views
Alphabert_Liu
NXP Employee
NXP Employee

Dear @lzzz ,

textarea的文本颜色无法在Gui Guider上直接更改,可以通过将其代码导出至MCUXpresso中进行修改,实现字体颜色的改变。具体步骤如下:

1、创建你需要的GUI界面,勾选显示键盘并生成代码,点击上方标题文件夹,找到工程生成的路径,使用MCUXpresso导入Gui Guider的工程,路径为sdk\mcuxprsso

屏幕截图 2024-07-16 100648.png

2、在setup_scr_screen.c中找到控制textarea中文本颜色的命令并修改其颜色

屏幕截图 2024-07-16 100048.png

3、修改完编译并下载到开发板中,即可改变文本框中文本字体颜色

IMG_20240716_095946.jpg

BTW,请问您使用的是哪一款产品

Best Regard

Liu

Tags (1)
0 Kudos
Reply
1,581 Views
lzzz
Contributor II
您可能没明白我的意思,我想实现的是同一个文本框里面实现文字多种颜色
0 Kudos
Reply
1,575 Views
Alphabert_Liu
NXP Employee
NXP Employee

Dear @lzzz ,

我明白您的意思了,对于许多简单的对象,如标签(lv_label)和文本区域(lv_textarea),它们通常只有一个主要部分,即 LV_PART_MAIN,这个部分代表了对象的整体,LVGL本身并不直接支持这种基于文本位置的样式变化,但可以将整个文本框的文字进行变化。我在旁边加了一个下拉栏,通过事件控制可以支持整个文本框内所有文字颜色的改变。 

IMG_20240716_141504.jpg

由于LVGL的lv_textarea控件不直接支持这种细粒度的文本样式更改,暂时无法对某一部分文本的颜色进行更改。而LVGL本身不直接支持富文本。您可以尝试使用两个文本框来进行文本颜色的控制。

Best Regard

Liu

0 Kudos
Reply
1,570 Views
lzzz
Contributor II

lzzz_0-1721114500492.png在lv_draw_label里面可以实现修改,它是一个个字母渲染的,每次都会赋值颜色,可以在这边做文章

 

0 Kudos
Reply
1,333 Views
lzzz
Contributor II

lzzz_0-1723165811893.png

在lv_draw_label.c 里面有个

void LV_ATTRIBUTE_FAST_MEM lv_draw_label,里面是实际上对输入字符的颜色处理,它是逐行逐字符处理的,有个变量bidi_txt存储的是一行的txt,可以在进入while循环对每个字符之前,再写一个while,对每个字符赋予标志位,可以理解为状态机的意思,当对每个字符描绘的时候就可以根据规则实现语法高亮了,我是单独写了一个lv_draw_text.c的文件,区别本身的label,仅针对textarea,实现富文本功能,后续会更新更多功能实现,目前实现了关键字,注释,错误代码高亮等功能。
0 Kudos
Reply