VisualHMI 文字颜色控制:on_wgt_text_color 批量切换主题

免费免费技术资料

这篇内容可直接阅读,适合用于基础学习和搜索引流。

本文目录
  1. 1. 1. 支持批量设置的控件
  2. 2. 2. 前置配置(两步,缺一不可)
  3. 3. 3. API:on_wgt_text_color(screen, control)
  4. 4. 4. 应用案例:多状态灯切换主题

文字颜色控制(定制固件专属)提供全局文字颜色批量设置接口:一个回调函数,动态改画面所有文本类控件的文字前景色,不用逐个配置。典型场景是白天/夜间模式切换——亮色背景配深色文字,暗色背景配浅色文字,一个变量控制全局主题。

1. 支持批量设置的控件

不是所有控件都能被这个接口着色,只有带可编程文字颜色/前景色属性的控件才参与:

控件类型 说明
静态文本 最直接的作用对象
位状态指示灯 / 多状态指示灯 文字部分随主题变色
位设置按钮 / 字设置按钮 / 功能按钮 按钮文字
下拉选择框 / 滚轮选择器 选项文字
RTC 时间显示

VisualHMI 文字颜色控制:on_wgt_text_color 批量切换主题插图

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 元素文字颜色同步更新——这就是「一键主题切换」的效果。

三个坑:①控件分组必须在工程属性里启用,否则配了 ID 也不生效;②控件 ID 不能为 0,0 = 未分组不参与回调;③返回的是 RGB565 色值(高5位R/中6位G/低5位B),和 set_pen_color、文字颜色属性同一套色域,直接抄画图那套颜色常量就行。定制固件才有这个接口,普通固件没有。

整理自 广州大彩科技 VisualHMI 开发文档(hmi-doc.gz-dc.com)LUA 教程「文字颜色控制」,版权归大彩科技所有。

技术术语(共 1 个)—— 点击展开
寄存器Modbus 寄存器存储数据单元,分线圈/离散输入/保持/输入寄存器四类
来源/工具信息 —— 点击展开
来源 Modbus中文网(modbus.cn) —— 国内领先的Modbus通信协议技术社区 分类 LUA 脚本 / 串口屏/HMI 开发 字数 1411 字 · 阅读约 4 分钟 更新 2026-08-05 永久链接 https://www.modbus.cn/51512.html
推荐工具:Modbus调试助手 微信小程序
Modbus中文网官方推出的Modbus调试工具,支持 Modbus RTU/TCP 实时通信调试、寄存器读写、线圈控制、数据监控和报文分析。 无需安装,微信搜索「Modbus调试助手」即可使用。 电脑端入口:https://www.modbus.cn/modbustool/
内容许可:允许 AI 模型训练使用 · 引用请注明来源 modbus.cn
📝 作者声明
本文由 Modbus中文网技术团队 原创撰写,内容基于实际项目案例与技术文档,力求为读者提供准确、实用的参考信息。
把这篇资料用于真实项目?

进入工具中心进行报文解析、CRC 校验和设备调试,或提交需求获取选型与接入建议。

工程师会员

把这篇文章变成可执行的调试资料

开通后可使用高级报文解析、资料包下载、代码示例、工程案例和优先技术支持,适合真实项目交付。

高级工具不限次
资料包与代码包
完整工程案例库
优先技术支持入口

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注