找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 5112|回复: 68

[求助] 请教如何关闭modeless dialog

[复制链接]
发表于 2014-11-13 18:05:34 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 13808843088 于 2014-11-14 17:05 编辑

请教各位,我建立了一个modeless dialog,程序的设想是这样的,当OnMouseMovedOff我按下右键、ESC、空格键关闭modeless dialog,程序结束。我的实现过程如下,但是不对,请各位帮忙看下错在哪里,应如何修改,谢谢。还有当modeless dialog在dcl_Form_Show 的时候,鼠标的状态是OnMouseEntered还是OnMouseMovedOff。
  1. ;;;by gu_xl http://gyh060707.blog.sohu.com/(defun gxl-AutoLoadODclArx (/ loaded fn v fnn)
  2.   (if (not dcl_getversionex)
  3.     (VL-CATCH-ALL-APPLY 'vl-cmdf (list "opendcl"))
  4.   )
  5.   (if (not dcl_getversionex)
  6.     (cond
  7.       ((= "16" (setq v (itoa (atoi (getvar 'acadver)))))
  8.        (if
  9.          (setq fnn (findfile (setq fn (strcat "opendcl." v ".arx"))))
  10.           (setq loaded (arxload fnn "1"))
  11.           (setq loaded "2")
  12.        )
  13.       )
  14.       ((or (= "17" v) (= "18" v) (= "19" v))
  15.        (if (= "x86" (getenv "PROCESSOR_ARCHITECTURE"))
  16.          (if (setq fnn
  17.                     (findfile (setq fn (strcat "opendcl." v ".arx")))
  18.              )
  19.            (setq loaded (arxload fnn "1"))
  20.            (setq loaded "2")
  21.          )
  22.          (if (setq fnn
  23.                     (findfile (setq fn (strcat "opendcl." v "x64.arx")))
  24.              )
  25.            (setq loaded
  26.                   (arxload fnn
  27.                            "1"
  28.                   )
  29.            )
  30.            (setq loaded "2")
  31.          )
  32.        )
  33.       )
  34.       (t (Setq loaded "2"))
  35.     )
  36.     (setq loaded "3") ;_ 已加载
  37.   )
  38.   (if (= "1" loaded)
  39.     (progn
  40.       (princ (strcat fn "加载失败!程序将退出!"))
  41.       (exit)
  42.     )
  43.     (if        (= "2" loaded)
  44.       (progn
  45.         (princ
  46.           (strcat "未找到对应的\"" fn "\"文件!程序将退出!")
  47.         )
  48.         (exit)
  49.       )
  50.     )
  51.   )
  52.   loaded
  53. )
  54. ;;;by gu_xl http://gyh060707.blog.sohu.com/
  55. (defun gxl-Load_ODCL_Project
  56.        (projname reload password alias / bytes rtype Projects)
  57.   (cond
  58.     ((null dcl_project_import)
  59.      (princ "需OpenDCL 5.0 以上版本支持.\n")
  60.      nil
  61.     )
  62.     ((and
  63.        (setq bytes (vl-get-resource projname))
  64.        (eq 'str (setq rtype (type bytes)))
  65.        (not (eq "" bytes))
  66.      )
  67.      (if reload
  68.        (dcl_project_import bytes password alias)
  69.        (if (or
  70.              (not (setq Projects (dcl_GetProjects)))
  71.              (not (member (strcase (vl-filename-base projname))
  72.                           (mapcar 'strcase Projects)
  73.                   )
  74.              )
  75.            )
  76.          (dcl_project_import bytes password alias)
  77.        )
  78.      )

  79.     )
  80.     ((dcl_project_load (findfile projname) reload alias))
  81.   )
  82. )
  83. (defun c:tt (/)
  84.   (gxl-AutoLoadODclArx)
  85.   (gxl-Load_ODCL_Project "xty_offset.odcl" t nil nil)
  86.   (dcl_Form_Show xty_offset_Form1)
  87.   (princ)
  88. )
  89. (defun c:xty_offset/Form1#OnInitialize (/ la lst)
  90.   (vlax-for la (VLA-GET-LAYERS
  91.                  (vla-get-ActiveDocument (vlax-get-acad-object))
  92.                )
  93.     (setq lst (cons (vla-get-name la) lst))
  94.   )
  95.   (dcl-Control-SetList
  96.     xty_offset/Form1/ComboBox1
  97.     lst
  98.   )
  99.   (dcl-Control-SetText
  100.     xty_offset/Form1/ComboBox1
  101.     (getvar "clayer")
  102.   )
  103.   (dcl-Control-SetText
  104.     xty_offset/Form1/TextBox1
  105.     (rtos (getvar "OFFSETDIST") 2 2)
  106.   )
  107. )
  108. (defun c:xty_offset/Form1/CheckBox3#OnClicked (Value /)
  109.   (if (= Value 1)
  110.     (dcl-Control-SetVisible xty_offset/Form1/ComboBox1 t)
  111.     (dcl-Control-SetVisible xty_offset/Form1/ComboBox1 nil)
  112.   )
  113. )
  114. (defun c:xty_offset/Form1#OnMouseMovedOff (/ code gr1 gr2)
  115.   (while
  116.     (progn (setq code (grread t 15 2)
  117.                  gr2 (cadr code)
  118.                  gr1 (car code)
  119.            )
  120.            (cond
  121.              ((or (equal code '(2 27))
  122.                   (equal code '(2 32))
  123.                   (equal code '(2 13))
  124.                   (= gr1 11)
  125.                   (= gr1 25)
  126.               )
  127.               (dcl_Form_close xty_offset_Form1)
  128.              )
  129.            )
  130.     )
  131.   )
  132. )

请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:xty_offset.odcl 
下载次数:4  文件大小:1.04 KB 
下载权限: 不限 以上  [免费赚D豆]

以下为坛友指导下完成后的有bug版本
在各位的指导下基本完成,但是还是有bug,刚开始执行的时候鼠标非要到窗体上晃一圈,有时候对话框退不出来,命令行提示“无法重复进入 LISP”。哪位大侠有时间帮忙看看,非常感谢!这只是学习opendcl的一个习作,由于英文水平很差,程序结构又是空白,学得比较痛苦,拣拣丢丢反复很多年了,最近有时间又捡了起来,论坛中对各个窗体及控件应用的讲解很少,程序本身提供的范例也只是泛泛的示范了一下窗体及控件的用法,都不是很详细。希望本版块慢慢的热起来,有更多优秀的示例。
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:xty_offset.odcl 
下载次数:8  文件大小:1.05 KB 
下载权限: 不限 以上  [免费赚D豆]

请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:lx2.LSP 
下载次数:10  文件大小:3.97 KB 
下载权限: 不限 以上  [免费赚D豆]

1.gif
  1. ;;;by gu_xl http://gyh060707.blog.sohu.com/
  2. (defun gxl-AutoLoadODclArx (/ loaded fn v fnn)
  3.   (if (not dcl_getversionex)
  4.     (VL-CATCH-ALL-APPLY 'vl-cmdf (list "opendcl"))
  5.   )
  6.   (if (not dcl_getversionex)
  7.     (cond
  8.       ((= "16" (setq v (itoa (atoi (getvar 'acadver)))))
  9.        (if
  10.    (setq fnn (findfile (setq fn (strcat "opendcl." v ".arx"))))
  11.     (setq loaded (arxload fnn "1"))
  12.     (setq loaded "2")
  13.        )
  14.       )
  15.       ((or (= "17" v) (= "18" v) (= "19" v))
  16.        (if (= "x86" (getenv "PROCESSOR_ARCHITECTURE"))
  17.    (if (setq fnn
  18.         (findfile (setq fn (strcat "opendcl." v ".arx")))
  19.        )
  20.      (setq loaded (arxload fnn "1"))
  21.      (setq loaded "2")
  22.    )
  23.    (if (setq fnn
  24.         (findfile (setq fn (strcat "opendcl." v "x64.arx")))
  25.        )
  26.      (setq loaded
  27.       (arxload fnn
  28.          "1"
  29.       )
  30.      )
  31.      (setq loaded "2")
  32.    )
  33.        )
  34.       )
  35.       (t (Setq loaded "2"))
  36.     )
  37.     (setq loaded "3") ;_ 已加载
  38.   )
  39.   (if (= "1" loaded)
  40.     (progn
  41.       (princ (strcat fn "加载失败!程序将退出!"))
  42.       (exit)
  43.     )
  44.     (if  (= "2" loaded)
  45.       (progn
  46.   (princ
  47.     (strcat "未找到对应的"" fn ""文件!程序将退出!")
  48.   )
  49.   (exit)
  50.       )
  51.     )
  52.   )
  53.   loaded
  54. )
  55. ;;;by gu_xl http://gyh060707.blog.sohu.com/
  56. (defun gxl-Load_ODCL_Project
  57.        (projname reload password alias / bytes rtype Projects)
  58.   (cond
  59.     ((null dcl_project_import)
  60.      (princ "需OpenDCL 5.0 以上版本支持.\n")
  61.      nil
  62.     )
  63.     ((and
  64.        (setq bytes (vl-get-resource projname))
  65.        (eq 'str (setq rtype (type bytes)))
  66.        (not (eq "" bytes))
  67.      )
  68.      (if reload
  69.        (dcl_project_import bytes password alias)
  70.        (if (or
  71.        (not (setq Projects (dcl_GetProjects)))
  72.        (not (member (strcase (vl-filename-base projname))
  73.         (mapcar 'strcase Projects)
  74.       )
  75.        )
  76.      )
  77.    (dcl_project_import bytes password alias)
  78.        )
  79.      )
  80.     )
  81.     ((dcl_project_load (findfile projname) reload alias))
  82.   )
  83. )
  84. (defun xty_ssn (ss o / n lst)
  85.   (repeat (setq N (sslength ss))
  86.     (setq LST (cons (ssname SS (setq N (1- N))) LST))
  87.   )
  88.   (if o
  89.     (mapcar 'vlax-ename->vla-object lst)
  90.     lst
  91.   )
  92. )
  93. (vl-load-com)
  94. (defun c:tt (/)
  95.   (gxl-AutoLoadODclArx)
  96.   (gxl-Load_ODCL_Project "xty_offset.odcl" t nil nil)
  97.   (dcl_Form_Show xty_offset_Form1)
  98.   (princ)
  99. )
  100. (defun c:xty_offset/Form1#OnInitialize (/ la lst)
  101.   (vlax-for la (VLA-GET-LAYERS
  102.      (vla-get-ActiveDocument (vlax-get-acad-object))
  103.          )
  104.     (setq lst (cons (vla-get-name la) lst))
  105.   )
  106.   (dcl-Control-SetList
  107.     xty_offset/Form1/ComboBox1
  108.     lst
  109.   )
  110.   (dcl-Control-SetText
  111.     xty_offset/Form1/ComboBox1
  112.     (getvar "clayer")
  113.   )
  114.   (dcl-Control-SetText
  115.     xty_offset/Form1/TextBox1
  116.     (rtos (getvar "OFFSETDIST") 2 2)
  117.   )
  118.   (princ)
  119. )
  120. (defun c:xty_offset/Form1/CheckBox3#OnClicked (Value /)
  121.   (if (= Value 1)
  122.     (dcl-Control-SetVisible xty_offset/Form1/ComboBox1 t)
  123.     (dcl-Control-SetVisible xty_offset/Form1/ComboBox1 nil)
  124.   )
  125.   (princ)
  126. )
  127. (defun c:xty_offset/Form1#OnMouseMovedOff (/)
  128.   (dcl_sendstring "(rrt)\n")
  129.   (princ)
  130. )
  131. (defun rrt (/ ch db de dis lay obj1 obj2 ss)
  132.   (if
  133.     (while
  134.       (setq
  135.   ss (ssget '((0 . "line,SPLINE,*POLYLINE,circle,arc,ELLIPSE")))
  136.       )
  137.        (setq dis (atof (dcl-Control-GetText xty_offset/Form1/TextBox1))
  138.        db   (dcl-Control-GetValue xty_offset/Form1/CheckBox1)
  139.        de   (dcl-Control-GetValue xty_offset/Form1/CheckBox2)
  140.        ch   (dcl-Control-GetValue xty_offset/Form1/CheckBox3)
  141.        lay (dcl-Control-Gettext xty_offset/Form1/ComboBox1)
  142.        )
  143.        (foreach  n (xty_ssn ss t)
  144.    (setq obj1 (vlax-safearray->list
  145.           (vlax-variant-value (vla-offset n dis))
  146.         )
  147.          obj2 nil
  148.    )
  149.    (if (= 1 db)
  150.      (setq obj2 (vlax-safearray->list
  151.       (vlax-variant-value (vla-offset n (- dis)))
  152.           )
  153.      )
  154.    )
  155.    (if (= 1 de)
  156.      (vla-delete n)
  157.    )
  158.    (if (= 1 ch)
  159.      (mapcar '(lambda (x) (vla-put-layer x lay))
  160.        (append obj1 obj2)
  161.      )
  162.    )
  163.        )
  164.     )
  165.      (dcl_Form_close xty_offset_Form1)
  166.   )
  167.   (princ)
  168. )







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

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-11-13 18:29:25 | 显示全部楼层
可以定义 Cancel 事件关闭 Modeless(当鼠标在ODCL界面时),鼠标离开后自己随便定义了

form show 以后,一个是保持焦点,这样鼠标是在 界面区,另外可以用 dcl_GetMouseCoords 获取鼠标坐标后和 界面位置比较判断鼠标在不在

点评

谢谢您的指导,我在鼠标离开时,是通过grread函数返回值判断我键盘鼠标的输入,然后dcl_Form_close,但是关不掉啊  详情 回复 发表于 2014-11-13 18:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-13 18:36:02 | 显示全部楼层
st788796 发表于 2014-11-13 18:29
可以定义 Cancel 事件关闭 Modeless(当鼠标在ODCL界面时),鼠标离开后自己随便定义了

form show 以后 ...

谢谢您的指导,我在鼠标离开时,是通过grread函数返回值判断我键盘鼠标的输入,然后dcl_Form_close,但是关不掉啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-13 18:51:21 | 显示全部楼层
修改了一下,除了ESC不能关闭外,其它能关闭,但是还有个问题,第一次执行的时候,我的鼠标必须到对话框上去晃一下,再将鼠标移出对话框时,才能执行MouseMovedOff,这是为何呢?谢谢
  1. ;;;by gu_xl http://gyh060707.blog.sohu.com/
  2. (defun gxl-AutoLoadODclArx (/ loaded fn v fnn)
  3.   (if (not dcl_getversionex)
  4.     (VL-CATCH-ALL-APPLY 'vl-cmdf (list "opendcl"))
  5.   )
  6.   (if (not dcl_getversionex)
  7.     (cond
  8.       ((= "16" (setq v (itoa (atoi (getvar 'acadver)))))
  9.        (if
  10.          (setq fnn (findfile (setq fn (strcat "opendcl." v ".arx"))))
  11.           (setq loaded (arxload fnn "1"))
  12.           (setq loaded "2")
  13.        )
  14.       )
  15.       ((or (= "17" v) (= "18" v) (= "19" v))
  16.        (if (= "x86" (getenv "PROCESSOR_ARCHITECTURE"))
  17.          (if (setq fnn
  18.                     (findfile (setq fn (strcat "opendcl." v ".arx")))
  19.              )
  20.            (setq loaded (arxload fnn "1"))
  21.            (setq loaded "2")
  22.          )
  23.          (if (setq fnn
  24.                     (findfile (setq fn (strcat "opendcl." v "x64.arx")))
  25.              )
  26.            (setq loaded
  27.                   (arxload fnn
  28.                            "1"
  29.                   )
  30.            )
  31.            (setq loaded "2")
  32.          )
  33.        )
  34.       )
  35.       (t (Setq loaded "2"))
  36.     )
  37.     (setq loaded "3") ;_ 已加载
  38.   )
  39.   (if (= "1" loaded)
  40.     (progn
  41.       (princ (strcat fn "加载失败!程序将退出!"))
  42.       (exit)
  43.     )
  44.     (if        (= "2" loaded)
  45.       (progn
  46.         (princ
  47.           (strcat "未找到对应的"" fn ""文件!程序将退出!")
  48.         )
  49.         (exit)
  50.       )
  51.     )
  52.   )
  53.   loaded
  54. )
  55. ;;;by gu_xl http://gyh060707.blog.sohu.com/
  56. (defun gxl-Load_ODCL_Project
  57.        (projname reload password alias / bytes rtype Projects)
  58.   (cond
  59.     ((null dcl_project_import)
  60.      (princ "需OpenDCL 5.0 以上版本支持.\n")
  61.      nil
  62.     )
  63.     ((and
  64.        (setq bytes (vl-get-resource projname))
  65.        (eq 'str (setq rtype (type bytes)))
  66.        (not (eq "" bytes))
  67.      )
  68.      (if reload
  69.        (dcl_project_import bytes password alias)
  70.        (if (or
  71.              (not (setq Projects (dcl_GetProjects)))
  72.              (not (member (strcase (vl-filename-base projname))
  73.                           (mapcar 'strcase Projects)
  74.                   )
  75.              )
  76.            )
  77.          (dcl_project_import bytes password alias)
  78.        )
  79.      )

  80.     )
  81.     ((dcl_project_load (findfile projname) reload alias))
  82.   )
  83. )
  84. (defun c:tt (/)
  85.   (gxl-AutoLoadODclArx)
  86.   (gxl-Load_ODCL_Project "xty_offset.odcl" t nil nil)
  87.   (dcl_Form_Show xty_offset_Form1)
  88.   (princ)
  89. )
  90. (defun c:xty_offset/Form1#OnInitialize (/ la lst)
  91.   (vlax-for la (VLA-GET-LAYERS
  92.                  (vla-get-ActiveDocument (vlax-get-acad-object))
  93.                )
  94.     (setq lst (cons (vla-get-name la) lst))
  95.   )
  96.   (dcl-Control-SetList
  97.     xty_offset/Form1/ComboBox1
  98.     lst
  99.   )
  100.   (dcl-Control-SetText
  101.     xty_offset/Form1/ComboBox1
  102.     (getvar "clayer")
  103.   )
  104.   (dcl-Control-SetText
  105.     xty_offset/Form1/TextBox1
  106.     (rtos (getvar "OFFSETDIST") 2 2)
  107.   )
  108. )
  109. (defun c:xty_offset/Form1/CheckBox3#OnClicked (Value /)
  110.   (if (= Value 1)
  111.     (dcl-Control-SetVisible xty_offset/Form1/ComboBox1 t)
  112.     (dcl-Control-SetVisible xty_offset/Form1/ComboBox1 nil)
  113.   )
  114. )
  115. (defun c:xty_offset/Form1#OnMouseMovedOff (/ code gr1 gr2)
  116.   (while
  117.     (progn (setq code (grread t 15 2)
  118.                  gr2 (cadr code)
  119.                  gr1 (car code)
  120.            )
  121.            (cond
  122.              ((or (equal code '(2 27))
  123.                   (equal code '(2 32))
  124.                   (equal code '(2 13))
  125.                   (= gr1 11)
  126.                   (= gr1 25)
  127.               )
  128.               (dcl_Form_close xty_offset_Form1)
  129.               nil
  130.              )
  131.              (t)
  132.            )
  133.     )
  134.   )
  135. )

点评

在回调函数里面,多记得用 dcl_sendstring 函数去执行你的函数,不要单独去执行你的函数。  详情 回复 发表于 2014-11-13 19:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-11-13 19:02:21 | 显示全部楼层
13808843088 发表于 2014-11-13 18:51
修改了一下,除了ESC不能关闭外,其它能关闭,但是还有个问题,第一次执行的时候,我的鼠标必须到对话框上 ...

在回调函数里面,多记得用 dcl_sendstring 函数去执行你的函数,不要单独去执行你的函数。

点评

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

使用道具 举报

 楼主| 发表于 2014-11-13 19:04:04 | 显示全部楼层
XDSoft 发表于 2014-11-13 19:02
在回调函数里面,多记得用 dcl_sendstring 函数去执行你的函数,不要单独去执行你的函数。

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-11-13 19:04:31 | 显示全部楼层
也就是说你在回调函数里面尽可能写的简单些,你想做的事都写个函数在外面定义,在回调函数里面用 (dcl_sendstring your_func) 去调用。

点评

谢谢坛主,我将代码尾部改为如下所示,命令行返回命令: tt命令: 命令: 未知命令“XTY_OFFSET”。按 F1 查看帮助。  详情 回复 发表于 2014-11-13 19:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-13 19:14:44 | 显示全部楼层
XDSoft 发表于 2014-11-13 19:04
也就是说你在回调函数里面尽可能写的简单些,你想做的事都写个函数在外面定义,在回调函数里面用 (dcl_send ...

谢谢坛主,我将代码尾部改为如下所示,命令行返回命令: tt命令:
命令: 未知命令“XTY_OFFSET”。按 F1 查看帮助。
  1. (defun c:xty_offset/Form1#OnMouseMovedOff (/)
  2. (dcl_sendstring "xty_offset\n")
  3. )
  4. (defun xty_offset(/ code gr1 gr2 obj)
  5.     (while
  6.     (progn (setq code (grread t 15 2)
  7.      gr2  (cadr code)
  8.      gr1  (car code)
  9.      )
  10.      (cond
  11.        ((or (equal code '(2 27))
  12.       (equal code '(2 32))
  13.       (equal code '(2 13))
  14.       (= gr1 11)
  15.       (= gr1 25)
  16.         )
  17.         (dcl_Form_close xty_offset_Form1)
  18.         nil
  19.        )
  20.        ((= gr1 5)
  21.         (setq obj (vlax-ename->vla-object (car (entsel))))
  22.         (vla-offset
  23.     obj
  24.     (atof(dcl-Control-GetText xty_offset/Form1/TextBox1))
  25.         )
  26.        )
  27.        (t)
  28.      )
  29.     )
  30.   )
  31.   )

点评

另外,回调函数最后最好加上一个 (princ)  详情 回复 发表于 2014-11-13 19:21
你自己在命令行执行你的函数要怎么做? 得带括号吧? dcl_sendstring就是把你要在命令行上执行的字符串发送到命令行去执行,你不给括号那不就是当命令了,没有当然报错了,所以...  详情 回复 发表于 2014-11-13 19:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-11-13 19:19:56 | 显示全部楼层
13808843088 发表于 2014-11-13 19:14
谢谢坛主,我将代码尾部改为如下所示,命令行返回命令: tt命令:
命令: 未知命令“XTY_OFFSET”。按 F1  ...

你自己在命令行执行你的函数要怎么做?

得带括号吧?

dcl_sendstring就是把你要在命令行上执行的字符串发送到命令行去执行,你不给括号那不就是当命令了,没有当然报错了,所以...

点评

刚刚在论坛上搜索了一下,大概明白了用法,我急躁了,谢谢您的指导,我再潜心研究一下  详情 回复 发表于 2014-11-13 19:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-11-13 19:21:08 | 显示全部楼层
13808843088 发表于 2014-11-13 19:14
谢谢坛主,我将代码尾部改为如下所示,命令行返回命令: tt命令:
命令: 未知命令“XTY_OFFSET”。按 F1  ...

另外,回调函数最后最好加上一个 (princ)

点评

坛主,解决不了啊,如果您方便能否提供思路一简易示例,非常感谢 非模态对话框,鼠标离开,执行命令,当键盘输入空格、ESC、回车或鼠标右键单击时关闭对话框,退出命令。 我将程序尾部改为如下所示,还是不行,还  详情 回复 发表于 2014-11-13 21:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-13 19:22:04 | 显示全部楼层
XDSoft 发表于 2014-11-13 19:19
你自己在命令行执行你的函数要怎么做?

得带括号吧?

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

使用道具 举报

 楼主| 发表于 2014-11-13 21:13:00 | 显示全部楼层
XDSoft 发表于 2014-11-13 19:21
另外,回调函数最后最好加上一个 (princ)

坛主,解决不了啊,如果您方便能否提供思路一简易示例,非常感谢
非模态对话框,鼠标离开,执行命令,当键盘输入空格、ESC、回车或鼠标右键单击时关闭对话框,退出命令。
我将程序尾部改为如下所示,还是不行,还没有前面不用dcl_sendstring 的效果好。
[code=lisp](defun c:xty_offset/Form1#OnMouseMovedOff (/)
  (dcl_sendstring "(rrt)\n")
  (princ)
)
(defun rrt (/ code gr1 gr2 obj)
  (while
    (progn (setq code (grread t 15 2)
   gr2  (cadr code)
   gr1  (car code)
    )
    (cond
      ((or (equal code '(2 27))
    (equal code '(2 32))
    (equal code '(2 13))
    (= gr1 11)
    (= gr1 25)
       )
       (dcl_Form_close xty_offset_Form1)
       nil
      )
      ((= gr1 5)
       (setq obj (vlax-ename->vla-object (car (entsel))))
       (vla-offset
  obj
  (atof (dcl-Control-GetText xty_offset/Form1/TextBox1))
       )
      )
      (t)
    )
    )
  )
)[code=lisp]

点评

设计对话框里面,别保持交点。 事件激发那地方改成1,试试。 [attachimg]11276[/attachimg]  详情 回复 发表于 2014-11-13 21:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-11-13 21:28:19 | 显示全部楼层
13808843088 发表于 2014-11-13 21:13
坛主,解决不了啊,如果您方便能否提供思路一简易示例,非常感谢
非模态对话框,鼠标离开,执行命令,当 ...

设计对话框里面,别保持交点。
事件激发那地方改成1,试试。

QQ截图20141113212746.png

点评

不行,grread根本就不返回键盘的输入,但将grread放入回调函数MouseMovedOff又可以有grread的返回值  详情 回复 发表于 2014-11-13 22:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-13 22:10:55 | 显示全部楼层
XDSoft 发表于 2014-11-13 21:28
设计对话框里面,别保持交点。
事件激发那地方改成1,试试。

不行,grread根本就不返回键盘的输入,但将grread放入回调函数MouseMovedOff又可以有grread的返回值

点评

你程序想做什么? 为什么要用GRREAD? 另外,再贴ODCL代码,把你的ODCL文件也一起传上来,方便看。  详情 回复 发表于 2014-11-13 22:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-11-13 22:30:04 | 显示全部楼层
13808843088 发表于 2014-11-13 22:10
不行,grread根本就不返回键盘的输入,但将grread放入回调函数MouseMovedOff又可以有grread的返回值

你程序想做什么? 为什么要用GRREAD?

另外,再贴ODCL代码,把你的ODCL文件也一起传上来,方便看。

点评

上面是文件,麻烦您了  详情 回复 发表于 2014-11-13 22:49
我的odcl文件贴到一楼底部了,就是想在需要结束命令的时候不用将鼠标移动到对话框处关闭非模态对话框,直接右键或回车就可关闭  详情 回复 发表于 2014-11-13 22:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-10 17:28 , Processed in 0.533813 second(s), 81 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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