明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1905|回复: 7

[求助]:[0403]程序连续执行问题

[复制链接]
发表于 2006-4-3 08:30:00 | 显示全部楼层 |阅读模式

[求助]:[0403]程序连续执行问题

我将程序用dcl做成一个表单
并将程序连结在其中,
但发现到每次如果要执行前次执行的程序,
都需要再呼叫一次选单,
不知道有何方法可以改进呢?
让我可以在前次执行之后,
可进行前次执行中的命令程序.
烦请各位高手帮忙解答一下~
谢谢!!!

附上程序内容:
;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
dcl程序内容:
.....
(setq dcl_id(load_dialog "TSLSPDCL"))
(new_dialog "LSPDCL1" dcl_id)
(action_tile "k1" "(done_dialog 1)")
.....
(cond
((= dd 1)(c:lspdcl0101))
.....

(defun c:lspdcl0101 ()
(load "C:/lisp/LSPALL.lsp")
(cOK001)
(prin1))

;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
LSPALL.lsp - lsp程序内容:
defun cOK001 ()
(setq char (getstring "\n请输入要选取的文字:")
      ss   (ssget (list (cons 0 "TEXT") (cons 1 char)))
)
(prin1))

发表于 2006-4-4 22:09:00 | 显示全部楼层
dcl内容在哪儿呢?怎么全是LISP程序呀?
 楼主| 发表于 2006-4-4 23:09:00 | 显示全部楼层

不好意思
小弟没讲清楚来,
用一个流程的图面来说明一下

小弟希望的是
将我手边这个程序改写成可以在第一次执行程序中的副程序后,
可以在第2次执行时,直接执行上次执行过的副程序.


如:
第1次 : 呼叫主程序 -> 副程序 c -> 副程序 c2 
第2次 : 没有输入选项,则直接执行 "副程序 c2", 若有选取则执行选取的项目.

如有需要则选取另一副程序来执行.
有办法做到吗?


烦请各位高手帮忙解答一下~
谢谢!!!



原始的dcl主程序
(defun c:DCLCODE ()
(setq dcl_id(load_dialog "TSLSPDCL"))
(new_dialog "TSLSPDCL" dcl_id)
(action_tile "k1" "(done_dialog 1)")
(action_tile "k2" "(done_dialog 2)")
(setq dd(start_dialog))

(cond
((= dd 1)(c:lspdcl01))
((= dd 2)(c:lspdcl02))
(t (alert "NO ACTION !"))
)nil)

 楼主| 发表于 2006-4-5 13:13:00 | 显示全部楼层

肚Ωン

 

本帖子中包含更多资源

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

x
发表于 2006-4-5 13:30:00 | 显示全部楼层

第一次运行时要输入什么选项,你把它记下来不就行了,你没有完全说清楚,我好像也不是很明白,要是想保留前面的操作,可以用全局变量,再或是图形词典

 楼主| 发表于 2006-4-6 08:03:00 | 显示全部楼层

4楼的图面是流程

例如:
第1次 : 呼叫主程序 -> 副程序 c -> 副程序 c2 
第2次 : 没有输入选项,则直接执行 "副程序 c2", 若有选取则执行选取的项目.

如有需要则选取另一副程序来执行.
有办法做到吗?

 楼主| 发表于 2006-4-14 08:12:00 | 显示全部楼层

请问该怎样将程序执行时,控制按键方式的不同,產生不同的结果呢?

exp:
情况一
command: ee => (= dd 1) c:lspdcl01 -> (= dd 2) c:lspdcl0102
选取 c:lspdcl01 后执行 c:lspdcl0102
command: ee => (= dd 5) NO ACTION !
按下任意键除空白键外,则出现 NO ACTION ! 讯息

另外情况二
command: ee => (= dd 1) c:lspdcl01 -> (= dd 2) c:lspdcl0102
选取 c:lspdcl01 后执行 c:lspdcl0102
command: ee => "按下空白键" -> (= dd 2) c:lspdcl0102
按下空白键则执行程序中的 c:lspdcl0102 此处随上次执行的不同而不同~

以下为程序内容:
;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;;; ee.lsp
(defun c:ee ()
(setq dcl_id(load_dialog "ee"))
(new_dialog "ee" dcl_id)
;(setq dd 7)
(while
(/= 5 dd)
(action_tile "k1" "(done_dialog 1)")
(action_tile "k2" "(done_dialog 2)")
(action_tile "k3" "(done_dialog 3)")
(action_tile "k4" "(done_dialog 4)")
(action_tile "cancel" "(done_dialog 5)")
(setq dd (start_dialog))

(cond
((= dd 1)(c:lspdcl01))
((= dd 2)(c:lspdcl02))
((= dd 3)(c:lspdcl03))
((= dd 4)(c:lspdcl04))
((= dd 5)(alert "NO ACTION !"))
); end while
(unload_dialog dcl_id)
) nil )

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;LISP-lspdcl01
;########################################################################
(defun c:lspdcl01 ()
(setq dcl_id(load_dialog "ee"))
(new_dialog "LSPDCL1" dcl_id)
(action_tile "k1" "(done_dialog 1)")
(action_tile "k2" "(done_dialog 2)")
(setq dd (start_dialog))
(cond
((= dd 1)(c:lspdcl0101))
((= dd 2)(c:lspdcl0102))
(t (alert "NO ACTION !"))
))
;########################################################################
(defun c:lspdcl0101 ()
(prompt "\n **<lspdcl0101>**")
(prin1))

(defun c:lspdcl0102 ()
(prompt "\n **<lspdcl0102>**")
(prin1))

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;LISP-lspdcl02-02.
;########################################################################
(defun c:lspdcl02 ()
(setq dcl_id(load_dialog "ee"))
(new_dialog "LSPDCL2" dcl_id)
(action_tile "k1" "(done_dialog 1)")
(action_tile "k2" "(done_dialog 2)")
(setq dd (start_dialog))
(cond
((= dd 1)(c:lspdcl0201))
((= dd 2)(c:lspdcl0202))
(t (alert "NO ACTION !"))
))
;########################################################################
(defun c:lspdcl0201 ()
(prompt "\n **<lspdcl0201>**")
(prin1))

(defun c:lspdcl0202 ()
(prompt "\n **<lspdcl0202>**")
(prin1))

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;LISP-lspdcl03-03.
;########################################################################
(defun c:lspdcl03 ()
(setq dcl_id(load_dialog "ee"))
(new_dialog "LSPDCL3" dcl_id)
(action_tile "k1" "(done_dialog 1)")
(action_tile "k2" "(done_dialog 2)")
(setq dd (start_dialog))
(cond
((= dd 1)(c:lspdcl0301))
((= dd 2)(c:lspdcl0302))
(t (alert "NO ACTION !"))
))
;########################################################################
(defun c:lspdcl0301 ()
(prompt "\n **<lspdcl0301>**")
(prin1))

(defun c:lspdcl0302 ()
(prompt "\n **<lspdcl0302>**")
(prin1))

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;LISP-lspdcl04-04.
;########################################################################
(defun c:lspdcl04 ()
(setq dcl_id(load_dialog "ee"))
(new_dialog "LSPDCL4" dcl_id)
(action_tile "k1" "(done_dialog 1)")
(action_tile "k2" "(done_dialog 2)")
(setq dd (start_dialog))
(cond
((= dd 1)(c:lspdcl0401))
((= dd 2)(c:lspdcl0402))
(t (alert "NO ACTION !"))
))
;########################################################################
(defun c:lspdcl0401 ()
(prompt "\n **<lspdcl0401>**")
(prin1))

(defun c:lspdcl0402 ()
(prompt "\n **<lspdcl0402>**")
(prin1))

;;;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//ee.dcl
ee :dialog {
    label="function";
    :row{
        :column{
              :button{label="01.function";width="5";key="k1";}
              :button{label="02.function";width="5";key="k2";}
              }
        :column{
              :button{label="03.function";width="5";key="k3";}
              :button{label="04.function";width="5";key="k4";}
              }
        }
       spacer_1;
       ok_cancel_help;
                 }

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//01.function
//########################################################################
LSPDCL1 :dialog {
    label="01.function";
    :row{
        :column{
              :button{label="01.function-101";width="5";key="k1";}
               }
        :column{
              :button{label="02.function-102";width="5";key="k2";}
               }
        }
       spacer_1;
       ok_cancel_help;
                 }

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//02.function
//########################################################################
LSPDCL2 :dialog {
    label="02.function";
    :row{
        :column{
              :button{label="01.function-201";width="5";key="k1";}
               }
        :column{
              :button{label="02.function-202";width="5";key="k2";}
               }
        }
       spacer_1;
       ok_cancel_help;
                 }

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//03.function
//########################################################################
LSPDCL3 :dialog {
    label="03.function";
    :row{
        :column{
              :button{label="01.function-301";width="5";key="k1";}
               }
        :column{
              :button{label="02.function-302";width="5";key="k2";}
               }
        }
       spacer_1;
       ok_cancel_help;
                 }

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//04.function
//########################################################################
LSPDCL4 :dialog {
    label="04.function";
    :row{
        :column{
              :button{label="01.function-401";width="5";key="k1";}
               }
        :column{
              :button{label="02.function";width="5";key="k2";}
               }
        }
       spacer_1;
       ok_cancel_help;
                 }
;;;###############################

发表于 2006-4-17 08:04:00 | 显示全部楼层

;;利用SendCommand方法即可达到要求

从 VB 或 VBA 应用程式传送指令字串到文件中供处理。

信号

object.SendCommand(Command)

Object Document
这个方法适用的物件。
Command 字串;只可输入
传送到文件的指令。

说明

这个方法可处理任何 AutoCAD 指令行功能,包括 LISP 表示式在内。
如果指定的图面不是作用中,将成为作用中。
这个方法通常是同步的。不过,如果这个方法传送的指令需要任何使用者互动(例如,在萤幕上点选一个点),则这个方法在使用者开始输入时将立即返回。指令接著将以非同步继续处理。
从事件处理程式呼叫这个方法时,它会以非同步方式处理。
您绝对不可以使用这个方法来发出可以使用 ActiveX 方法的指令。例如,请不要使用 SendCommand "VBALOAD "。请改用 LoadDVB 方法。

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-29 17:37 , Processed in 0.160725 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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