明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2275|回复: 5

[原创]得到当前图形可用的fontfile和bigfontfile,请mccad等大侠指教

[复制链接]
发表于 2003-11-8 18:17:00 | 显示全部楼层 |阅读模式
得到当前图形可用的fontfile和bigfontfile完成,请指教,以便改进。
Dim myfile() As String
Dim strfontfile(), strbigfontfile() As String
Dim j, m, n As Integer

Sub pfont()
    Dim spath() As String
    Dim a As String
    Dim i As Integer
   
    m = 0
    n = 0
    j = 1
   
    spath = Split(ThisDrawing.Application.Preferences.Files, ";")
    For i = 0 To UBound(spath)
        Findshxfile spath(i)
    Next i
    For j = 1 To UBound(strbigfontfile)
        a = a & j & "-" & strbigfontfile(j) & "   "
    Next j
    MsgBox a, , "当前可用的Bigfontfile"
   
    For j = 1 To UBound(strfontfile)
        a = a & j & "-" & strfontfile(j) & "   "
    Next j
    MsgBox a, , "当前可用的Fontfile"
End Sub

Function Findshxfile(Path As String)
    Dim strpath As String
    Dim k As Integer
   
    strpath = IIf(Right(Path, 1) = "\", Path, Path & "\")
    ReDim Preserve myfile(j)
    myfile(j) = Dir(strpath & "*.shx")
   
    If myfile(j) <> "" Then fyn strpath & myfile(j)
   
    Do While myfile(j) <> ""
        j = j + 1
        ReDim Preserve myfile(j)
        myfile(j) = Dir
        For k = 1 To j - 1
            If myfile(j) = myfile(k) Then
                j = j - 1
                ReDim Preserve myfile(j)
                GoTo 100
            End If
        Next k
        If myfile(j) <> "" Then fyn strpath & myfile(j)
100:
    Loop
End Function

Function fyn(s As String)
    Dim b As String
   
    Open s For Input As #1
        Line Input #1, b
    Close #1
   
    If Mid(b, 12, 7) = "bigfont" Then
        m = m + 1
        ReDim Preserve strbigfontfile(m)
        strbigfontfile(m) = myfile(j)
    Else
        n = n + 1
        ReDim Preserve strfontfile(n)
        strfontfile(n) = myfile(j)
    End If
End Function
发表于 2003-11-8 21:08:00 | 显示全部楼层
写成一个调用函数,这样方便使用: 
  1. Function GetFonts(ByRef FontFile As Variant, ByRef BigFontFile As Variant)
  2.     Dim strFontFile(), strBigFontFile() As String
  3.     Dim SearchPath() As String
  4.     Dim a As String
  5.     Dim i As Integer
  6.     Dim x As Integer
  7.     Dim y As Integer
  8.     Dim z As Boolean
  9.     Dim b As String
  10.    
  11.     SearchPath = Split(ThisDrawing.Application.Preferences.Files, ";")
  12.     For i = 0 To UBound(SearchPath)
  13.     z = False
  14.         SearchPath(i) = IIf(Right(SearchPath(i), 1) = "", SearchPath(i), SearchPath(i) & "")
  15.         Do
  16.             If Not z Then
  17.                 a = Dir(SearchPath(i) & "*.shx")
  18.                 z = True
  19.             Else
  20.                 a = Dir
  21.             End If
  22.             If a <> "" Then
  23.                 a = SearchPath(i) & a
  24.                 Open a For Input As #1
  25.                 Line Input #1, b
  26.                 Close #1
  27.                 If Mid(b, 12, 7) = "bigfont" Then
  28.                     x = x + 1
  29.                     ReDim Preserve strBigFontFile(x)
  30.                     strBigFontFile(x) = a
  31.                 ElseIf Mid(b, 12, 7) = "unifont" Then
  32.                     y = y + 1
  33.                     ReDim Preserve strFontFile(y)
  34.                     strFontFile(y) = a
  35.                 End If
  36.             Else
  37.                 Exit Do
  38.             End If
  39.         Loop
  40.     Next i
  41.     FontFile = strFontFile
  42.     BigFontFile = strBigFontFile
  43. End Function

  44. Sub GetShxFont()
  45.     Dim f As Variant
  46.     Dim bf As Variant
  47.     GetFonts f, bf
  48.     Dim i As Integer
  49.     Debug.Print "以下为普通字体:"
  50.     For i = 0 To UBound(f)
  51.         Debug.Print f(i)
  52.     Next
  53.     Debug.Print "以下为大字体:"
  54.     For i = 0 To UBound(bf)
  55.         Debug.Print bf(i)
  56.     Next
  57. End Sub
 楼主| 发表于 2003-11-8 21:35:00 | 显示全部楼层
mccad高明!
多谢指道,我得慢慢研究。
 楼主| 发表于 2003-11-9 19:52:00 | 显示全部楼层
to mccad:
你增加了对fontfile的判断,可以得到大部分的fontfile,但还有部分shape类型的文件未被列出,其特征为Mid(b, 12, 6) = "shapes"。
你在程序中保留了shx文件的路经,所以没有判断是有否重名的shx文件的语句。我想执行结果不保留shx文件的路经,所以程序中......但也总感觉我程序中使用的go to语句有点别脚,不知你有何高见?
发表于 2003-11-9 20:22:00 | 显示全部楼层
1.增加对形的判断,可以把
ElseIf Mid(b, 12, 7) = "unifont" Then
改为
ElseIf Mid(b, 12, 7) = "unifont" Or  Mid(b, 12, 6) = "shapes" Then

2.不保留路径,你可以增加一个变量保存带路径的文件名,然后不带路径的文件名用来保存于数组中,带路径的文件名用于文件的打开及查看文件是哪种字体。

3.而看看字体是否重复,得到字体名时,可先在已经保存的数组中看看是否有同名的名称,如果没有再增加,如果有则略过

4.一般不要使用Go To这样的语句,使用Do Loop来做再加上If..Then..Else..End If 来判断以退出循环Exit Do,这是我的做法,还有其它很多的方法可以做到。
 楼主| 发表于 2003-11-10 19:43:00 | 显示全部楼层
Thank you.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 13:29 , Processed in 0.242428 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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