明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2970|回复: 17

[源码] 20230818更老帖再进化--多行文字排版

[复制链接]
发表于 2023-7-22 17:42:44 | 显示全部楼层 |阅读模式
本帖最后由 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(.[^;]*);");恢复堆叠字高
                        ))
                )                        
        )        
)











本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-7-25 15:45:06 | 显示全部楼层
本帖最后由 桃花源 于 2023-7-25 15:51 编辑

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

感谢您的回复
发表于 2023-7-22 21:09:14 | 显示全部楼层
大佬高产,谢谢分享原码。
发表于 2023-7-23 18:38:56 | 显示全部楼层
谢谢楼主的分享源码~
学习一下!
发表于 2023-7-23 20:44:47 | 显示全部楼层
感谢大佬分享
发表于 2023-7-25 08:47:32 | 显示全部楼层
方法值得学习借鉴。
发表于 2023-7-26 08:52:58 | 显示全部楼层
谢谢楼主分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 01:38 , Processed in 0.168771 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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