填写的中文字成“?”号,怎么解决?
本帖最后由 qwh923820 于 2018-8-1 09:51 编辑编写的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
求问大神,哪里出来问题?该怎么改?
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
是不是“文字样式”没设置中文
是的,该怎么设置啊?? qwh923820 发表于 2018-8-1 13:57
是的,该怎么设置啊??
设置支持中文的字体啊 zzyong00 发表于 2018-8-1 12:01
是不是“文字样式”没设置中文
都不行,
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
mikewolf2k 发表于 2018-8-1 14:32
设置支持中文的字体啊
求代码!!,我试了几种方法都不行。
手动设置我是知道的。如果CAD没打开的情况下运行程序是没有问题,但是假如有CAD文件打开着,我不关闭原来的CAD,重新新建CAD文件开始画图,文字样式就是这样的,而且我不知道该怎么改?? 修改这个textstyle。
模板文件里面的当前textstyle就是这样。要是不想代码改,就去改模板的当前textstyle,换成支持中文的。 mikewolf2k 发表于 2018-8-1 16:17
修改这个textstyle。
模板文件里面的当前textstyle就是这样。要是不想代码改,就去改模板的当前textstyle ...
已解决,发部分源码在这里,希望给不会的一点参考
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
qwh923820 发表于 2018-8-1 16:50
已解决,发部分源码在这里,希望给不会的一点参考
这个其实是一种方法,都是改text style。
另外不建议改activetextstyle,这样连改了哪个都不知道。建议修改自己要的textstyle, 把文字的style改成那个textstyle,不要去改当前激活的,以免影响其他。
页:
[1]