OMEGA-ThundeR 发表于 2022-7-5 16:20:06

在逗号外调用函数

你好
 
我试图创建一段代码,其中包含一个messagebox,用于询问一个问题(是/否),该问题反过来应该设置一个可以在“main”命令中使用的值。
 
(Defun FUNCTION (reply)
(SETQ reply (ACET-UI-MESSAGE        "Content of questionbox" "Title of questionbox"
                                (+ Acet:YESNO Acet:ICONQuestion)
                )
)
)
 
就我的“功能”知识而言,这通常是在命令中定义的。即。:
 
(Defun c:command ()
(defun FUNCTION ( / a)
(do something)
)
(FUNCTION (and do something with that function))
)
 
但我有点想在以类似方式工作的多个命令中使用该函数,但不想在每个命令中添加代码行。
 
那么,我如何做以下工作?
 
(Defun FUNCTION (reply)
(SETQ reply (ACET-UI-MESSAGE        "Content of questionbox" "Title of questionbox"
                                (+ Acet:YESNO Acet:ICONQuestion)
                )
)
)

(Defun c:CallFunction1 ()
FUNCTION
)

(Defun c:CallFunction2 ()
FUNCTION
)

(Defun c:CallFunction3 ()
FUNCTION
)

Aftertouch 发表于 2022-7-5 16:42:30

应该看起来像这样。
这三个命令现在都打开了“是/否”对话框。。。
因此,在这种情况下,这三个命令没有变量。
 

(defun FUNCTION ( / )
(setq reply (ACET-UI-MESSAGE "Choose dude " "Russells Dialog" (+ Acet:YESNO Acet:ICONQuestion)))
;; Yes = 6, No = 7
(if (= reply 6)
        (progn
                (ALERT "Yep")
        )
        (progn
                (ALERT "Nope")
        )
)
)

(defun C:CallFunction1 ( / )
(FUNCTION)
(princ)
)

(defun C:CallFunction2 ( / )
(FUNCTION)
(princ)
)

(defun C:CallFunction3 ( / )
(FUNCTION)
(princ)
)

(princ)
 
要对每个命令执行不同的操作,可以如下所示:

(defun TESTCOMMAND ( number / )
(setq reply (ACET-UI-MESSAGE "Choose dude " "Russells Dialog" (+ Acet:YESNO Acet:ICONQuestion)))
;; Yes = 6, No = 7
(if (= reply 6)
        (progn
                (cond
                        ((= number 1)
                                (princ "Voorwaarden voor CallFunction1")
                        )
                        ((= number 2)
                                (princ "Voorwaarden voor CallFunction2")
                        )
                        ((= number 3)
                                (princ "Voorwaarden voor CallFunction3")
                        )
                )
        )
        (progn
                (princ "NO, annuleren.")
        )
)
)

(defun C:CallFunction1 ( / )
(TESTCOMMAND 1)
(princ)
)

(defun C:CallFunction2 ( / )
(TESTCOMMAND 2)
(princ)
)

(defun C:CallFunction3 ( / )
(TESTCOMMAND 3)
(princ)
)

(princ)

 
(测试和工作)

OMEGA-ThundeR 发表于 2022-7-5 16:54:22

在这两种情况下都会出现错误,我找不到修复它们的方法。似乎在命令部分出错了

Aftertouch 发表于 2022-7-5 17:03:14

这是我测试过的代码,效果很好。
 

(defun TESTCOMMAND ( number / )
(setq reply (ACET-UI-MESSAGE "Choose dude " "Russells Dialog" (+ Acet:YESNO Acet:ICONQuestion)))
;; Yes = 6, No = 7
(if (= reply 6)
        (progn
                (cond
                        ((= number 1)
                                (princ "Voorwaarden voor CallFunction1")
                        )
                        ((= number 2)
                                (princ "Voorwaarden voor CallFunction2")
                        )
                        ((= number 3)
                                (princ "Voorwaarden voor CallFunction3")
                        )
                )
        )
        (progn
                (princ "NO, annuleren.")
        )
)
)

(defun C:CallFunction1 ( / )
(TESTCOMMAND 1)
(princ)
)

(defun C:CallFunction2 ( / )
(TESTCOMMAND 2)
(princ)
)

(defun C:CallFunction3 ( / )
(TESTCOMMAND 3)
(princ)
)

(princ)

Roy_043 发表于 2022-7-5 17:09:39

在我看来,您应该努力实现具有以下签名的“YesNo”功能:
(YesNoDialog“Title”“message”)=>T/nil(返回值T或nil)

OMEGA-ThundeR 发表于 2022-7-5 17:20:52

现在似乎很好,真的。。。可能文字功能是问题所在。
页: [1]
查看完整版本: 在逗号外调用函数