iCAx开思工具箱

标题: 【求助】UIStyler中的option _menu赋值问题 [打印本页]

作者: tari    时间: 2004-9-25 09:36
标题: 【求助】UIStyler中的option _menu赋值问题
下面是我写的几句代码:
data.item_id=MY_PROGRAM;
data.item_attr=UF_STYLER_LIST_INSERT;
data.subitem_index=UF_STYLER_NO_SUB_INDEX;
data.indicator=UF_STYLER_STRING_VALUE;
data.value.string=string;
UF_STYLER_set_value(dialog_id,[$data)]
错误提示:UIStyler Callback:cannot set attribute,恳请指点!谢谢!
作者: 刘亮    时间: 2004-9-25 16:17
data.value.string=string; 改为data.value.strings=string; 试一试
作者: zzz    时间: 2004-9-25 21:38
option menu根本不支持LIST_INSERT.。
item_attr 应该等于 UF_STYLER_SUBITEM_VALUES
赋值应该是  
data.value.strings = &string;
作者: tari    时间: 2004-9-25 22:02
谢谢!
不过好像不行,由于api函数限制的缘故,prog_sub_names是const char **型,data.value.strings=[$prog_sub_names]编译不错,cannot convert const char ** to char **,恳请指点!
作者: zzz    时间: 2004-9-26 11:00
直接用
data.value.strings = prog_sub_names;
作者: tari    时间: 2004-9-26 16:00
谢谢指点!
我使用字符数组和指针进行转换,可以赋值了,不过系统还是提示出错:
UIstyler Callback: Invalid value structure,恳请各位高手继续指点!
作者: huashanyjj    时间: 2004-9-27 10:17
这是对选项赋值(如果是初始化的话)
char *supplier[]={"DME","富力",
"HASCO","MISUMI","RABOURDIN","STAUBLI"};
  
    UF_STYLER_item_value_type_t data;
  
    data.item_attr=UF_STYLER_SUBITEM_VALUES;
    data.item_id=HOLE_OPTION_SUPPLIER;
    data.value.strings=supplier;
    data.count=6;
    UF_STYLER_set_value(dialog_id,[$data)]
你的问题似乎是动态赋值(指针的指针如何赋值的问题)
可以这样处理(只是处理方法之一)
   char ** pStr;
   char str[10][132]={"aaa", "bbb", "ccc", "ddd"};
   pStr=new char * [10];
   for(int i=0; i<10; i++)
         pStr=str;
然后将pStr赋给data.value.strings,你也可以改变str中的值,strcpy(str[1], "tets");,或者开始对str不初始化,现在用strcpy,or, sprintf etc.. 赋值
data.value.strings=pStr;
  
用完后释放空间,也许系统会释放?,如果运行没有错误,还是释放的好!
   delete [] pStr;
  
这在UG二次开发中用到的比较多,所以希望这对其他人也有所帮助。
作者: tari    时间: 2004-9-27 14:07
非常感谢huashanyjj及各位指点!
作者: tari    时间: 2004-9-28 15:34
还有一个问题要问:用鼠标选择其中一项,如何读该数据,谢谢!
作者: huashanyjj    时间: 2004-9-29 13:09
因为option menu没有插入一项的功能,所以要插入一项,所有的选项都要再用上次的方法,插入一遍,即把下面代码再执行一遍。往supplier中用strcpy加入一项,count加一其中supplier中包含你的新的选项。
   UF_STYLER_item_value_type_t data;  
  
   data.item_attr=UF_STYLER_SUBITEM_VALUES;  
   data.item_id=HOLE_OPTION_SUPPLIER;  
   data.value.strings=supplier;  
   data.count=6;  
   UF_STYLER_set_value(dialog_id,[$data)]  
  
有关点击一项,读出数据,可以这样处理:
在对话框中添加option menu 的处理函数
在处理函数里:
   UF_STYLER_item_value_type_t data;
   data.item_attr=UF_STYLER_VALUE;
   data.item_id=HOLE_OPTION_SUPPLIER;
   UF_STYLER_ask_value(dialog_id,[$data)]
   int index_supplier=data.value.integer;//得到选中哪一项。
得到选中的那一项后,如果你知道所有选项(一个指针的指针,或二维数组等)就可以利用 supplier[index_supplier]得到数据。不知道的话。
UF_STYLER_item_value_type_t data;
data.item_attr=UF_STYLER_SUBITEM_VALUES;
data.item_id=HOLE_OPTION_SUPPLIER;
UF_STYLER_ask_value(dialog_id,[$data)]
  
其中data.value.strings就是所有选项;选中的项就是
data.value.strings[index_supplier]
作者: tari    时间: 2004-9-29 13:24
huashanyjj兄讲的很详细,非常感谢!
作者: tari    时间: 2004-9-30 10:50
我在选择其中一项时index_supplier的值好大(如231549824,每次还不一样),不在0-data.count 之间,问题出在哪里,恳请指点!谢谢,祝各位国庆快乐!
代码如下:(调试时rc=0)
value.item_id=MY_USR_GEOMETRY;
value.item_attr=UF_STYLER_SUBITEM_VALUES;
rc=UF_STYLER_ask_value(dialog,[$value)]
int index_supplier=value.value.integer;
作者: huashanyjj    时间: 2004-9-30 21:38
有关点击一项,读出数据,可以这样处理:  
在对话框中添加option menu 的处理函数  
在处理函数里:  
   UF_STYLER_item_value_type_t data;  
   data.item_attr=UF_STYLER_VALUE;  
   data.item_id=HOLE_OPTION_SUPPLIER;  
   UF_STYLER_ask_value(dialog_id,[$data)]  
   int index_supplier=data.value.integer;//得到选中哪一项。
作者: tari    时间: 2004-10-4 09:32
谢谢!
作者: hjxxzj    时间: 2011-8-15 14:23
这么多天,终于试出来了
作者: fisherhua    时间: 2011-8-15 15:54
恩,我也是这么做的···




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3