This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CODECOMPOSER:GUI Composer:是否有办法在与标签小工具(或其他小工具)共享的字符串中设置字符符号

Guru**** 2348500 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1526061/codecomposer-gui-composer-is-there-a-way-to-set-a-character-symbol-in-a-string-that-is-shared-with-a-label-widget-or-other-widget

部件号:CODECOMPOSER

工具/软件:

我想在 C2000 上设置一个字符串、其中包含小写 mu 符号(以微秒为单位)、该符号会正确显示在 GUI Composer 下的标签小工具中。

到目前为止,我还没有找到正确的转义序列。

例如:

sprintf ((char*)gui_string、“测试:\u03BC“);

得出  

标签中、其值链接到 GUI_STRING

是否有能生成所需符号的更好的编码、序列等?

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Mark、  

    您是否需要从目标端发送设备? 如果您可以根据接收到的值推断单元、则可以在主机端的 GUI Composer 中以编程方式附加 Unicode 字符。  

    通常、绑定(目标日期和小工具之间的连接)是通过 GUI、即.property 页面创建的。 但是、它们也可以通过编程方式创建。 一些项目模板包含 main.js、其中包含一些注释掉的示例代码。 如果没有、则可以通过转到“文件“->"新建“新建“->"应用“应用程序 javascript “文件来创建它

    顶部附近应该有一个类似于以下内容的事件侦听器函数:

    /*
    *用于创建计算数据绑定的样板代码
    */
    document.addEventListener('GC-DataBind-ready,函数 ()

    }

    在内部有几个不同的示例、说明如何以编程方式创建绑定。 主要优点是可以添加自定义 getter/setter 函数来转换或更改 Flight 中的显示值。  

    我建议使用此模板示例:

    // gc.DataBind.registry.bind('widget.id.propertyName'、“targetVariable",“,function(value){、function(value){ return value*5/9 + 32;}、function(value){(return value-32)*9/5;});

    具有如下所示的内容:  

    gc.DataBind.registry.bind(“widget.label_7.label",“,"straming.c4"、"straming.c4",“,</s>“ 、

        value =>{return value“µ“;}/* getter */
    );

    在上面的示例中、我只是在 mu 字符中添加一个空格、但是您可以添加 javascript 代码来检查值并确定是否应该基于值使用不同的符号。  

    如果这个小部件只是一个显示,那么你只需要一个 getter,但是,如果用户可以更改然后需要发送到设备的值,那么 setter 将是执行反向转换所必需的。  

    最后、重要的节点是、工具中没有检查以确保只创建一种绑定类型、因此您需要确保如果以编程方式添加绑定、则通过 GUI 创建的绑定(即,.e 小部件属性页)将被删除。 如果两者都有,那么你会得到很多更新,因为两个绑定方法不断在值之间翻转。  

    Martin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Martins:

    单位由 GUI 中的 Toggle 开关更改、然后该开关链接到目标上的变量、以便目标可以相应地更新其操作。  因此、在这种情况下、我可能会直接查看 Toggle Switch Checked 字段以确定要在标签中显示的单位。

    这似乎是解决这一问题的好途径。

    当我创建一个新的应用程序 JavaScript 文件时、我看不到您描述的项目、尽管有些项目已关闭。  这是一个 V3 应用程序,如果它有区别.

    试图结合小我知道与你上面的描述,似乎我有一些可行的东西.  在这种情况下、我将使用切换开关的选中事件来更改单位。  事件侦听器将检查切换开关的“已检查“字段、并将标签设置为适当的值。  初始测试似乎有效。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Mark、  
    我不确定您使用的是哪个版本的 GUI Composer 库、因此信息适用于 v2 组件库。 在 v3 两个项目模板中、应该有 index.js、这与我提到的文件大致相同。 结构不同、需要记住几件事。  

    下面的代码从 index.js 中的第 40 行开始。 重要的一点是取消注释 开头的两行  

    等待 bindingRegistry.waitForModelReady(.

    -----

    这可确保正确初始化内部数据模型。 第一行等待构件模型、您不需要更改它。 第二个等待应该使用应用程序正在使用的数据模型。 在我的案例中、我使用的是“流式传输“数据模型、即 id=streaming。  

    我的测试应用正在使用此设备端 CCS 项目: gc_simple_json Device 刚刚发送 c1..c4 变量作为 JSON 对象。  

    //示例代码:
    //
    (异步 ()=>{
    ///*等待小部件和目标模型准备就绪*/
    等待绑定 Registry.waitForModelReady ('widget');
    等待 bindingRegistry.waitForModelReady ('treaming');
    //
    ///*基于简单表达式的简单计算值*/
    // bindingRegistry.bind('widget.id.propertyName'、“targetModelId.targetVariable ==1? '绑定是一个':'绑定不是一个');
    //
    ///*使用自定义 getter 和 setter 函数的自定义双向绑定*/
    ///*(setter 是可选的、getter 仅表示单向绑定)*/
    bindingRegistry.bind(“widget.label_7.label",“,"straming.c4"、"straming.c4",“,</s>“ 、
    value =>{return value“µ“;}/* getter */
    );
    //
    ///* 1 到 n 个绑定*/
    // bindingRegistry.bind ('widget.date.value'、{
    ///*在名称/值对中计算日期所需的依赖绑定*/
    //工作日:' widget.dayOfWeek.selectedLabel'、
    //天:“widget.dayOfMonth.value",“,</s>、
    //月:' widget.month.selectedLabel'
    //年:“widget.year.value"</s>“
    //}、
    ///*日期计算的 Getter */
    //函数(值){
    ///*计算并返回要绑定到小工具的字符串值、ID 为“date"*/“*/
    //返回 values.weekday +'、'+ values.month +''+ values.day +'、'+ values.year;
    //}
    //);
    })();

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Martin:

    我的方法是为切换开关设置 eventListener 以进行更改:

    var set_units = function(){
        
        const binding=bindingRegistry.getBinding('units.checked');
        var value = binding.getValue();
        alert("value: " + value);
    	
    	const binding2 = bindingRegistry.getBinding('label_52.label');
    	var value2 = binding2.getValue();
    	
    	if (value == true){
    	    value2 = "HELLO";
    	}
    	else{
    	    value2 = "WORLD";
    	}
    	binding2.setValue(value2);
    	
    	const binding3 = bindingRegistry.getBinding('label_22.label');
    	var value3 = binding3.getValue();
    	
    	if (value == true){
    	    value3 = "ms";
    	}
    	else{
    	    value3 = "µs";
    	}
    	binding3.setValue(value3);
    };
    
    
    const init = () => {
        GcWidget.querySelector('#units').then(input => {
            input.addEventListener('checked-changed', (inp) => {
                set_units();
            });
        });
        
    };

    我的问题是、结果与预期的结果相反。  如果切换为 false、 则字符串应为 µs μ s“、如果为 true、则为“ms",“,此时、此时我看到的情况正好相反。  作为猜测、事件侦听器将在“已选中“字段更新为其新值之前运行。  你知道这里可能会发生什么,以及如何解决它?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Mark、  

    这是有点难解释,然而, getBinding 在单元小部件的情况下正在数据模型中创建一个新的条目,但没有更改侦听器和数据模型返回缓存的值。 这是一种优化。  

    对于另外两个标签、setValue 会更改数据模型、然后触发对小工具的写入更改。 写入会强制更新。  

    查看单位状态复选框最简单的方法可能是查看作为参数传递给事件侦听器的事件详细信息

    即、将 set_units 更改为具有从 CustomEvent 传递值的参数。  您的代码需要更改为 “set_units (inp.detail.value)“  

    Martin