乐筑天下

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

[编程交流] 是否消息

[复制链接]

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:07:09 | 显示全部楼层
我很快就会发布一个getval。dcl不工作,您在lisp中提供标题、方框宽度等,它返回一个值,我将其用作全局请求定义。对于我编写的任何lisp,请按任意键选择“是”,除非这是“否”。
 
优点是调用lisp只有3行,所有加载的dcl代码都在Getval中。lsp使编写新的lisp变得更容易
回复

使用道具 举报

0

主题

12

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:09:42 | 显示全部楼层
这是另一种剥猫皮的方法。如果按yes,则返回T:
 
  1. (defun IS_YES_PRESSED? (title message / vlaobj result)
  2. (vl-load-com)
  3. (vl-catch-all-apply
  4.    (function
  5.      (lambda ()
  6.        (setq vlaobj (vlax-create-object "WScript.Shell"))
  7.        (setq result (vlax-invoke-method vlaobj 'popup message 0 title 4132))
  8.      )
  9.    )
  10. )
  11. (if vlaobj (vlax-release-object vlaobj))
  12. (= result 6)
  13. )
  14. ;(IS_YES_PRESSED? "My dialogue" "Please choose ....")
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-5 18:12:26 | 显示全部楼层
 
 
 
 
相像的
 
回复

使用道具 举报

0

主题

12

帖子

4

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 18:17:59 | 显示全部楼层
有趣的如果我知道这是在李的优秀网站上,我会把它链接起来。
 
实际上,lisp是从Bricscad的免费vle扩展中改编而来的。lsp。道歉可能应该归功于此。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:18:04 | 显示全部楼层
 
谢谢你的赞美丹;虽然发现“vle extension.lsp”中的这样一个函数与我网站上发布的函数非常相似,这很有趣,但我意识到代码只有几行,但布局似乎几乎相同。很遗憾,我没有访问vle扩展的权限。lsp,但我有兴趣看一下。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:22:37 | 显示全部楼层
另一个例子
 
  1. ;calling code plus return answer
  2. (setq title "Please enter dwg number")
  3. (setq width "   edit_width = 15;")
  4. (setq limit "     edit_limit = 12;")
  5. (ah:getval title)
  6. (setq dwgname item)
  7. ;; Input  Dialog box with variable title
  8. ;; By Ah June 2012 thanks to AlanJT for source idea
  9. ;; code (ah:getval title)
  10. (defun AH:Getval (title width limit / fo)
  11. (setq fname "C://acadtemp//getval.dcl")
  12. (setq fo (open fname "w"))
  13. (write-line "ddgetval : dialog {" fo)
  14. (write-line " : row {" fo)
  15. (write-line ": edit_box {" fo)
  16. (write-line (strcat "    key = "  (chr 34) "sizze" (chr 34) ";") fo)
  17. (write-line  (strcat " label = "  (chr 34) title (chr 34) ";"  )   fo)
  18. ; these can be replaced with shorter value etc
  19. ;(write-line "     edit_width = 18;" fo)
  20. ;(write-line "     edit_limit = 15;" fo)
  21. (write-line width fo)
  22. (write-line limit fo)
  23. (write-line "   is_enabled = true;" fo)        
  24. (write-line "    }" fo)
  25. (write-line "  }" fo)
  26. (write-line "ok_cancel;}" fo)
  27. (close fo)
  28. (setq dcl_id (load_dialog  "c:\\acadtemp\\getval"))
  29. (if (not (new_dialog "ddgetval" dcl_id))
  30. (exit))
  31. (action_tile "sizze" "(setq item  $value)(done_dialog)")
  32. (mode_tile "sizze" 3)
  33. (start_dialog)
  34. ; returns the value of item
  35. )
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 18:26:40 | 显示全部楼层
我是这个论坛的新手,我知道这是一个旧线程,但我试图使用CAB发布的代码,顺便说一句,很棒,所以如果我需要启动一个新线程,我可以。
我正在尝试使用消息框,并使用IF语句触发事件,具体取决于它们是否单击Yes或No。我一定错过了什么,因为我无法使用IF语句来解释单击Yes或No。
 
最后,当用户关闭时,它会要求用户清除和审核图形(我已经有了所有编码,只需要Msgbox),所以我只使用了两个不同的命令来判断它是否正常工作。你们能告诉我我错过了什么吗。
 
谢谢
  1. ;; YesNo.lsp CAB 04.260.2008
  2. ;;  Creates a DCL file on the fly for Yes/No Prompt
  3. ;; Arguments:
  4. ;;   BoxTitle = Dialog Box Title
  5. ;;   Question = Question to be displayed
  6. ;; Sample Call (YesNo " My Yes No" "Do you like creating programs in AutoLISP?")
  7. ;;  Returns "Yes" or "No" from user or nil if the DCL failed
  8. (defun YesNo (BoxTitle Question / Dcl_Id% Result acadfn fn fid)
  9. (if
  10.    (and (or (setq fn (findfile "YesNo.dcl"))
  11.             (setq acadfn (findfile "ACAD.PAT")
  12.                   fn     (strcat (substr acadfn 1 (- (strlen acadfn) ) "YesNo.dcl")))
  13.         (setq fid (open fn "w"))
  14.    )
  15.     ;; create dcl file in same directory as ACAD.PAT  
  16.     (progn
  17.       (foreach x
  18.                (list
  19.                  "YesNo : dialog { key = "Title";"
  20.                  "  spacer;"
  21.                  (strcat "  : text { key = "Question" ; width = "
  22.                          (itoa (+ (strlen Question) 4))
  23.                          " ; alignment = centered; }")
  24.                  "  spacer;"
  25.                  "  : row { fixed_width = true; alignment = centered;"
  26.                  "    : button { key = "Yes"; label = "&Yes"; is_default = true;}"
  27.                  "    : button { key = "No"; label = "&No"; is_cancel = true;}"
  28.                  "  }"
  29.                  "}"
  30.                )
  31.         (princ x fid)
  32.         (write-line "" fid)
  33.       )
  34.       (close fid)
  35.     )
  36. )
  37. (cond
  38.    ((setq Dcl_Id% (load_dialog fn))
  39.     (new_dialog "YesNo" Dcl_Id%)
  40.     (set_tile "Title" BoxTitle)
  41.     (set_tile "Question" Question)
  42.     (action_tile "Yes" "(done_dialog 1)")
  43.     (action_tile "No" "(done_dialog 0)")
  44.     (setq Result (start_dialog))
  45.     (unload_dialog Dcl_Id%) ; Unload Dialog
  46.     (if (and Result (= Result 1)) "Yes" "No")
  47.    )
  48.    (t nil)
  49. )
  50. )
  51. (IF (yesno "Purg audit""message goes here") = yes)
  52. (command "line")
  53. (command "circle")
  54. )
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 18:28:31 | 显示全部楼层
只是我的头还不够猛。。。错误地使用了if语句。
  1. (setq reply (yesno "Purg audit""message goes here"))
  2. (IF (= reply  yes)
  3. (command "line")
  4. (command "circle")
  5. )
回复

使用道具 举报

4

主题

305

帖子

225

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
97
发表于 2022-7-5 18:32:27 | 显示全部楼层
 
 
if语句中的YES必须是字符串并与大小写匹配。您还需要完成命令语句:
  1. (if (= reply "Yes")
  2.   (command "line" pause pause "")
  3.   (command "Circle" Pause Pause)
  4. )
回复

使用道具 举报

0

主题

3

帖子

3

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 18:34:44 | 显示全部楼层
谢谢你的“是”让我们有点不同。我对更深入的Lisp函数有点陌生。
我还添加了一个检查,看看它是否是一个全新的图纸,尚未保存,否则它试图保存文件随机。我相信我们会将其添加到我们的acad2014doc中。Lisp文件,以创建一种方法,确保人们正在审核和清除图形。
最后的Lisp程序最终变成了这样:
  1. ;; YesNo.lsp CAB 04.260.2008
  2. ;;  Creates a DCL file on the fly for Yes/No Prompt
  3. ;; Arguments:
  4. ;;   BoxTitle = Dialog Box Title
  5. ;;   Question = Question to be displayed
  6. ;; Sample Call (YesNo " My Yes No" "Do you like creating programs in AutoLISP?")
  7. ;;  Returns "Yes" or "No" from user or nil if the DCL failed
  8. (defun YesNo (BoxTitle Question / Dcl_Id% Result acadfn fn fid)
  9. (if
  10.    (and (or (setq fn (findfile "YesNo.dcl"))
  11.             (setq acadfn (findfile "ACAD.PAT")
  12.                   fn     (strcat (substr acadfn 1 (- (strlen acadfn) ) "YesNo.dcl")))
  13.         (setq fid (open fn "w"))
  14.    )
  15.     ;; create dcl file in same directory as ACAD.PAT  
  16.     (progn
  17.       (foreach x
  18.                (list
  19.                  "YesNo : dialog { key = "Title";"
  20.                  "  spacer;"
  21.                  (strcat "  : text { key = "Question" ; width = "
  22.                          (itoa (+ (strlen Question) 4))
  23.                          " ; alignment = centered; }")
  24.                  "  spacer;"
  25.                  "  : row { fixed_width = true; alignment = centered;"
  26.                  "    : button { key = "Yes"; label = "&Yes"; is_default = true;}"
  27.                  "    : button { key = "No"; label = "&No"; is_cancel = true;}"
  28.                  "  }"
  29.                  "}"
  30.                )
  31.         (princ x fid)
  32.         (write-line "" fid)
  33.       )
  34.       (close fid)
  35.     )
  36. )
  37. (cond
  38.    ((setq Dcl_Id% (load_dialog fn))
  39.     (new_dialog "YesNo" Dcl_Id%)
  40.     (set_tile "Title" BoxTitle)
  41.     (set_tile "Question" Question)
  42.     (action_tile "Yes" "(done_dialog 1)")
  43.     (action_tile "No" "(done_dialog 0)")
  44.     (setq Result (start_dialog))
  45.     (unload_dialog Dcl_Id%) ; Unload Dialog
  46.     (if (and Result (= Result 1)) "Yes" "No")
  47.    )
  48.    (t nil)
  49. )
  50. )
  51. (vl-load-com)
  52. (defun Create_Close_Reactor()
  53. (if(not close:reactor)
  54.    (setq close:reactor
  55.   (vlr-editor-reactor nil
  56.     '((:vlr-beginClose . CloseReaction))))
  57.    ); end if
  58. (princ)
  59. ); end of Create_Close_Reactor
  60. (defun CloseReaction(args reac / actDoc)
  61. (if (zerop (getvar 'dwgtitled))
  62.    (null)
  63. (progn  
  64. (setq reply (yesno "Closing" "Would you like to Audit and Purge your Drawing"))
  65. (IF (= reply "Yes")
  66.    (progn
  67.    (setq actDoc(vla-get-ActiveDocument
  68.    (vlax-get-acad-object)))
  69.    (vla-ZoomExtents(vlax-get-acad-object))
  70.    (vla-AuditInfo (vla-get-ActiveDocument (vlax-get-object "AutoCAD.Application")) :Vlax-True)
  71.    (repeat 3(vla-PurgeAll actDoc))
  72.    (vla-Save actDoc)
  73.    )
  74.   (progon
  75.   (setq actDoc(vla-get-ActiveDocument
  76.   (vlax-get-acad-object)))
  77.   (vla-ZoomExtents(vlax-get-acad-object))
  78.   (vla-Save actDoc)
  79.   )
  80. )
  81. )
  82. )
  83. (princ)
  84. ); end of CloseReaction
  85. (Create_Close_Reactor)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 11:29 , Processed in 0.694557 second(s), 81 queries .

© 2020-2025 乐筑天下

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