wzg356 发表于 2023-7-22 17:42:44

20230818更老帖再进化--多行文字排版

本帖最后由 wzg356 于 2023-8-18 21:15 编辑

20230818更
;多行文字排版,删除字体、字高、字宽为统一默认+缩进行距处理
;需要"通用参数输入dcl.lsp"里的函数TYdataset 支持
(defun c:mtaa( / dl1 dl2 dl30 dl31 getdclns getinfstr mte mstr lsn).......
............

主函数已函数化,方便同学们使用扩展修改
本次更新后,扩展功能均可独立增加,即参数表中各元素可有可无nil,只是其中元素意义顺序固定的---lsp里面有详细说明
具体扩展功能见图片
运行试用不断体验更好理解
功能基本差不多了,mtext控制符太复杂,介绍的资料也不多,考虑不了那么多,正则也只董点点,有精通的高手提点意见

"通用参数输入dcl.lsp"里的函数TYdataset有些复杂,但很通用,我的程序基本全部直接使用,不重复写对话框了,具体介绍见http://bbs.mjtd.com/thread-187061-1-1.html这个帖子收币下载,这儿也收起,否则对不住老帖下载的
另外,这里也对"通用参数输入dcl.lsp"的使用实现扩展(新发现功能)-- 不退出对话框实现-类似控件名称的切换
=================老帖======
贴出的代码为多行文字删除字体、字高、字宽为统一默认----可以单独有效运行
;正则表达式字符串替换
;lst: (list(list n1 o1)(list n2 o2))
(defun Replacestr(str lst / regex)      
      (setq regex(vlax-create-object "Vbscript.RegExp")) ;引用正则表达式控件
      (vlax-put-property regex "IgnoreCase" 0) ;不忽略大小写
      (vlax-put-property regex "Global" 1) ;匹配方式,全文字匹配
      (foreach x lst
                (vlax-put-property regex "Pattern" (cadr x))
                (setq str(vlax-invoke-method regex "Replace" str (car x)));匹配替换
      )
      (vlax-release-object regex)str
)
;多行文字删除字体、字高、字宽为统一默认
(defun c:mtaa( / MTe)
      (while(and(setq MTe(Car(entsel"\n选择多行文字:")))
                        (wcmatch(Cdr(Assoc 0 (entget MTe)))"MTEXT")
                )
                (setq MTe(vlax-ename->vla-object MTe))               
                (Vlax-put MTe 'TextString
                        (Replacestr (Vlax-Get MTe 'TextString) '(
                              ("" "(\\\\F|\\\\f|\\\\H|\\\\W)(.[^;]*);");删除字体、字高、字宽
                              ("\\H0.7x;\\S$1;\\H1.4286x;" "\\\\S(.[^;]*);");恢复堆叠字高
                        ))
                )                        
      )      
)











桃花源 发表于 2023-7-25 15:45:06

本帖最后由 桃花源 于 2023-7-25 15:51 编辑

谢谢分享。有个问题想求教, ("" "(\\\\F|\\\\f|\\\\H|\\\\W)(.[^;]*)("\\H0.7x;\\S$1;\\H1.4286x;" "\\\\S(.{1,4});")中\\SS代表什么呢?我见过一些返回值,\\H \\W我了解,\\S 可能代表堆叠\\f可能是字体但是诸如 \\C\\A都代表哪些内容呢?希望得到指点。有时候大括号前面会有<>,又代表什么呢?
                           

wzg356 发表于 2023-7-25 16:03:33

桃花源 发表于 2023-7-25 15:45
谢谢分享。有个问题想求教, ("" "(\\\\F|\\\\f|\\\\H|\\\\W)(.[^;]*)("\\H0.7x;\\S$1;\\H1.4286x;" "\\\ ...

\\C颜色\\A对齐

桃花源 发表于 2023-7-25 18:41:34

wzg356 发表于 2023-7-25 16:03
\\C颜色\\A对齐

感谢您的回复

lxl217114 发表于 2023-7-22 21:09:14

大佬高产,谢谢分享原码。

hzyhzjjzh 发表于 2023-7-23 12:25:08

谢谢分享:loveliness:

p-3-ianlcc 发表于 2023-7-23 18:38:56

谢谢楼主的分享源码~
学习一下!

天天问 发表于 2023-7-23 20:44:47

感谢大佬分享

mokson 发表于 2023-7-25 08:47:32

方法值得学习借鉴。

panliang9 发表于 2023-7-26 08:52:58

谢谢楼主分享!
页: [1] 2
查看完整版本: 20230818更老帖再进化--多行文字排版