多行文字操作
大家好。!我是新来的,希望能回答我的问题。这是关于多行文字中文字的常规。我必须一个接一个地编辑,而且它包含了太多的内容。我只需要点击多行文字,它就会自动改变。以下是我的例行程序:。1、编辑多行文字(两行多行文字)
2、更改文本的样式。
3、突出显示第一行,使其加粗。
4.突出显示第二行,使其倾斜。
5、退出。
结果如下:
第一行
第二行
这可以通过lisp代码实现吗?提前谢谢你,我希望可以这样做。上帝保佑所有人。 当然-只是不直接作为你的一步一步。但有几个问题:
[列表=1]
[*]所有多行文字都包含完全相同的文字吗?一、 e.是否要像使用普通DText和“属性”选项板一样复制更改?
[*]如果不是,第一行是否总是以按下Enter键结束,还是只是自动换行?
[*]当你说更改样式(在第2点中)时,似乎你是在编辑器中这样做的。你先选择所有文本吗?
[*]如果是这样的话,你愿意改变多行文字的风格本身,而不是里面的格式代码吗?
[/列表]
使用lisp,实际上可以更改多行文字的数据,而不是使用MTEdit命令。粗体和斜体只是文本值的格式代码。 谢谢irneb的回复。很抱歉,回复太晚了。回答您的问题:
1.所有多行文字是否包含完全相同的文字不,这是一个系列。i、 e,一线1,一线2,一线1,一线2,。。。等等
2.如果不是,第一行是否总是以按下Enter键结束,还是自动换行对我在第一行后按了回车键。
3.当你说改变风格(在你的第2点中)时,似乎你是在编辑器中这样做的。您是否首先选择所有文本没有。当我按多行文字编辑它后,我只需选择我想要的样式,文本的样式会自动更改,而无需全部选择。
如果是这样的话,你愿意改变多行文字本身的风格,而不是里面的格式代码吗?没有。我试图改变多行文字的样式,但字体样式没有改变。只有多行文字的样式会改变。所以我会按我的要求做。
我希望这能帮你摆脱厄尔内布。这对我和其他人都有很大的帮助。再次感谢你,愿上帝保佑。 我一直在思考这些问题,但目前这只适用于使用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)
)
)
)
)
)
你的想法是什么? 你好,李。谢谢你的回复和帮助。我已经测试了你的代码,但当我选择多行文字时什么都没有发生。也许我在这里迷路了,对不起。无论如何,我确实去了你的网站,浏览了你的lisp代码列表。我尝试了MatchTextProp,但它没有改变字体样式,只是改变了多行文字样式。只要它能改变字体样式就好了。
谢谢你们,上帝保佑。 实际上,我建议不要更改多行文字中的任何字体。正是由于这个原因:你不能轻易地修改多个文本。我更喜欢使用StripMText“清理”这样的格式代码,以摆脱这些字体。然后,可以通过选择多个多行文字并在“特性”选项板中设置样式来更改字体。
李,至于你的密码。。。同样,请确保不要使用任何DXF代码40、41或42,因为这些代码会搞乱注释性文本。您可以使用vl remove if在entmod中删除它们。
我看到你也做了自己的正则表达式函数,在执行这类事情时,它可能只会节省很多代码。我希望我对RegExp搜索字符串有更多的了解。但我马上就到了,请看我随附的版本。
正则表达式。LSP 首先,非常感谢你,伊恩。写那段代码一定花了你一些时间。我发现它不像我想的那样是一个普通的Lisp程序。再次感谢。现在,对于代码,我应该在命令行中键入什么?我没有看到defun c:。我搞错了吗?。谢谢
编辑:
我使用了StripMtext,它很管用。我现在可以改变多行文字的风格了。
我的问题是,我可以格式化多行文字(粗体第一行1和斜体第二行1)作为参考,并将其与其余多行文字匹配吗?谢谢 对不起,没有,这只是一些函数,当你想搜索和替换字符串中的内容时使用。当搜索{fArial | b….格式代码并允许替换它时,将使用它。我自己会尝试一下,但我认为李的代码有希望…只需要找出当文本中已经有一些格式代码时该怎么做。
同上:在我看来,尽可能避免使用多行文字格式代码——它们对开发人员来说是一场噩梦。
实际上,我最初在初始测试中只使用实体名称和字符串的entmod,但是在更新格式化代码时,这似乎不起作用-如果使用vl remove,这是一个好主意:感谢您指示要删除的代码,我不知道。
当我有时间的时候,我会看看你的代码-我一直在我的批处理查找和替换程序(可以在我的网站上找到)中使用RegExp字符串,我与乔·伯克一起工作;虽然在花了相当长的时间允许格式化代码后,它仍然有一些错误,其中涉及到格式严重的多行文字。我承认,我没有解释在这种情况下字符串中已经存在格式化代码。
李
伊斯兰会议组织。那我们只好等李了。给你们俩更多的力量。
页:
[1]
2