硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4984|回复: 16
收起左侧

[ThreadX全家桶] 准备做个ThreadX GUIX的数字小键盘,使用Text Input控件做编辑框,发下这个控件没有文本编辑函数,,

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
发表于 2021-5-26 13:12:22 | 显示全部楼层 |阅读模式

GUIX Studio有文本编辑选项:

1.png


而API列表里面仅有这几个游标修改API函数,没法动态修改文本内容

4.png


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
 楼主| 发表于 2021-5-26 14:12:53 | 显示全部楼层
还是是prompt控件吧,API函数齐全些。
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2021-5-26 14:44:49 | 显示全部楼层
text_input输入内容的函数:gx_single_line_text_input_text_set

gx_single_line_text_input_character_insert
gx_single_line_text_input_backspace




获取内容可以用以下代码:
strncpy((char *)input_buf,
                    window_keyboard_numeric.window_keyboard_numeric_text_input.gx_single_line_text_input_buffer,
                    window_keyboard_numeric.window_keyboard_numeric_text_input.gx_single_line_text_input_string_size + 1);


其中window_keyboard_numeric 是页面名称, window_keyboard_numeric_text_input是 text_input 控件名称。


我实现了一个数字键盘模块,设计界面如下:


代码如下:

#include <string.h>

#include "gx_api.h"
#include "guiapp_resources.h"
#include "guiapp_specifications.h"



typedef struct
{
    GX_CHAR *text;
    INT x_offset;
    INT y_offset;
    USHORT widget_id;
    USHORT event_type;
    LONG type;
} KEY_INFO;

static const KEY_INFO key_info[] =
{
    {"0", 0, 0, ID_CHAR_0, GX_SIGNAL(ID_CHAR_0, GX_EVENT_CLICKED), 0},
    {"1", 0, 0, ID_CHAR_1, GX_SIGNAL(ID_CHAR_1, GX_EVENT_CLICKED), 0},
    {"2", 0, 0, ID_CHAR_2, GX_SIGNAL(ID_CHAR_2, GX_EVENT_CLICKED), 0},
    {"3", 0, 0, ID_CHAR_3, GX_SIGNAL(ID_CHAR_3, GX_EVENT_CLICKED), 0},
    {"4", 0, 0, ID_CHAR_4, GX_SIGNAL(ID_CHAR_4, GX_EVENT_CLICKED), 0},
    {"5", 0, 0, ID_CHAR_5, GX_SIGNAL(ID_CHAR_5, GX_EVENT_CLICKED), 0},
    {"6", 0, 0, ID_CHAR_6, GX_SIGNAL(ID_CHAR_6, GX_EVENT_CLICKED), 0},
    {"7", 0, 0, ID_CHAR_7, GX_SIGNAL(ID_CHAR_7, GX_EVENT_CLICKED), 0},
    {"8", 0, 0, ID_CHAR_8, GX_SIGNAL(ID_CHAR_8, GX_EVENT_CLICKED), 0},
    {"9", 0, 0, ID_CHAR_9, GX_SIGNAL(ID_CHAR_9, GX_EVENT_CLICKED), 0},
};

static UCHAR *input_buf = 0;

VOID keyboard_numeric_char_draw(GX_PIXELMAP_BUTTON *widget)
{
    const KEY_INFO *pKeyInfo = key_info;
    GX_STRING text;

    gx_pixelmap_button_draw(widget);

    while (pKeyInfo->text[0])
    {
        if (pKeyInfo->widget_id == widget->gx_widget_id)
        {
            text.gx_string_ptr = pKeyInfo->text;
            text.gx_string_length = strlen(pKeyInfo->text);

            gx_widget_text_draw_ext(widget, GX_COLOR_ID_TEXT,
                                    GX_FONT_ID_FONT24, &text,
                                    pKeyInfo->x_offset, pKeyInfo->y_offset);
            break;
        }
        pKeyInfo++;
    }
}

UCHAR window_keyboard_numeric_execute(GX_WINDOW *parent, UCHAR *buf)
{
    ULONG ret = 0;

    if ((parent == 0) || (buf == 0))
    {
        return 0;
    }

    // 保存输入输出缓存
    input_buf = buf;

    // 绑定窗口到指定父窗口
    gx_widget_attach(parent, &window_keyboard_numeric);

    // 设置输入框的初始内容
    gx_single_line_text_input_text_set(&window_keyboard_numeric.window_keyboard_numeric_text_input, (GX_CHAR *)buf);

    // 显示
    gx_window_execute((GX_WINDOW *)&window_keyboard_numeric, &ret);
    if (ret == ID_BTN_OK)
    {
        return 1;
    }

    return 0;
}

static void btn_char_callback(USHORT id)
{
    const KEY_INFO *pKeyInfo = key_info;
    GX_SINGLE_LINE_TEXT_INPUT *input = &window_keyboard_numeric.window_keyboard_numeric_text_input;

    while (pKeyInfo->text)
    {
        if (pKeyInfo->widget_id == id)
        {
            gx_single_line_text_input_character_insert(input, (GX_UBYTE *)pKeyInfo->text, 1);
            break;
        }
        pKeyInfo++;
    }
}

UINT keyboard_numeric_event_handler(GX_WINDOW *widget, GX_EVENT *event_ptr)
{
    switch (event_ptr->gx_event_type)
    {
    /* 按钮单击事件*/
    case GX_SIGNAL(ID_BTN_BACKSPACE, GX_EVENT_CLICKED):
        gx_single_line_text_input_backspace(&window_keyboard_numeric.window_keyboard_numeric_text_input);
        break;

    case GX_SIGNAL(ID_BTN_OK, GX_EVENT_CLICKED):
        if (input_buf)
        {
            strncpy((char *)input_buf,
                    window_keyboard_numeric.window_keyboard_numeric_text_input.gx_single_line_text_input_buffer,
                    window_keyboard_numeric.window_keyboard_numeric_text_input.gx_single_line_text_input_string_size + 1);
        }
    case GX_SIGNAL(ID_BTN_CLOSE, GX_EVENT_CLICKED):
        return event_ptr->gx_event_sender;
        //break;

    /* 中文选择按键单击事件 */
    case GX_SIGNAL(ID_CHAR_0, GX_EVENT_CLICKED):
    case GX_SIGNAL(ID_CHAR_1, GX_EVENT_CLICKED):
    case GX_SIGNAL(ID_CHAR_2, GX_EVENT_CLICKED):
    case GX_SIGNAL(ID_CHAR_3, GX_EVENT_CLICKED):
    case GX_SIGNAL(ID_CHAR_4, GX_EVENT_CLICKED):
    case GX_SIGNAL(ID_CHAR_5, GX_EVENT_CLICKED):
    case GX_SIGNAL(ID_CHAR_6, GX_EVENT_CLICKED):
    case GX_SIGNAL(ID_CHAR_7, GX_EVENT_CLICKED):
    case GX_SIGNAL(ID_CHAR_8, GX_EVENT_CLICKED):
    case GX_SIGNAL(ID_CHAR_9, GX_EVENT_CLICKED):
        btn_char_callback(event_ptr->gx_event_sender);
        break;

    default:
        break;
    }

    return gx_window_event_process(widget, event_ptr);
}





回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2021-5-26 14:55:45 | 显示全部楼层
补充上一条的键盘界面截图。
企业微信截图_16220121104716.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
 楼主| 发表于 2021-5-26 15:17:32 | 显示全部楼层
ihavedone 发表于 2021-5-26 14:55
补充上一条的键盘界面截图。

非常不错,谢谢分享。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
 楼主| 发表于 2021-5-26 16:47:05 | 显示全部楼层
QQ截图20210526164635.png
回复

使用道具 举报

681

主题

3487

回帖

5555

积分

论坛元老

积分
5555
发表于 2021-5-26 17:08:47 | 显示全部楼层
应该是可以参考 guix 计算器的 键盘捣鼓试试看
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
 楼主| 发表于 2021-5-27 09:16:03 | 显示全部楼层
hpdell 发表于 2021-5-26 17:08
应该是可以参考 guix 计算器的 键盘捣鼓试试看

看了,键盘按钮上没带文本数值,还是从新做个吧
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2021-5-27 10:20:09 | 显示全部楼层
eric2013 发表于 2021-5-27 09:16
看了,键盘按钮上没带文本数值,还是从新做个吧

键盘上的文字是用显示回调函数写上去的,不是在设计器里直接设置的。
回复

使用道具 举报

681

主题

3487

回帖

5555

积分

论坛元老

积分
5555
发表于 2021-5-27 17:19:21 | 显示全部楼层
ihavedone 发表于 2021-5-27 10:20
键盘上的文字是用显示回调函数写上去的,不是在设计器里直接设置的。

历程里面的计算器的按钮是使用了 背景图片的,貌似如果你不使用背景图片的哪种效果的话,应该是可以在设计器里面增加字符显示的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
 楼主| 发表于 2021-5-27 17:33:31 | 显示全部楼层
ihavedone 发表于 2021-5-27 10:20
键盘上的文字是用显示回调函数写上去的,不是在设计器里直接设置的。

我之前是打算找个能嵌入图片还能嵌入文本的按钮控件,这点没有AppWizard方便,AppWizard可以。

GUIX要在按钮的基础上再嵌入文本控件
回复

使用道具 举报

681

主题

3487

回帖

5555

积分

论坛元老

积分
5555
发表于 2021-5-28 08:38:13 | 显示全部楼层
eric2013 发表于 2021-5-27 17:33
我之前是打算找个能嵌入图片还能嵌入文本的按钮控件,这点没有AppWizard方便,AppWizard可以。

GUIX要 ...

貌似 guix 的控件很多都是需要嵌套才行的,特别是按钮需要显示不同的文字字符或者是 图片等的,感觉有些不是很爽啊,貌似没有使用 emwin 方面哟,个人感觉
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
 楼主| 发表于 2021-5-28 12:20:06 | 显示全部楼层
hpdell 发表于 2021-5-28 08:38
貌似 guix 的控件很多都是需要嵌套才行的,特别是按钮需要显示不同的文字字符或者是 图片等的,感觉有些 ...

先建立的简单的练练手
1.png


回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2021-5-28 13:48:45 | 显示全部楼层
hpdell 发表于 2021-5-27 17:19
历程里面的计算器的按钮是使用了 背景图片的,貌似如果你不使用背景图片的哪种效果的话,应该是可以在设 ...

直接在设计器里显示文字的话,有优点也有缺点。
优点是可以在设计器里看到键盘的内容,也不需要再在代码里重新设置显示函数,固定键盘和小键盘比较适用。
缺点是输入法键盘,全键盘等。 因为输入法要切换大小写,数字,字符,语言等。 不同的切换状态下,按键上的内容就会不一样,在设计器里做这些就很繁琐,直接在代码里以字符串或字符串数组的形式,根据不同的状态进行内容显示,会更加方便。  后续修改等也方便得多。

上面是个人理解,我做了个全键盘中英文输入法,后面的数字小键盘是在全键盘上改过来的,所以都是在代码里显示按键文本,而不是设计器里实现。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
 楼主| 发表于 2021-5-29 08:56:39 | 显示全部楼层
ihavedone 发表于 2021-5-28 13:48
直接在设计器里显示文字的话,有优点也有缺点。
优点是可以在设计器里看到键盘的内容,也不需要再在代 ...

玩的溜还是得直接调用API,然后GUIX Studio做个框架布局。
回复

使用道具 举报

681

主题

3487

回帖

5555

积分

论坛元老

积分
5555
发表于 2021-5-29 21:46:30 | 显示全部楼层
eric2013 发表于 2021-5-29 08:56
玩的溜还是得直接调用API,然后GUIX Studio做个框架布局。



我模仿 guix 提供的 计算器历程自己捣鼓的 计算器, 界面,

计算器(v2.23)版本 二进制界面.png


计算器(v2.23)版本 十进制界面-2.png


计算器(v2.23)版本 十六进制界面.png


计算器(v2.23)版本 十进制界面-1.png

这个界面如果捣鼓成 键盘输入应该也可以的,只是不知道该如何隐藏, 显示键盘, 所以后来就没有再捣鼓了

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115812
QQ
 楼主| 发表于 2021-5-29 21:50:14 | 显示全部楼层
hpdell 发表于 2021-5-29 21:46
我模仿 guix 提供的 计算器历程自己捣鼓的 计算器, 界面,

关键的部分已经整理好了,下周给大家分享下

搞定ThreadX GUIX数字小键盘功能,点击编辑框弹出小键盘进行设置,比较实用
http://www.armbbs.cn/forum.php?m ... 7099&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-20 12:53 , Processed in 0.322418 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表