tukuitk 发表于 2003-10-17 17:05:00

怎样用VB实现…………

怎样用VB把一张图中含文字“ABC”的单行文字、多行文字、属性参照的值、属性标签都替换成文字“XYZ”???

麻烦各位大虾帮忙解决一下!谢谢!!!

mccad 发表于 2003-10-17 19:42:00

可以实现啊,有些东西应该自己试试,如果没有思路大家可以讨论,这样才能更快地提高

leeyeafu 发表于 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

tukuitk 发表于 2003-10-18 14:51:00

谢谢leeyeafu!!!
对块中的属性的值,似乎不太好替换,怎样才能得到属性的TextString?

e2002 发表于 2003-10-18 17:07:00

Attrib对象由Text派生,可以使用vla-get-TextString
不过你应该先获取这个Insert中所包含的Attrib(s),使用vla-get-GetAttributes

tukuitk 发表于 2003-10-19 08:45:00

谢谢!
但那是VL中的用法。

leeyeafu 发表于 2003-10-19 09:36:00

若实体对象是AcDbBlockReference块参考且有属性(HasAttribute),可用GetAttribute方法将属性内容放到一个AcadAttributes数组中,然后浏览整个数组,每一个AcadAttribute对象都可能有TagString和TextString属性。

tukuitk 发表于 2003-10-19 09:47:00

谢谢leeyeafu!!!
我再试一下,我一定要做出来!!!

tukuitk 发表于 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

mccad 发表于 2003-10-19 20:11:00

你的程序把最重要的一段让给别人写了,自己怎么不先写一下呢。
页: [1] 2 3
查看完整版本: 怎样用VB实现…………