iCAx开思工具箱

标题: UG二次开发对话框控件问题,请ZZZ帮忙 [打印本页]

作者: wgwang    时间: 2003-8-22 10:53
标题: UG二次开发对话框控件问题,请ZZZ帮忙
        如图示,我要实现选择框"偏置型“ 和e数值栏的组合,  也就是说只有当我勾选"偏置型“小方框后, e数值栏的输入状态才有效,否则无效   
作者: wgwang    时间: 2003-8-22 10:55
图太小了,再来
作者: wgwang    时间: 2003-8-22 10:56
要实现的结果:
作者: wgwang    时间: 2003-8-22 10:57
勾选后,第一个框状态有效
作者: wgwang    时间: 2003-8-22 10:59
各位朋友,请赐教,谢谢!
作者: zzz    时间: 2003-8-22 11:03
UF_STYLER_set_sensitive()
作者: wgwang    时间: 2003-8-22 14:25
  谢谢ZZZ斑竹,我查了TOGGLE的属性,是有sensitive .但我在document中找不到UF_STYLER_set_sensitive() 的定义,对其用法不清楚
  
本来我是这样想的:int CHANGE_active ( int dialog_id,
             void * client_data,
             UF_STYLER_item_value_type_p_t callback_data)
{      
  
   UF_STYLER_item_value_type_t data;
     /* Make sure User Function is available. */   
     if ( UF_initialize() != 0)  
          return ( UF_UI_CB_CONTINUE_DIALOG );
  
     /* ---- Enter your callback code here ----- */
  
          data.item_id = CHANGE_E;  
         data.sensitive.integer=TRUE;
  
     UF_terminate ();
}
  
但提示说sensitive不是UF_STYLER_item_value_type_t  的成员属性,查其定义确实没有给成员,斑竹能否讲详细点,最好给一段示例程序,十分感谢!
作者: zzz    时间: 2003-8-22 15:27
对不起,好久没有做程序,有些东西一下子忘了。
就是UF_STYLER_set_value()
  
思路应该是这样的:
  
用UF_STYLER_ask_value()读TOGGLE的值,
如果为0, 则用UF_STYLER_set_value()把REAL INPUT设为insensitive,如果为1,则设为sensitive。
  
data.item_attr = UF_STYLER_VALUE;
data.item_id = TOGGLE ID;
  
UF_STYLER_ask_value(dialog_id, [$data)]
  
ret = data.value.integer;
  
if(ret == 0)
{
     data1.item_attr = UF_STYLER_SENSITIVITY;
     data1.item_id = REAL INPUT ID;
     data1.value.integer = FALSE;
  
     UF_STYLER_set_value(dialog_id, data1);
  
}
if(ret == 1)
{
......
}
作者: zzz    时间: 2003-8-22 15:35
可以直接设置:
  
data1.item_attr = UF_STYLER_SENSITIVITY;
data1.item_id = ...
data1.value.integer = ret;
  
UF_STYLER_set_value(......);
作者: wgwang    时间: 2003-8-22 21:06
谢谢ZZZ斑竹的热心帮助!!!!!
  
这个功能实现了,还有遗留一点小问题就是调出对话框时的初始状态还是激活的,如果让初始是非击活状态,应在哪里设呢
  
是在ufusr那个函数里吗,我在那里试了一下:
extern void ufusr (char *param, int *retcode, int rlen)
{
    int  response   = 0;
    int  error_code = 0;
     UF_STYLER_item_value_type_t data;//添加的
   
    if ( ( UF_initialize() ) != 0 )  
           return;
  
    if ( ( error_code = UF_STYLER_create_dialog ( "test.dlg",
           CHANGE_cbs,      /* Callbacks from dialog */
           CHANGE_CB_COUNT, /* number of callbacks*/
           NULL,        /* This is your client data */
           &response ) ) != 0 )
    {
          char fail_message[133];
  
          /* Get the user function fail message based on the fail code.*/
          UF_get_fail_message(error_code, fail_message);
          UF_UI_set_status (fail_message);
          printf ( "%s\n", fail_message );  
    }
        
       data.item_attr = UF_STYLER_VALUE;        //添加这四句
        data.item_id =CHANGE_E;
        UF_STYLER_ask_value(dialog_id, [$data)]
       data.value.integer =FALSE;
   
    UF_terminate();                              
    return;
}
  
编译后提示说”dialog_id“是undeclared identifier,   是不是放错地方了,我记得以前看过帮助说可以在对话框调出来之前就可以设定其控件状态的,请问斑竹该怎么做,谢谢
作者: liberty000    时间: 2003-8-22 21:55
     STYLER中将Resource Editor的senstive不选。这个其实很简单,当然比VC稍微复杂点。
     编译后提示说”dialog_id“是undeclared identifier,你这个程序放置位置是否有问题?应该放在Toggle 回调函数里吧。dialog_id就是你所建立的对话框。
作者: liberty000    时间: 2003-8-22 21:56
      对不起!漏了字。将UISTYLER中将Resource Editor的senstive不选。这个其实很简单,当然比VC稍微复杂点。  
     编译后提示说”dialog_id“是undeclared identifier,你这个程序放置位置是否有问题?应该放在Toggle 回调函数里吧。dialog_id就是你所建立的对话框。
作者: wgwang    时间: 2003-8-23 08:49
呵呵,困在程序里一时忘了还可以在编辑器里该,问题解决了
  
谢谢两位的热心帮助!
作者: zzz    时间: 2003-8-23 10:51
可以在程序里改,但是要建立constructor callback,在构造函数里可以进行一切设置。
作者: wgwang    时间: 2003-8-24 10:37
斑竹,照你的说法我在构造函数里 添加这四句 :
        data.item_attr = UF_STYLER_VALUE;  
        data.item_id =CHANGE_E;  
        UF_STYLER_ask_value(dialog_id, [$data)]  
       data.value.integer =FALSE;  
但结果没有达到预期效果。
  
请解释一下构造函数是什么时候作用的,我只知道是对一般程序来说,启动后的初始化,但在这里好象是发生在函数入口点后的,即先产生对话框的,不知我的理解是否正确,请指教!
作者: liberty000    时间: 2003-8-24 10:51
    我的理解是构造函数和析构函数类似与C++中的构造函数和析构函数,起初始化的作用。斑竹,不知正确不?
作者: wgwang    时间: 2003-8-24 10:51
请问斑竹data1.item_attr = UF_STYLER_SENSITIVITY中sensitivity属性为什么要这样写,开始我是认为这样的data.sensitive.integer=TRUE.
虽然对DOCUMENT对控件的说明已很详细,但我现在对怎样调用这些属性还是不清楚,请讲一下如图片中的各属性怎么用的,都如UI_STYLER_....吗,有没有什么规则?
作者: liberty000    时间: 2003-8-24 10:53
看了你的程序,发现你没有用UF_STYLER_set_value()去设置属性,怎么能行呢?;
作者: wgwang    时间: 2003-8-24 11:06
加了还是不行,  我想主要问题是先执行 constructor还是creat  dialog
作者: liberty000    时间: 2003-8-24 15:02
     正如斑竹所说那样,你可以在constructor_cb里将所有控件初始化。我个人理解UG在调用对话框的同时执行constructor_cb进行初始化。
作者: zzz    时间: 2003-8-25 09:16
这和C++的编程思想是很相似的,如果你了解c++的话,这个对你应该很容易。
作者: 零星雨    时间: 2011-9-4 17:59

没有搞懂




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