# tui_component **Repository Path**: tuisys/tui_component ## Basic Information - **Project Name**: tui_component - **Description**: 🏬TUI组件是通过基础控件实现复杂界面的功能模块 - **Primary Language**: C - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-04-06 - **Last Updated**: 2024-12-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: tui例子教程 ## README

TUI组件的实现和使用

## 组件描述 TUI组件是通过基础控件实现复杂界面功能模块,用户也可以自定义组件模块(参考template.c),或者根据自己需求修改系统提供的组件。组件里面的json解析函数,是方便将来UIStudio工具对组件的扩展。用户在使用的时候需要包含头文件`tui_component.h`和`tjson.h`,然后将文件夹📁component里面的`.C`文件参加编译,最后结合`TUISYS/tui_project`仓库里面的tui库文件,在tui内核初始化完成后调用。 ## 日历(calendar.c) 只需要设置日历组件的坐标位置和宽高,其中calendar.c里面有中国农历的计算公式,目前没有使用,方便后面扩展。测试代码如下: ``` c void tui_com_calendar_test(void) { tui_obj_t * obj; tui_com_calendar_attri_t attri = { 0 };//注意先清空结构体,避免随机值 obj = tui_com_calendar_create(tui_layer_top()); /* 通用属性 */ attri.obj.pt.x = 200; attri.obj.pt.y = 100; attri.obj.size.width = 600; attri.obj.size.height = 400; tui_com_calendar_set_attri(obj, &attri); } ``` 实际效果如图:

## 时钟(clock.c) 设置时钟组件的坐标位置和宽高,将`.png`图片资源通过UIStudio工具导入打包,重点设置图片对应的路径和旋转图片的旋转坐标,测试代码如下: ``` c void tui_com_clock_test(void) { tui_obj_t * obj; tui_com_clock_attri_t attri = { 0 };//注意先清空结构体,避免随机值 obj = tui_com_clock_create(tui_layer_top()); /* 通用属性 */ attri.obj.pt.x = 1024-382; attri.obj.pt.y = 60; attri.obj.size.width = 382; attri.obj.size.height = 382; attri.bg_img_path = "V:\\image\\clock_bg.png"; attri.bg_img_pt.x = 0; attri.bg_img_pt.y = 0; attri.point_h_img_path = "V:\\image\\point_h.png"; attri.point_h_img_pt.x = 186; attri.point_h_img_pt.y = 108; attri.point_h_img_rotate_pt.x = 6; attri.point_h_img_rotate_pt.y = 78; attri.point_m_img_path = "V:\\image\\point_m.png"; attri.point_m_img_pt.x = 185; attri.point_m_img_pt.y = 66; attri.point_m_img_rotate_pt.x = 7; attri.point_m_img_rotate_pt.y = 120; attri.point_s_img_path = "V:\\image\\point_s.png"; attri.point_s_img_pt.x = 185; attri.point_s_img_pt.y = 71; attri.point_s_img_rotate_pt.x = 7; attri.point_s_img_rotate_pt.y = 115; tui_com_clock_set_attri(obj, &attri); } ``` 效果如图:

## 仪表盘(dial.c) 设置仪表盘组件的坐标位置和宽高,将`.png`图片资源通过UIStudio工具导入打包,重点设置图片对应的路径和旋转图片的旋转坐标,测试代码如下: ``` c void tui_com_dial_test(void) { tui_obj_t * obj; tui_com_dial_attri_t attri = { 0 };//注意先清空结构体,避免随机值 obj = tui_com_dial_create(tui_layer_top()); /* 通用属性 */ attri.obj.pt.x = 412; attri.obj.pt.y = 200; attri.obj.size.width = 382; attri.obj.size.height = 382; attri.bg_img_path = "V:\\image\\dial_bg.png"; attri.bg_img_pt.x = 0; attri.bg_img_pt.y = 0; attri.point_img_path = "V:\\image\\dial_point.png"; attri.point_img_pt.x = 186; attri.point_img_pt.y = 50; attri.point_img_rotate_pt.x = 5; attri.point_img_rotate_pt.y = 165; strcpy(attri.txt, "0"); attri.txt_pt.x = 150; attri.txt_pt.y = 180; attri.txt_fnt_size = 60; attri.txt_fnt_color = 0xFFFFFFFF; tui_com_dial_set_attri(obj, &attri); tui_com_dial_set_point_angle(obj, 100); } ``` 效果如图:

## 折线表(chart.c) 设置折线表组件的坐标位置和宽高,设置折线的点个数,通过`tui_com_chart_set_point()`函数设置对应索引点的位置,表的底部值是`0`,测试代码如下: ``` c void tui_com_chart_test(void) { tui_obj_t * obj; tui_com_chart_attri_t attri = { 0 };//注意先清空结构体,避免随机值 obj = tui_com_chart_create(tui_layer_top()); /* 通用属性 */ attri.obj.pt.x = 5; attri.obj.pt.y = 65; attri.obj.size.width = 595; attri.obj.size.height = 295; attri.point_num = 10; tui_com_chart_set_attri(obj, &attri); tui_com_chart_set_point(obj, 0, 50); tui_com_chart_set_point(obj, 1, 150); tui_com_chart_set_point(obj, 2, 20); tui_com_chart_set_point(obj, 3, 0); tui_com_chart_set_point(obj, 4, 200); tui_com_chart_set_point(obj, 5, 150); tui_com_chart_set_point(obj, 6, 80); tui_com_chart_set_point(obj, 7, 10); tui_com_chart_set_point(obj, 8, 60); tui_com_chart_set_point(obj, 9, 250); } ``` 效果如图:

## 翻页动画(volti.c) 设置翻页动画组件的坐标位置和宽高,设置对应的上下图片路径,通过`tui_com_volti_set_attri()`函数显示对应数字的翻页效果,测试代码如下: ``` c void tui_com_volti_test(void) { tui_obj_t * obj; tui_com_volti_attri_t attri = { 0 };//注意先清空结构体,避免随机值 obj = tui_com_volti_create(tui_layer_top()); /* 通用属性 */ attri.obj.pt.x = 200; attri.obj.pt.y = 100; attri.obj.size.width = 200; attri.obj.size.height = 260; attri.up_num_img_pt.x = 0; attri.up_num_img_pt.y = 0; strcpy(attri.up_num_img_path[0], "V:\\image\\0u.png"); strcpy(attri.up_num_img_path[1], "V:\\image\\1u.png"); strcpy(attri.up_num_img_path[2], "V:\\image\\2u.png"); strcpy(attri.up_num_img_path[3], "V:\\image\\3u.png"); strcpy(attri.up_num_img_path[4], "V:\\image\\4u.png"); strcpy(attri.up_num_img_path[5], "V:\\image\\5u.png"); strcpy(attri.up_num_img_path[6], "V:\\image\\6u.png"); strcpy(attri.up_num_img_path[7], "V:\\image\\7u.png"); strcpy(attri.up_num_img_path[8], "V:\\image\\8u.png"); strcpy(attri.up_num_img_path[9], "V:\\image\\9u.png"); attri.down_num_img_pt.x = 0; attri.down_num_img_pt.y = 130; strcpy(attri.down_num_img_path[0], "V:\\image\\0d.png"); strcpy(attri.down_num_img_path[1], "V:\\image\\1d.png"); strcpy(attri.down_num_img_path[2], "V:\\image\\2d.png"); strcpy(attri.down_num_img_path[3], "V:\\image\\3d.png"); strcpy(attri.down_num_img_path[4], "V:\\image\\4d.png"); strcpy(attri.down_num_img_path[5], "V:\\image\\5d.png"); strcpy(attri.down_num_img_path[6], "V:\\image\\6d.png"); strcpy(attri.down_num_img_path[7], "V:\\image\\7d.png"); strcpy(attri.down_num_img_path[8], "V:\\image\\8d.png"); strcpy(attri.down_num_img_path[9], "V:\\image\\9d.png"); attri.cur_num = 2; tui_com_volti_set_attri(obj, &attri); tui_com_volti_set_num(obj, 3); } ``` 效果如图:

## 消息框(msgbox.c) 只需要设置消息框组件的宽高,显示屏幕居中,其中消息框组件支持三种消息提示`YES,NO`按钮、`OK`按钮和5秒自动消失提示框。测试代码如下: ``` c void tui_com_msgbox_test(void) { tui_obj_t * obj; tui_com_msgbox_attri_t attri = { 0 };//注意先清空结构体,避免随机值 obj = tui_com_msgbox_create(tui_layer_normal()); /* 通用属性 */ attri.obj.size.width = 300; attri.obj.size.height = 200; attri.msg_str = "test msg box test !\nnew line test !"; attri.btn_num = 2;//2、1、0分别对应不要消息框 attri.no_str = "NO"; attri.yes_str = "YES"; attri.ok_str = "OK"; tui_com_msgbox_set_attri(obj, &attri); tui_com_msgbox_show_or_hide(obj, 1); } ``` 实际效果如图:

## 创建组件模板(template.c) 该文件没有实际功能,主要是提供给开发者扩展自己的组件,按照这个模板文件书写代码,规范格式,避免遗漏代码。