LearningLisP 发表于 2022-7-6 08:07:16

多行文字操作

大家好。!我是新来的,希望能回答我的问题。这是关于多行文字中文字的常规。我必须一个接一个地编辑,而且它包含了太多的内容。我只需要点击多行文字,它就会自动改变。以下是我的例行程序:。
 
1、编辑多行文字(两行多行文字)
2、更改文本的样式。
3、突出显示第一行,使其加粗。
4.突出显示第二行,使其倾斜。
5、退出。
 
结果如下:
 
第一行
第二行
 
这可以通过lisp代码实现吗?提前谢谢你,我希望可以这样做。上帝保佑所有人。

irneb 发表于 2022-7-6 08:13:12

当然-只是不直接作为你的一步一步。但有几个问题:
 
[列表=1]
[*]所有多行文字都包含完全相同的文字吗?一、 e.是否要像使用普通DText和“属性”选项板一样复制更改?
[*]如果不是,第一行是否总是以按下Enter键结束,还是只是自动换行?
[*]当你说更改样式(在第2点中)时,似乎你是在编辑器中这样做的。你先选择所有文本吗?
[*]如果是这样的话,你愿意改变多行文字的风格本身,而不是里面的格式代码吗?
[/列表]
使用lisp,实际上可以更改多行文字的数据,而不是使用MTEdit命令。粗体和斜体只是文本值的格式代码。

LearningLisP 发表于 2022-7-6 08:14:10

谢谢irneb的回复。很抱歉,回复太晚了。回答您的问题:
 
1.所有多行文字是否包含完全相同的文字不,这是一个系列。i、 e,一线1,一线2,一线1,一线2,。。。等等
2.如果不是,第一行是否总是以按下Enter键结束,还是自动换行对我在第一行后按了回车键。
3.当你说改变风格(在你的第2点中)时,似乎你是在编辑器中这样做的。您是否首先选择所有文本没有。当我按多行文字编辑它后,我只需选择我想要的样式,文本的样式会自动更改,而无需全部选择。
如果是这样的话,你愿意改变多行文字本身的风格,而不是里面的格式代码吗?没有。我试图改变多行文字的样式,但字体样式没有改变。只有多行文字的样式会改变。所以我会按我的要求做。
 
我希望这能帮你摆脱厄尔内布。这对我和其他人都有很大的帮助。再次感谢你,愿上帝保佑。

Lee Mac 发表于 2022-7-6 08:19:30

我一直在思考这些问题,但目前这只适用于使用Arial字体的文本样式-我不知道如何将多行文字设置为粗体/斜体,并在格式代码中指定正确的字体字符串。我想也许vla得到了字体文件,但这只是字体文件的文件名。
 

(defun c:test ( / *error* ss ) (vl-load-com)
;; © Lee Mac 2010, www.lee-mac.com

(defun *error* ( msg )
   (LM:ReleaseObject RegEx)
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ)
)

(if (setq ss (ssget "_:L" '((0 . "MTEXT") (1 . "*\\P*"))))
   (
   (lambda ( i / RegEx e ) (setq RegEx (vlax-create-object "VBScript.RegExp"))
       (while (setq e (ssname ss (setq i (1+ i))))
         (entupd
         (cdr
             (assoc -1
               (entmod
               (subst
                   (cons 1
                     (LM:RegExReplace RegEx "{\\fArial|b1|i0|c0|p34;$1\\P\\fArial|b0|i1|c0|p34;$2}" "^(.*)\\\\P(.*)$"
                     (cdr (assoc 1 (entget e)))
                     )
                   )
                   (assoc 1 (entget e)) (entget e)                     
               )
               )
             )
         )
         )
       )
       (LM:ReleaseObject RegEx)
   )
   -1
   )
)

(princ)
)

(defun LM:RegExReplace ( regex new pat str )
;; © Lee Mac 2010
(mapcar
   (function
   (lambda ( prop value ) (vlax-put-property regex prop value))
   )
'(pattern global ignorecase) (list pat actrue acfalse)
)
(vlax-invoke regex 'replace str new)
)

;;------------------=={ Release Object }==--------------------;;
;;                                                            ;;
;;Releases a VLA Object from memory via plentiful error   ;;
;;trapping                                                ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2010 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;obj - VLA Object to be released from memory               ;;
;;------------------------------------------------------------;;
;;Returns:T if Object Released, else nil                  ;;
;;------------------------------------------------------------;;

(defun LM:ReleaseObject ( obj ) (vl-load-com)
;; © Lee Mac 2010
(and obj (eq 'VLA-OBJECT (type obj)) (not (vlax-object-released-p obj))
   (not
   (vl-catch-all-error-p
       (vl-catch-all-apply
         (function vlax-release-object) (list obj)
       )
   )
   )
)
)

 
你的想法是什么?

LearningLisP 发表于 2022-7-6 08:20:15

你好,李。谢谢你的回复和帮助。我已经测试了你的代码,但当我选择多行文字时什么都没有发生。也许我在这里迷路了,对不起。无论如何,我确实去了你的网站,浏览了你的lisp代码列表。我尝试了MatchTextProp,但它没有改变字体样式,只是改变了多行文字样式。只要它能改变字体样式就好了。
 
谢谢你们,上帝保佑。

irneb 发表于 2022-7-6 08:23:35

实际上,我建议不要更改多行文字中的任何字体。正是由于这个原因:你不能轻易地修改多个文本。我更喜欢使用StripMText“清理”这样的格式代码,以摆脱这些字体。然后,可以通过选择多个多行文字并在“特性”选项板中设置样式来更改字体。
 
李,至于你的密码。。。同样,请确保不要使用任何DXF代码40、41或42,因为这些代码会搞乱注释性文本。您可以使用vl remove if在entmod中删除它们。
 
我看到你也做了自己的正则表达式函数,在执行这类事情时,它可能只会节省很多代码。我希望我对RegExp搜索字符串有更多的了解。但我马上就到了,请看我随附的版本。
正则表达式。LSP

LearningLisP 发表于 2022-7-6 08:28:12

首先,非常感谢你,伊恩。写那段代码一定花了你一些时间。我发现它不像我想的那样是一个普通的Lisp程序。再次感谢。现在,对于代码,我应该在命令行中键入什么?我没有看到defun c:。我搞错了吗?。谢谢
 
编辑:
 
我使用了StripMtext,它很管用。我现在可以改变多行文字的风格了。
 
我的问题是,我可以格式化多行文字(粗体第一行1和斜体第二行1)作为参考,并将其与其余多行文字匹配吗?谢谢

irneb 发表于 2022-7-6 08:31:49

对不起,没有,这只是一些函数,当你想搜索和替换字符串中的内容时使用。当搜索{fArial | b….格式代码并允许替换它时,将使用它。我自己会尝试一下,但我认为李的代码有希望…只需要找出当文本中已经有一些格式代码时该怎么做。

Lee Mac 发表于 2022-7-6 08:33:11

 
同上:在我看来,尽可能避免使用多行文字格式代码——它们对开发人员来说是一场噩梦。
 
 
实际上,我最初在初始测试中只使用实体名称和字符串的entmod,但是在更新格式化代码时,这似乎不起作用-如果使用vl remove,这是一个好主意:感谢您指示要删除的代码,我不知道。
 
 
当我有时间的时候,我会看看你的代码-我一直在我的批处理查找和替换程序(可以在我的网站上找到)中使用RegExp字符串,我与乔·伯克一起工作;虽然在花了相当长的时间允许格式化代码后,它仍然有一些错误,其中涉及到格式严重的多行文字。我承认,我没有解释在这种情况下字符串中已经存在格式化代码。
 

LearningLisP 发表于 2022-7-6 08:37:30

 
伊斯兰会议组织。那我们只好等李了。给你们俩更多的力量。
页: [1] 2
查看完整版本: 多行文字操作