- 1. 1. 支持批量设置的控件
- 2. 2. 前置配置(两步,缺一不可)
- 3. 3. API:on_wgt_text_color(screen, control)
- 4. 4. 应用案例:多状态灯切换主题
文字颜色控制(定制固件专属)提供全局文字颜色批量设置接口:一个回调函数,动态改画面所有文本类控件的文字前景色,不用逐个配置。典型场景是白天/夜间模式切换——亮色背景配深色文字,暗色背景配浅色文字,一个变量控制全局主题。
1. 支持批量设置的控件
不是所有控件都能被这个接口着色,只有带可编程文字颜色/前景色属性的控件才参与:
| 控件类型 | 说明 |
|---|---|
| 静态文本 | 最直接的作用对象 |
| 位状态指示灯 / 多状态指示灯 | 文字部分随主题变色 |
| 位设置按钮 / 字设置按钮 / 功能按钮 | 按钮文字 |
| 下拉选择框 / 滚轮选择器 | 选项文字 |
| RTC | 时间显示 |

2. 前置配置(两步,缺一不可)
第一步:全局启用控件分组功能。路径:工程属性 → 控件分组 → 启用。不启用的话,运行时所有控件都忽略分组相关属性——就算你配了分组 ID 也没用。
第二步:给控件分配有效分组标识。对要纳入颜色管理的每个控件,在控件属性面板里设置控件 ID,必须 ≠ 0(0 是默认无效值,表示「未分组」)。on_wgt_text_color 回调里就是靠这个 ID 区分控件。
3. API:on_wgt_text_color(screen, control)
控件文字颜色动态回调。系统在刷新控件时调用它,取返回值作为该控件的文字颜色。
| 参数 | 类型 | 说明 |
|---|---|---|
| screen | number | 当前画面 ID,用于区分多页面中的同名控件 |
| control | number | 目标控件 ID。仅当 control ≠ 0 时触发回调 |
返回值:color(number),RGB565 格式的 16 位颜色值。整个颜色主题逻辑都在这一个函数里。
4. 应用案例:多状态灯切换主题
画面布局:一个多状态指示灯做颜色切换开关(状态 0~4 对应 5 种主题色),画面 ID 设为 0;下面放一批支持文字着色的控件(文本、按钮、指示灯、下拉框、滚轮、RTC),统一设置控件 ID 为 5。
Lua 在回调里读寄存器 LW3000 的值作为颜色索引,返回对应 RGB565 色值:
function on_wgt_text_color(screen, control)
local color = 0x001f -- 默认蓝色
if screen == 0 then
if control == 5 then
local val = get_uint16(VT_LW, 0x3000) -- 颜色索引
if val == 0 then
color = 0x00FF -- 蓝
elseif val == 1 then
color = 0x0562 -- 绿
elseif val == 2 then
color = 0x0429 -- 深绿
elseif val == 3 then
color = 0x0177 -- 青
elseif val == 4 then
color = 0xF800 -- 红
end
end
end
print(string.format("on_wgt_text_color(%d,%d,%04X)", screen, control, color))
return color
end
运行虚拟屏,点颜色切换控件,所有控件 ID 为 5 的 UI 元素文字颜色同步更新——这就是「一键主题切换」的效果。
整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)LUA 教程「文字颜色控制」,版权归大彩科技所有。
发表回复