找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2189|回复: 30

[每日一码] ChaosWords文字乱码

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2016-9-1 14:05:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 /db_自贡黄明儒_ 于 2016-9-1 14:06 编辑

今天整理了一下当年发在明经的“ChaosWords文字乱码”
  1. ;;***********************乱码解决方案  自贡黄明儒 2013年2月4日
  2. (defun ChaosWords (/ CanSuccessOpen ChaosWords1MJ:Name MJ:DocsList1 OpenFileDo NotOpenFileDo ChaosDCL DWGFILES DWGPATH FILELST NOTOPENFILE OPENFILELST RETURN#)
  3.   ;;1 检查文件能否打开
  4.   (defun CanSuccessOpen        (DwgName / ACADAPP CATCHIT DBXDOC)
  5.     (setq AcadApp (vlax-get-acad-object)
  6.           dbxDoc  (vla-GetInterfaceObject
  7.                     AcadApp
  8.                     (GetObjectDBXVer)
  9.                   )
  10.     )
  11.     (setq catchit (vl-catch-all-apply 'vla-open (list dbxDoc DwgName)))
  12.     (cond (dbxDoc (vlax-release-object dbxDoc)))            ;关闭文档
  13.     (cond (AcadApp (vlax-release-object AcadApp)))
  14.     (vl-catch-all-error-p catchit)
  15.   )

  16.   ;;2 文字替代(解决文字乱码用)
  17.   (defun ChaosWords1 (doc / BIGFILE FONTFILE TXTSTYLES)
  18.     (setq txtstyles (vla-get-textstyles doc))
  19.     (vlax-for txtstyle txtstyles
  20.       (setq fontfile (vla-get-fontfile txtstyle))
  21.       (cond ((not (findfile fontfile)) (vla-put-fontfile txtstyle "gbenor.shx")))
  22.       (setq bigfile (vla-get-bigfontfile txtstyle))
  23.       (cond ((not (findfile bigfile)) (vla-put-bigfontfile txtstyle "GBCBIG.shx")))
  24.     )
  25.   )

  26.   ;;3 对象名称
  27.   ;; 示例 (MJ:Name *ACAD*) returns "AutoCAD"
  28.   ;; 示例 (MJ:Name *MS*)返回"*Model_Space"
  29.   (defun MJ:Name (obj)
  30.     (if        (vlax-property-available-p obj 'Name)
  31.       (vlax-get-property obj 'Name)
  32.       "<NONE_NAME>"
  33.     )
  34.   )

  35.   ;;4 (打开文件 未打开文件)列表
  36.   ;;示例(car (MJ:DocsList1 DwgFileLst))取得列表文件中打开的文件列表
  37.   (defun MJ:DocsList1 (DwgFileLst / OPENFILELST)
  38.     (list (vl-remove-if 'VL-FILE-SYSTIME DwgFileLst)
  39.           (vl-remove-if-not 'VL-FILE-SYSTIME DwgFileLst)
  40.     )
  41.   )

  42.   ;;5.1 列表中的文件如果已经打开
  43.   (defun OpenFileDo (OpenFileLst / FILEPATH)
  44.     (vlax-for each (vla-get-Documents *ACAD*)
  45.       (setq FilePath (strcat (vlax-get-property each 'Path) "\\" (MJ:Name each)))
  46.       (cond ((member (strcase FilePath) OpenFileLst)
  47.              (ChaosWords1 each)
  48.              (vla-regen each acActiveViewport)
  49.             )
  50.       )
  51.     )
  52.   )
  53.   ;;5.2 非打开的文件列表消除乱码
  54.   (defun NotOpenFileDo (NotOpenFile / DOCOBJ DWGNAME INDEX)
  55.     (repeat (setq Index (length NotOpenFile))
  56.       (setq DwgName (nth (setq Index (1- Index)) NotOpenFile))
  57.       (cond ((not (CanSuccessOpen DwgName))
  58.              (setq DocObj (vla-open (vla-get-Documents *ACAD*) DwgName))
  59.              (ChaosWords1 DocObj)
  60.              (vla-saveas DocObj DwgName)
  61.              (vla-close DocObj :vlax-true)
  62.             )
  63.       )
  64.     )
  65.     (cond (DocObj (vlax-release-object DocObj)))
  66.   )

  67.   ;;7 对话框 return#
  68.   (defun ChaosDCL (/ DCLID FN FNAME LIN)
  69.     (setq fname (vl-filename-mktemp nil nil ".dcl"))
  70.     (setq fn (open fname "w"))
  71.     (write-line "ChaosWords : dialog {" fn)
  72.     (write-line "label=\"*****[乱码解决]****自贡黄明儒\";" fn)
  73.     (write-line ":column{" fn)
  74.     (write-line " :button{label=\"仅仅当前激活文件(&A)\";key=\"button1\";}" fn)
  75.     (write-line " :button{label=\"打开的所有文件   (&B)\";key=\"button2\";}" fn)
  76.     (write-line
  77.       " :button{label=\"当前文件所在目录下所有文件   (&C)\";key=\"button3\";}"
  78.       fn
  79.     )
  80.     (write-line
  81.       " :button {label = \"文件所在及其子目录下所有文件(&D)\";key = \"button4\";is_default=true;}"
  82.       fn
  83.     )
  84.     (write-line
  85.       " :button {label = \"取    消(&E)\";key = \"but_Cancel\";is_cancel = true;}"
  86.       fn
  87.     )
  88.     (write-line " } " fn)
  89.     (write-line "}" fn)
  90.     (close fn)
  91.     (setq fn (open fname "r"))
  92.     (setq dclid (load_dialog fname))
  93.     (new_dialog "ChaosWords" dclid)
  94.     (action_tile "button1" "(done_dialog 1)")
  95.     (action_tile "button2" "(done_dialog 2)")
  96.     (action_tile "button3" "(done_dialog 3)")
  97.     (action_tile "button4" "(done_dialog 4)")
  98.     (action_tile "but_Cancel" "(done_dialog 0)")
  99.     (setq return# (start_dialog))
  100.     (unload_dialog dclid)
  101.     (close fn)
  102.     (vl-file-delete fname)
  103.   )

  104.   ;;8 本程序主程序
  105.   (or *ACAD* (setq *ACAD* (vlax-get-acad-object)))
  106.   (or *DOC* (setq *DOC* (vla-get-ActiveDocument *ACAD*)))
  107.   (or *DOCS* (setq *DOCS* (vla-get-Documents *ACAD*)))
  108.   (ChaosDCL)
  109.   (cond
  110.     ((equal return# 1)                                            ;仅仅当前激活文档消除乱码
  111.      (ChaosWords1 *DOC*)
  112.      (vla-regen *DOC* acActiveViewport)
  113.     )
  114.     ((equal return# 2)                                            ;所有的打开文件消除乱码
  115.      (vlax-for each *DOCS* (ChaosWords1 each) (vla-regen each acActiveViewport))
  116.     )
  117.     ((or (equal return# 3) (equal return# 4))
  118.      (setq dwgPath (strcat (vlax-get-property *DOC* 'Path) "\\"))
  119.      (cond ((equal return# 3) (setq dwgfiles (GetAllSpecFilesInFolder dwgPath "*.dwg")))
  120.            ((equal return# 4) (setq dwgfiles (GetAllSpecFilesInFolders dwgPath "*.dwg")))
  121.      )
  122.      (setq filelst (MJ:DocsList1 dwgfiles))
  123.      (setq OpenFileLst (car filelst))
  124.      (setq NotOpenFile (cadr filelst))
  125.      (cond (OpenFileLst
  126.             (setq OpenFileLst (mapcar 'strcase OpenFileLst))
  127.             (OpenFileDo OpenFileLst)
  128.            )
  129.      )
  130.      (cond (NotOpenFile (NotOpenFileDo NotOpenFile)))
  131.     )
  132.   )
  133.   (princ)
  134. )
  135. ;;***********************乱码解决方案  自贡黄明儒 2013年2月4日

游客,如果您要查看本帖隐藏内容请回复

ChaosWords文字乱码

ChaosWords文字乱码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 10个

财富等级: 恭喜发财

发表于 2016-9-1 14:13:23 | 显示全部楼层
回复学习,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5583个

财富等级: 富甲天下

发表于 2016-9-1 15:56:24 | 显示全部楼层
好好学习一下,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5583个

财富等级: 富甲天下

发表于 2016-9-1 16:07:09 | 显示全部楼层
缺少函数:GetObjectDBXVer

点评

你不要击后面两个选项,不就不缺了吗?  发表于 2016-9-1 16:18
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2016-9-1 16:11:09 | 显示全部楼层
HLCAD 发表于 2016-9-1 16:07
缺少函数:GetObjectDBXVer

  1. (defun GetObjectDBXVer (/ VERSION)
  2.   (if (>= (setq VERSION (atoi (getvar "acadver"))) 16)
  3.     (strcat "ObjectDBX.AxDbDocument." (itoa VERSION))
  4.   )
  5. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

发表于 2016-9-1 23:49:59 | 显示全部楼层
黄大,又更新了什么?

点评

没更新,只是整理了一下  发表于 2016-9-2 08:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-9-2 11:50:30 | 显示全部楼层
不知道是不是真能解决乱码问题..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8727个

财富等级: 富甲天下

发表于 2016-9-2 15:33:24 | 显示全部楼层
回复学习一下,谢谢黃老師!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 814个

财富等级: 财运亨通

发表于 2017-6-15 07:26:46 | 显示全部楼层
学习大做,支持
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 475个

财富等级: 日进斗金

发表于 2017-6-16 10:51:16 | 显示全部楼层
这个功能不错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-5-17 17:25:39 | 显示全部楼层
好好学习一下,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2018-5-18 07:07:45 | 显示全部楼层
回复看源码!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 7个

财富等级: 恭喜发财

发表于 2018-5-18 10:13:57 | 显示全部楼层
谢谢黄大师分享!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-9-29 15:00:21 | 显示全部楼层
黄ChaosWords文字乱码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2019-3-27 16:35:32 | 显示全部楼层
感谢分享,下载来试试看能否解决问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-19 09:43 , Processed in 0.464172 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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