乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 24|回复: 11

[编程交流] 某些条件的问题

[复制链接]

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 11:30:21 | 显示全部楼层 |阅读模式
大家好,
 
我正在努力做到这一点:
 
-提示用户浏览特定文件夹(例如,在服务器上共享)
-如果按了escape,或以某种方式取消了命令,则什么也不做,只对“未更改”发出警报。
-如果选择了一个文件夹,则使用结果使其成为新的PrinterStyleSheerDir。
-将当前PrinterStyleSheetDir中的所有文件复制到新文件,并将新文件设置为活动文件。
 
这是我在互联网上得到很多帮助后编写的代码。
 
 
  1. (defun browsefolder (title / shlobj folder fldobj); [color=red]outval[/color]
  2. ; If outval is localize it is not working therefore after;
  3. (vl-load-com)
  4. (setq
  5.    shlobj (vla-getinterfaceobject
  6.      (vlax-get-acad-object)
  7.      "Shell.Application"
  8.    )
  9.    folder (vlax-invoke-method shlobj 'browseforfolder 0 title 0)
  10. )
  11. (vlax-release-object shlobj)
  12. (if folder
  13.    (progn
  14.      (setq
  15. fldobj (vlax-get-property folder 'self)
  16. outval (vlax-get-property fldobj 'path)
  17.      )
  18.      (vlax-release-object folder)
  19.      (vlax-release-object fldobj)
  20.      outval
  21.    )
  22. )
  23. )
  24. (browsefolder "Select shared folder")
  25. [color=red]; until here I have no trouble[/color]
  26. (if
  27. (not (= outval nil))
  28. (
  29. (setq cPrinterStyleSheetDir
  30.       (strcat (getenv "PrinterStyleSheetDir") "\")
  31. )
  32. (foreach file (vl-directory-files cPrinterStyleSheetDir "*.*" 1)
  33. (vl-file-copy
  34.    (strcat cPrinterStyleSheetDir file)
  35.    (strcat outval file)
  36. )
  37. )
  38. (princ)
  39. (setenv "PrinterStyleSheetDir" outval)
  40. ); end if not nil
  41. (Alert "No folder selected - nothing changed")
  42. ); end if
  43. (princ)

 
这和if条件有关。。。如果我没有选择文件夹(转义或取消),那么没有什么问题。
 
如果我确实选择了一个文件夹,那么即使使用了该文件夹,我仍然会收到2个错误。有人能帮我把这段代码写得更清楚吗?
我的意思是,它确实有效,但有一些令人讨厌的副作用。
 
Tnx准备就绪。
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 11:36:35 | 显示全部楼层
哦,是的,我有一些错误:
 
数字1:
; 错误:错误
参数类型:stringp nil
 
2号:
呵呵。。。无法获取它。。。
 
我是舒尔,如果我用所有括号删除if语句,效果会更好。
只有我需要做if语句,以防没有选择文件夹。
Pff。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:45:12 | 显示全部楼层
也许是这样的:
 
  1. (defun browsefolder (title / shlobj folder fldobj outval)
  2. (vl-load-com)
  3. (setq shlobj (vla-getinterfaceobject
  4.                 (vlax-get-acad-object) "Shell.Application")
  5.        folder (vlax-invoke-method shlobj 'browseforfolder 0 title 0))
  6. (vlax-release-object shlobj)
  7. (if folder
  8.    (progn
  9.      (setq fldobj (vlax-get-property folder 'self)
  10.            outval (vlax-get-property fldobj 'path))
  11.      
  12.      (vlax-release-object folder)
  13.      (vlax-release-object fldobj)
  14.      outval)))
  15. (if (setq folder (browsefolder "Select shared folder"))
  16. (progn
  17.    (setq cPrinterStyleSheetDir
  18.           (strcat (getenv "PrinterStyleSheetDir") "\"))
  19.    (foreach file (vl-directory-files cPrinterStyleSheetDir "*.*" 1)
  20.      (vl-file-copy
  21.        (strcat cPrinterStyleSheetDir file) (strcat outval file)))
  22.    (setenv "PrinterStyleSheetDir" outval))
  23. (Alert "No folder selected - nothing changed"))
  24. (princ)

 
browsefolder函数的返回为outval,因此您可以在IF语句中对此进行测试。我建议你相信browsefolder函数的作者(如果不是你的话)。
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:47:37 | 显示全部楼层
马可,
 
我建议您阅读以下内容:
 
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
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 11:57:33 | 显示全部楼层
@MarcoW,也要注意使用PROGN语句来分组if/else操作。
 
应该是:
  1. (if (not (= outval nil))
  2. (progn
  3. (setq cPrinterStyleSheetDir

 
而不是:
  1. (if (not (= outval nil))
  2. (
  3. (setq cPrinterStyleSheetDir

 
当做
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:01:52 | 显示全部楼层
Msasu,我喜欢你的头像,你可能会喜欢这个帖子
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 12:08:17 | 显示全部楼层
 
不需要(not(=…)检查。
 
  1. (if outval  
  2. (setq cPrinterStyleSheetDir
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 12:12:34 | 显示全部楼层
啊,我得到了错误回来(我没有作出outval本地):
 
; 错误:错误函数:“C:\”
(如果选择C:\驱动器)
 
@李:
谢谢你的回复,我会尽快尝试你的代码。
 
如果我知道作者是谁,我会相信他。如果需要的话,我通常会这样做。
 
但是好的,我已经搜索了我的IE浏览历史,这是我从中获得信息的原始线程:
http://forums.augi.com/archive/index.php/t-53632.html
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:18:25 | 显示全部楼层
 
正如我所说,Outval不需要是全局的,您可以只测试子函数的返回。
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
295
发表于 2022-7-6 12:19:48 | 显示全部楼层
@李
我知道不本地化outval是不对的。但我找不到我的解决方案,所以我尝试了一切。。。你的评论我不太清楚。但接下来的赞扬是。。。我现在明白了。
谢谢你的链接:我知道它们,我时不时地读它们。但由于“编程不够”,我一直在失去这些东西。但是我应该知道progn的声明,那是一个错误,我一定是亲眼看到的。
 
@MSASU公司
正如对李所说:是的,节目。。。当然我本应该知道的,但我完全错过了。
 
@Alanjt公司
是的,谢谢。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 02:13 , Processed in 0.600490 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表