qwh923820 发表于 2018-8-1 09:45:00

填写的中文字成“?”号,怎么解决?

编写的VBA程序,在CAD宏里面运行很正常,现在想用vb6做个界面,就用VB6改了一下,代码基本没怎么变,但是输出的中文字全变成了“??”,英文或数字不受影响,是什么导致的??自己逐步运行找原因,逐步运行时候本地窗口里面的文字也是对的,但是输出就是“?”。
acadDoc.ModelSpace.AddText 这样输出了问题
x.TextPrefix = "偏" 这样输出没问题
acadDoc 定义的是object,拾取的对象是cad文件
Set acadDoc = acadApp.Documents(n - 1)
x 定义的是object
Set x = acadDoc.ModelSpace.AddDimAligned
求问大神,哪里出来问题?该怎么改?

zzyong00 发表于 2018-8-2 11:03:00

cad用单线字体好一点,字多也速度快
'创建新的字体样式
Public Sub NewTextStyle2()   '创建新的字体样式,gbenor.SHX gbcbig.SHX 字体
    On Error GoTo err1
    Dim lkxtextstyle As AcadTextStyle
    Set lkxtextstyle = ThisDrawing.TextStyles.Add("ZZY_2")
    With lkxtextstyle
      .fontFile = "gbenor.SHX"
      .BigFontFile = "gbcbig.SHX"
      .Width = 0.85
    End With
    Exit Sub
err1:
    Err.Clear
    Resume Next
End Sub

zzyong00 发表于 2018-8-1 12:01:00

是不是“文字样式”没设置中文

qwh923820 发表于 2018-8-1 13:57:00


是的,该怎么设置啊??

mikewolf2k 发表于 2018-8-1 14:32:00


设置支持中文的字体啊

qwh923820 发表于 2018-8-1 15:06:00


都不行,

lujin = acadDoc.ActiveTextStyle.fontFile
lujin = SplitLast(lujin, "")
acadDoc.ActiveTextStyle = lujin & "gbcbig.shx"
'Set ys = acadDoc.ActiveDimStyle
'Set newText = acadDoc.TextStyles
'Stop
'newText.Item(1).Name = "宋体"
Public Function SplitLast(ByVal S, ByVal cr)
'去掉符号后面的字符串
Dim i&, j&
i = Len(S)
For j = i To 1 Step -1
    If cr = Mid(S, j, 1) Then
      SplitLast = Mid(S, 1, j)
      Exit Function
    End If
Next j
End Function



qwh923820 发表于 2018-8-1 15:10:00


求代码!!,我试了几种方法都不行。
手动设置我是知道的。如果CAD没打开的情况下运行程序是没有问题,但是假如有CAD文件打开着,我不关闭原来的CAD,重新新建CAD文件开始画图,文字样式就是这样的,而且我不知道该怎么改??

mikewolf2k 发表于 2018-8-1 16:17:00

修改这个textstyle。
模板文件里面的当前textstyle就是这样。要是不想代码改,就去改模板的当前textstyle,换成支持中文的。

qwh923820 发表于 2018-8-1 16:50:00


已解决,发部分源码在这里,希望给不会的一点参考
Public Sub LoadAcadAPP()
Dim n&, newText As Object
Dim ys As Object
Dim typeFace$,lujin$,SavetypeFace$
Dim Bold As Boolean
Dim Italic As Boolean
Dim charSet As Long
Dim PitchandFamily As Long
On Error Resume Next
Set acadApp = GetObject(, "AutoCAD.Application")
If Err Then
    Err.Clear
    Set acadApp = CreateObject("AutoCAD.Application")
    If Err Then End
Else
    Set acadDoc = acadApp.Documents.Add
End If
acadApp.Visible = True
acadApp.WindowState = acMax
n = acadApp.Documents.Count
Set acadDoc = acadApp.Documents(n - 1)
'以下为第一种方法
lujin = acadDoc.ActiveTextStyle.fontFile
lujin = SplitLast(lujin, "")
lujin = Replace(lujin, "", "/")
If acadDoc.ActiveTextStyle.BigFontFile = "" Then
    acadDoc.ActiveTextStyle.BigFontFile = lujin & "gbcbig.shx"
End If
'以下为第二种方法
acadDoc.ActiveTextStyle.GetFont typeFace, Bold, Italic, charSet, PitchandFamily
If typeFace"宋体" Then typeFace = "宋体"
acadDoc.ActiveTextStyle.SetFont typeFace, Bold, Italic, charSet, PitchandFamily
acadDoc.Regen acActiveViewport
End Sub
Public Function SplitLast(ByVal S, ByVal cr)
'去掉符号后面的字符串
Dim i&, j&
i = Len(S)
For j = i To 1 Step -1
    If cr = Mid(S, j, 1) Then
      SplitLast = Mid(S, 1, j)
      Exit Function
    End If
Next j
End Function

mikewolf2k 发表于 2018-8-1 16:55:00


这个其实是一种方法,都是改text style。
另外不建议改activetextstyle,这样连改了哪个都不知道。建议修改自己要的textstyle, 把文字的style改成那个textstyle,不要去改当前激活的,以免影响其他。
页: [1]
查看完整版本: 填写的中文字成“?”号,怎么解决?