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

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

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

1. 支持批量设置的控件

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

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

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

2. 前置配置(两步,缺一不可)

第一步:全局启用控件分组功能。路径:工程属性 → 控件分组 → Enable。不启用的话,运行时所有控件都忽略分组相关属性——就算你配了分组 ID 也没用。

第二步:给控件分配有效分组标识。对要纳入颜色管理的每个控件,在控件属性面板里设置control ID,必须 ≠ 0(0 是默认无效值,表示「未分组」)。on_wgt_text_color 回调里就是靠这个 ID 区分控件。

3. API:on_wgt_text_color(screen, control)

控件文字颜色动态回调。系统在刷新控件时调用它,取返回值作为该控件的文字颜色。

parameterType说明
screennumber当前画面 ID,用于区分多页面中的同名控件
controlnumber目标控件 ID。仅当 control ≠ 0 时触发回调

返回值:color(number),RGB565 格式的 16 位颜色值。整个颜色主题逻辑都在这一个函数里。

4. 应用案例:多状态灯切换主题

画面布局:一个多状态指示灯做颜色切换开关(status 0~4 对应 5 种主题色),画面 ID 设为 0;下面放一批支持文字着色的控件(Text、button、指示灯、下拉框、滚轮、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 也不生效;②control ID 不能为 0,0 = 未分组不参与回调;③返回的是 RGB565 色值(高5位R/中6位G/低5位B),和 set_pen_color、文字颜色属性同一套色域,直接抄画图那套颜色常量就行。定制固件才有这个인터페이스,普通固件没有。

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

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.