明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4648|回复: 21

怎样用VB实现…………

  [复制链接]
发表于 2003-10-17 17:05:00 | 显示全部楼层 |阅读模式
怎样用VB把一张图中含文字“ABC”的单行文字、多行文字、属性参照的值、属性标签都替换成文字“XYZ”???

麻烦各位大虾帮忙解决一下!谢谢!!!
发表于 2003-10-17 19:42:00 | 显示全部楼层
可以实现啊,有些东西应该自己试试,如果没有思路大家可以讨论,这样才能更快地提高
发表于 2003-10-17 20:19:00 | 显示全部楼层
不知道楼主是否感觉到字符串替换不方便。
我写好是程序,但明总指示:不要仅授人以鱼,要授人以渔。我感觉授人以渔不知从何说起,只好在程序中多加了些注释,希望不违明总初衷。ACAD实现部分的代码就不帖了。


'字符串替换函数,将源字符串ResStr中与Str1相同的子串替换为Str2后返回
'调用方法:Ent.TextString = ReplaceString(Ent.TextString, "ABC", "XYZ")
'为保证函数的通用性,这个函数不修改源字符串。
'在楼主要求的应用中,也可将替换功能声明为Sub过程。
'在程序中不需要使用临时字符串TempStr,直接使用源字符串ResStr。
'在调用时使用类似这样的语句:  ReplaceString Ent.TextString,Str1,Str2
Function ReplaceString(ResStr As String, Str1 As String, Str2 As String) As String
  Dim TempStr As String
  Dim i As Integer
  i = 1
  TempStr = ResStr   '复制源字符串,运算后返回
  'InStr()函数返回从位置i开始搜索,源字符串中与Str1相同的子串首次出现的位置
  '该函数默认情况进行二进制比较,要在比较时忽略大小写区别,可在参数表中加上数字0
  '也就是这样:InStr(i,TempStr,Str1,0)
  While InStr(i, TempStr, Str1) > 0
    i = InStr(i, TempStr, Str1)
    TempStr = Left(TempStr, i - 1) & Str2 & Mid(TempStr, i + Len(Str2))
  Wend
  ReplaceString = TempStr
End Function
 楼主| 发表于 2003-10-18 14:51:00 | 显示全部楼层
谢谢leeyeafu!!!
对块中的属性的值,似乎不太好替换,怎样才能得到属性的TextString?
发表于 2003-10-18 17:07:00 | 显示全部楼层
Attrib对象由Text派生,可以使用vla-get-TextString
不过你应该先获取这个Insert中所包含的Attrib(s),使用vla-get-GetAttributes
 楼主| 发表于 2003-10-19 08:45:00 | 显示全部楼层
谢谢!
但那是VL中的用法。
发表于 2003-10-19 09:36:00 | 显示全部楼层
若实体对象是AcDbBlockReference块参考且有属性(HasAttribute),可用GetAttribute方法将属性内容放到一个AcadAttributes数组中,然后浏览整个数组,每一个AcadAttribute对象都可能有TagString和TextString属性。
 楼主| 发表于 2003-10-19 09:47:00 | 显示全部楼层
谢谢leeyeafu!!!
我再试一下,我一定要做出来!!!
 楼主| 发表于 2003-10-19 15:42:00 | 显示全部楼层
各位大虾,帮我完成一下下面的SUB,功能是替换一张图中的所有文字。
Sub Swap(curdoc As Object)
    ' Create the selection set
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = curdoc.SelectionSets.Add("SSET")

    Dim mode As Integer
    Dim FilterType(5) As Integer
    Dim FilterData(5) As Variant
   
    FilterType(0) = -4
    FilterData(0) = "<OR"
    FilterType(1) = 0
    FilterData(1) = "MTEXT"
    FilterType(2) = 0
    FilterData(2) = "TEXT"
    FilterType(3) = 0
    FilterData(3) = "INSERT"
    FilterType(4) = 0
    FilterData(4) = "ATTDEF"
    FilterType(5) = 0
    FilterData(5) = "OR>"
    mode = acSelectionSetAll
   
    ssetObj.Select mode, FilterType, FilterData
   
     Dim ent As Object
     Dim j As Integer
     
     For Each ent In ssetObj
      If ent.eEntityName = "AcDbMtext" Or ent.eEntityName = "AcDbText" Then
         
     Next
      
End Sub
发表于 2003-10-19 20:11:00 | 显示全部楼层
你的程序把最重要的一段让给别人写了,自己怎么不先写一下呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 12:45 , Processed in 0.204140 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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