|
本帖最后由 hpdell 于 2023-9-6 09:13 编辑
分享一下对 guix patient list 控件滑动死机的 初步解决方法
01. patient list 滑动死机的程序:
VOID _patient_row_create(GX_VERTICAL_LIST *list, GX_WIDGET *widget, INT index)
{
GX_RECTANGLE childsize;
PATIENT_ROW *row = (PATIENT_ROW *) widget;
GX_RESOURCE_ID bkgnd_color = GX_COLOR_ID_NEW_COLOR_91AAB4; // 条目交替显示背景颜色 1
GX_BOOL result;
GX_STRING string;
char _name_temp_buf[128] = {0};
if (index & 1)
{
bkgnd_color = GX_COLOR_ID_NEW_COLOR_7DA0B4; // 条目交替显示背景颜色 2
}
// Test if the widget is already created 测试小部件是否已创建
gx_widget_created_test(&row -> background, &result);
if (!result)
{
/* 定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的 */
gx_utility_rectangle_define(&childsize, list->gx_window_client.gx_rectangle_left , 0,
list->gx_window_client.gx_rectangle_right , PATIENT_LIST_VISIBLE_ROWS_H);
gx_widget_create(&row->background, NULL, list, GX_STYLE_ENABLED, GX_ID_NONE, &childsize);
gx_widget_status_add(&row -> background, GX_STATUS_SELECTABLE | GX_STATUS_ACCEPTS_FOCUS);
childsize.gx_rectangle_left += 2;
childsize.gx_rectangle_right = childsize.gx_rectangle_left + (450-2); // list 列表最大 Width 设置为 600 像素,
// 显示 文件大小字节还需要使用 150 ,所以此处只能是 450 了 ,
// -2 是 childsize.gx_rectangle_left += 2 这个使用了 2像素
// --------------------------------------------------------------------------------------------------
// 创建显示 文件名称控件
gx_prompt_create(&row->name, NULL, &row->background, 0,
GX_STYLE_TRANSPARENT //显示透明模式
|GX_STYLE_TEXT_LEFT //显示左对齐
|GX_STYLE_TEXT_COPY, //显示内容动态更新拷贝显示 GX_STYLE_ENABLED
0, &childsize);
gx_prompt_font_set((GX_PROMPT *)&row->name, GX_FONT_ID_GBK2312HWZSL_16);
gx_widget_draw_set(&row->name, patient_prompt_draw);
gx_prompt_text_color_set(&row->name,GX_COLOR_ID_NEW_COLOR_WRITE, GX_COLOR_ID_NEW_COLOR_BLACK, GX_COLOR_ID_NEW_COLOR_WRITE);
// --------------------------------------------------------------------------------------------------
// 创建显示 文件大小控件
gx_utility_rectangle_shift(&childsize, MR_NUM_SHIFT, 0);
gx_prompt_create(&row->size, NULL, &row->background, 0,
GX_STYLE_TRANSPARENT //显示透明模式
|GX_STYLE_TEXT_LEFT //显示左对齐
|GX_STYLE_TEXT_COPY, //显示内容动态更新拷贝显示 GX_STYLE_ENABLED
0, &childsize);
gx_widget_draw_set(&row->size, patient_prompt_draw);
gx_prompt_font_set((GX_PROMPT *)&row->size, GX_FONT_ID_GBK2312HWZSL_16);
gx_prompt_text_color_set(&row->size, GX_COLOR_ID_NEW_COLOR_WRITE, GX_COLOR_ID_NEW_COLOR_BLACK, GX_COLOR_ID_NEW_COLOR_WRITE);
}
// --------------------------------------------------------------------------------------------------
gx_widget_fill_color_set(&row->background, bkgnd_color, GX_COLOR_ID_NEW_COLOR_2, bkgnd_color); // 选中显示的颜色
// --------------------------------------------------------------------------------------------------
string.gx_string_ptr = &patient_list[index]->file_name[0]; // 从sd卡获取到的文件名,已经转化为 utf8
string.gx_string_length = string_length_get(string.gx_string_ptr, MAX_STRING_LENGTH);
gx_prompt_text_set_ext(&row->name, &string); // 在 lcd 上显示曲目名称信息
// -------------------------------------------------------------------------------------------------
strcpy(_name_temp_buf, &patient_list[index]->file_size[0]); // 文件大小数据
strcat(_name_temp_buf, " byte"); // 拼接加上 byte
string.gx_string_ptr = &_name_temp_buf[0]; //patient_list[index].name;
string.gx_string_length = string_length_get(string.gx_string_ptr, MAX_STRING_LENGTH);
gx_prompt_text_set_ext(&row->size, &string);
}
******************************************************************************************************************
******************************************************************************************************************
******************************************************************************************************************
02. patient list 滑动 不 死机的程序:
VOID _patient_row_create(GX_VERTICAL_LIST *list, GX_WIDGET *widget, INT index)
{
GX_RECTANGLE childsize;
PATIENT_ROW *row = (PATIENT_ROW *) widget;
GX_RESOURCE_ID bkgnd_color = GX_COLOR_ID_NEW_COLOR_91AAB4; // 条目交替显示背景颜色 1
// GX_RESOURCE_ID bkgnd_color = GX_COLOR_ID_NEW_COLOR_909090; // 条目交替显示背景颜色 1
GX_BOOL result;
GX_STRING string;
char _name_temp_buf[128] = {0};
if (index & 1)
{
bkgnd_color = GX_COLOR_ID_NEW_COLOR_7DA0B4; // 条目交替显示背景颜色 2
}
// Test if the widget is already created 测试小部件是否已创建
gx_widget_created_test(&row -> background, &result);
if (!result)
{
//list->gx_window_client.gx_rectangle_left : 5
//list->gx_window_client.gx_rectangle_right : 604
// __log("list->gx_window_client.gx_rectangle_left : %d \r\n", list->gx_window_client.gx_rectangle_left);
// __log("list->gx_window_client.gx_rectangle_right : %d \r\n", list->gx_window_client.gx_rectangle_right);
/* 定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的 */
gx_utility_rectangle_define(&childsize, list->gx_window_client.gx_rectangle_left , 0,
list->gx_window_client.gx_rectangle_right , PATIENT_LIST_VISIBLE_ROWS_H);
gx_widget_create(&row->background, NULL, list, GX_STYLE_ENABLED, GX_ID_NONE, &childsize);
gx_widget_status_add(&row -> background, GX_STATUS_SELECTABLE | GX_STATUS_ACCEPTS_FOCUS);
childsize.gx_rectangle_left += 2;
childsize.gx_rectangle_right = childsize.gx_rectangle_left + (450-2); // list 列表最大 Width 设置为 600 像素,
// 显示 文件大小字节还需要使用 150 ,所以此处只能是 450 了 ,
// -2 是 childsize.gx_rectangle_left += 2 这个使用了 2像素
// --------------------------------------------------------------------------------------------------
// 创建显示 文件名称控件
gx_prompt_create(&row->name, NULL, &row->background, 0,
GX_STYLE_TRANSPARENT //显示透明模式
|GX_STYLE_TEXT_LEFT //显示左对齐
|GX_STYLE_TEXT_COPY, //显示内容动态更新拷贝显示 GX_STYLE_ENABLED
0, &childsize);
gx_prompt_font_set((GX_PROMPT *)&row->name, GX_FONT_ID_GBK2312HWZSL_16);
gx_widget_draw_set(&row->name, patient_prompt_draw);
gx_prompt_text_color_set(&row->name,GX_COLOR_ID_NEW_COLOR_WRITE, GX_COLOR_ID_NEW_COLOR_BLACK, GX_COLOR_ID_NEW_COLOR_WRITE);
// --------------------------------------------------------------------------------------------------
// 创建显示 文件大小控件
gx_utility_rectangle_shift(&childsize, MR_NUM_SHIFT, 0);
gx_prompt_create(&row->size, NULL, &row->background, 0,
GX_STYLE_TRANSPARENT //显示透明模式
|GX_STYLE_TEXT_LEFT //显示左对齐
|GX_STYLE_TEXT_COPY, //显示内容动态更新拷贝显示 GX_STYLE_ENABLED
0, &childsize);
gx_widget_draw_set(&row->size, patient_prompt_draw);
gx_prompt_font_set((GX_PROMPT *)&row->size, GX_FONT_ID_GBK2312HWZSL_16);
gx_prompt_text_color_set(&row->size, GX_COLOR_ID_NEW_COLOR_WRITE, GX_COLOR_ID_NEW_COLOR_BLACK, GX_COLOR_ID_NEW_COLOR_WRITE);
// --------------------------------------------------------------------------------------------------
// 放在此处显示条目会超过 _list_info_user._count 这个最大值,但不会超过 guix studio 所配置的 total rows 最大条目数
gx_widget_fill_color_set(&row->background, bkgnd_color, GX_COLOR_ID_NEW_COLOR_2, bkgnd_color); // 选中显示的颜色
// --------------------------------------------------------------------------------------------------
string.gx_string_ptr = &patient_list[index]->file_name[0];// 从sd卡获取到的文件名,已经转化为 utf8
string.gx_string_length = string_length_get(string.gx_string_ptr, MAX_STRING_LENGTH);
gx_prompt_text_set_ext(&row->name, &string); // 在 lcd 上显示曲目名称信息
// -------------------------------------------------------------------------------------------------
strcpy(_name_temp_buf, &patient_list[index]->file_size[0]); // 文件大小数据
strcat(_name_temp_buf, " byte"); // 拼接加上 byte
string.gx_string_ptr = &_name_temp_buf[0]; //patient_list[index].name;
string.gx_string_length = string_length_get(string.gx_string_ptr, MAX_STRING_LENGTH);
gx_prompt_text_set_ext(&row->size, &string); // 在 lcd 上显示曲目大小信息
}
}
******************************************************************************************************************
******************************************************************************************************************
******************************************************************************************************************
03.
a. 在 使用 01 方法中, 显示条目上的内容可自由控制,只要不超过 total rows 这个所配置的大小即可, 但滑动控件里面的条目时会出现卡死
b. 在 使用 02 方法中,显示条目上的内容会 以 total rows 这个 设置的大小显示完整个条目,这点感觉有些不妥,目前还没有找到比较完善的解决方法,
显示条目数量最大能不会超过 total rows 这个配置的大小, 但滑动控件里面的条目不会出现卡死
c. 使用 guix studio 配置后,在软件里面 total rows 这个大小配置不知道能否动态 修改,有哪位大神知道啊 ????????
d. 如有不对的地方,望各位大神 纠正哟
|
|