某些条件的问题
大家好,我正在努力做到这一点:
-提示用户浏览特定文件夹(例如,在服务器上共享)
-如果按了escape,或以某种方式取消了命令,则什么也不做,只对“未更改”发出警报。
-如果选择了一个文件夹,则使用结果使其成为新的PrinterStyleSheerDir。
-将当前PrinterStyleSheetDir中的所有文件复制到新文件,并将新文件设置为活动文件。
这是我在互联网上得到很多帮助后编写的代码。
(defun browsefolder (title / shlobj folder fldobj); outval
; If outval is localize it is not working therefore after;
(vl-load-com)
(setq
shlobj (vla-getinterfaceobject
(vlax-get-acad-object)
"Shell.Application"
)
folder (vlax-invoke-method shlobj 'browseforfolder 0 title 0)
)
(vlax-release-object shlobj)
(if folder
(progn
(setq
fldobj (vlax-get-property folder 'self)
outval (vlax-get-property fldobj 'path)
)
(vlax-release-object folder)
(vlax-release-object fldobj)
outval
)
)
)
(browsefolder "Select shared folder")
; until here I have no trouble
(if
(not (= outval nil))
(
(setq cPrinterStyleSheetDir
(strcat (getenv "PrinterStyleSheetDir") "\\")
)
(foreach file (vl-directory-files cPrinterStyleSheetDir "*.*" 1)
(vl-file-copy
(strcat cPrinterStyleSheetDir file)
(strcat outval file)
)
)
(princ)
(setenv "PrinterStyleSheetDir" outval)
); end if not nil
(Alert "No folder selected - nothing changed")
); end if
(princ)
这和if条件有关。。。如果我没有选择文件夹(转义或取消),那么没有什么问题。
如果我确实选择了一个文件夹,那么即使使用了该文件夹,我仍然会收到2个错误。有人能帮我把这段代码写得更清楚吗?
我的意思是,它确实有效,但有一些令人讨厌的副作用。
Tnx准备就绪。 哦,是的,我有一些错误:
数字1:
; 错误:错误
参数类型:stringp nil
2号:
呵呵。。。无法获取它。。。
我是舒尔,如果我用所有括号删除if语句,效果会更好。
只有我需要做if语句,以防没有选择文件夹。
Pff。。。 也许是这样的:
(defun browsefolder (title / shlobj folder fldobj outval)
(vl-load-com)
(setq shlobj (vla-getinterfaceobject
(vlax-get-acad-object) "Shell.Application")
folder (vlax-invoke-method shlobj 'browseforfolder 0 title 0))
(vlax-release-object shlobj)
(if folder
(progn
(setq fldobj (vlax-get-property folder 'self)
outval (vlax-get-property fldobj 'path))
(vlax-release-object folder)
(vlax-release-object fldobj)
outval)))
(if (setq folder (browsefolder "Select shared folder"))
(progn
(setq cPrinterStyleSheetDir
(strcat (getenv "PrinterStyleSheetDir") "\\"))
(foreach file (vl-directory-files cPrinterStyleSheetDir "*.*" 1)
(vl-file-copy
(strcat cPrinterStyleSheetDir file) (strcat outval file)))
(setenv "PrinterStyleSheetDir" outval))
(Alert "No folder selected - nothing changed"))
(princ)
browsefolder函数的返回为outval,因此您可以在IF语句中对此进行测试。我建议你相信browsefolder函数的作者(如果不是你的话)。
李 马可,
我建议您阅读以下内容:
http://www.cadtutor.net/forum/showpost.php?p=173196&postcount=10
http://www.cadtutor.net/forum/showpost.php?p=240943&postcount=2
http://www.cadtutor.net/forum/showpost.php?p=273108&postcount=12 @MarcoW,也要注意使用PROGN语句来分组if/else操作。
应该是:
(if (not (= outval nil))
(progn
(setq cPrinterStyleSheetDir
而不是:
(if (not (= outval nil))
(
(setq cPrinterStyleSheetDir
当做 Msasu,我喜欢你的头像,你可能会喜欢这个帖子
不需要(not(=…)检查。
(if outval
(setq cPrinterStyleSheetDir 啊,我得到了错误回来(我没有作出outval本地):
; 错误:错误函数:“C:\”
(如果选择C:\驱动器)
@李:
谢谢你的回复,我会尽快尝试你的代码。
如果我知道作者是谁,我会相信他。如果需要的话,我通常会这样做。
但是好的,我已经搜索了我的IE浏览历史,这是我从中获得信息的原始线程:
http://forums.augi.com/archive/index.php/t-53632.html
正如我所说,Outval不需要是全局的,您可以只测试子函数的返回。 @李
我知道不本地化outval是不对的。但我找不到我的解决方案,所以我尝试了一切。。。你的评论我不太清楚。但接下来的赞扬是。。。我现在明白了。
谢谢你的链接:我知道它们,我时不时地读它们。但由于“编程不够”,我一直在失去这些东西。但是我应该知道progn的声明,那是一个错误,我一定是亲眼看到的。
@MSASU公司
正如对李所说:是的,节目。。。当然我本应该知道的,但我完全错过了。
@Alanjt公司
是的,谢谢。
页:
[1]
2