找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1879|回复: 6

[求助] LISP与OPENDCL间变量是如何传递的?如何理解?

[复制链接]
发表于 2015-3-7 22:02:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
(DEFUN c:test () ;/ list_disp s_q1 s_q2 s_q3 e intResult word_1 doContinue)
(vl-load-com)
(if (not (setq project-path (dcl_Project_Load "test.odcl")))
    (progn ;项目无法加载,报告或记录错误
       (alert (strcat "* * * 在CAD搜索目录中未找到[" test.odcl "]文件!"))
       (exit) ;立即退出 (或采取纠正动作并重试)
    )
    (progn
       (setq doContinue 1)
       (while doContinue
         (if (not (dcl_Form_IsActive test_Dtest))
           (setq intResult (dcl_FORM_SHOW test_Dtest))
         )
         (cond ((= intResult 3) (sel_text_ff))
               ((= intResult 0) (setq doContinue nil))
         )
       )
    )
)
;;控制交给对话框

  (prin1 s_q3)     
(dcl_Project_Unload "test")
(prin1 s_q3)
)

;;返回下拉列表的值,
(defun c:test_Dtest_ComboBox1_OnSelChanged (ItemIndexOrCount Value /)
  (setq s_q3 (atoi Value))
)

S_q3为什么传递不过来?

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

发表于 2015-3-8 09:21:51 | 显示全部楼层
ODCL 是用 ARX 编写的,那些 defun c: 函数是供 ARX 做回调执行用,函数体的参数是 ARX 提供的值,函数体内部语句是可以直接使用这些变量的,combobox 列表回调有两个参数,一个是 Index 由 0 计,另外一个是 string ,对应 Index 的 string

ARX 这种 Invoke 函数方式在 xdapi 的 PointMonitor 也是如此,那个点参数是 ARX 提供的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-8 09:42:44 | 显示全部楼层
本帖最后由 挚友01 于 2015-3-8 10:06 编辑

(DEFUN c:test (/ globalVarsList list_disp s_q1 s_q2 s_q3 e intResult word_1 doContinue) .(setq S_q3 0)
.
.
(prin1 s_q1)无值
主程序中定义的变量在OPENDCL中都转递不过来,我还是不明白..
(defun c:test_Dtest_TextBox1_OnEditChanged (NewValue /)
(setq  s_q1 NewValue)
)
   s_q1无值,没传过来...





点评

EditChanged 事件是实时的,NewValue 是你输入过程的字符,用 Updated,动作完成后的字符  详情 回复 发表于 2015-3-8 10:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2015-3-8 10:19:17 | 显示全部楼层
挚友01 发表于 2015-3-8 09:42
(DEFUN c:test (/ globalVarsList list_disp s_q1 s_q2 s_q3 e intResult word_1 doContinue) .(setq S_q3  ...

EditChanged 事件是实时的,NewValue 是你输入过程的字符,用 Updated,动作完成后的字符
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-8 10:36:03 | 显示全部楼层
(defun c:test_Dtest_TextBox1_OnUpdate (NewValue1 /)
(setq word_1 NewValue1 lhm_text word_1)
)
试了,word_1 还是没值
(defun sel_text_ff1()
(cond ((= s_q3 0)         
           (if (null (ssget "X" '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(-4 . "OR>"))))            
             (alert "\n *  *  * 请注意,未选择到任何文字! *  *  *\n")
           )
        )
        ((= s_q3 1)
;(setq word_1 (dcl_Control_GetText test_Dtest_TextBox1))
(prin1 word_1)

点评

贴上完整代码  详情 回复 发表于 2015-3-8 10:46
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2015-3-8 10:46:37 | 显示全部楼层
挚友01 发表于 2015-3-8 10:36
(defun c:test_Dtest_TextBox1_OnUpdate (NewValue1 /)
(setq word_1 NewValue1 lhm_text word_1)
)

贴上完整代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

xrjoc 该用户已被删除
发表于 2015-10-29 17:03:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 20:23 , Processed in 0.197085 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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