Тема: Список системных шрифтов

Здравствуйте!
Подскажите, пожалуйста, как средствами VBA получить список системных шрифтов. Видела аналогичный вопрос в теме Lisp, но я в нём ничего не понимаю... :( Где-то в инете нашла, что якобы можно так:

For c = 1 To Screen.FontCount
FontNameComboBox.AddItem Screen.Fonts(c)
Next c

Но у меня на этом фрагменте выдаётся ошибка "object required". Буду очень рада всем полезным советам.

Re: Список системных шрифтов

> masha
Проверь почту
~'J'~

Re: Список системных шрифтов

Fatty, мне ничего не приходило... Может, прямо тут, а?...

Re: Список системных шрифтов

> masha
Выслал повторно с другого адреса
~'J'~

Re: Список системных шрифтов

Спасибо большое, оно пришло! А так должно быть, что там выводятся имена файлов шритов, а не имена?...

Re: Список системных шрифтов

И всё-таки, неужели нальзя сделать такой список, как везде в Windows?... А то имена типа  g12f12.shx не очень красноречивы...

Re: Список системных шрифтов

> masha
Попробуй отрубить хвосты вместе с точкой и получишь
чистый список в виде имен шрифтов
См. функции работы со строками
~'J'~

Re: Список системных шрифтов

Даже обрубленные, они не очень похожи на то, что обычно видим... Ну, типа, это не "Times Naw Roman", написанное этим самым шрифтом и т.п. В принципе, можно оставить и так, но хочется, чтоб было красиво и всем понятно...

Re: Список системных шрифтов

Fatty или masha не могли бы вы показать код?

(изменено: fixo, 25 мая 2011г. 14:07:48)

Re: Список системных шрифтов

Lithium пишет:

Fatty или masha не могли бы вы показать код?

Я уже не могу найти эот код он остался на старом компьютере
Возможно что-то вроде этого:
http://dl.dropbox.com/u/18024145/Fonts.dvb
Ссылка будет доступна 7 дней :)

Добавлено
Накропал быстрый пример, разбирайся:

Option Explicit
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
''        Require reference to:
''   *    Microsoft Scripting Runtime   *
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
''Example of usage:
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
Public Sub demo()

Dim coll As New Collection
Dim mask As String
mask = "*.shx"      ''  "*.ttf"
'Set coll = GetAcadFonts(mask)
''        Or:
Set coll = GetWinFonts(mask)
If coll.Count > 0 Then

Dim item
For Each item In coll
'' e.g. populate list box with font names:
'' ListBox1.Items.Add (CStr(item))
Debug.Print item
Next
Else
MsgBox "The font files with " & Chr(34) & mask & Chr(34) & " extension does not found in this folder"
End If
End Sub

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
Function GetWinFonts(mask As String) As Collection


Dim coll As New Collection

    Dim fso, fold, fil, fc, s
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fold = fso.GetFolder(Environ("WinDir") & "\Fonts")

    Set fc = fold.Files
    
    For Each fil In fc
    If LCase(CStr(fil.Name)) Like LCase(mask) Then
    coll.Add (fil.Name)
    End If
    Next

Set fso = Nothing
Set GetWinFonts = coll
End Function


'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
Function GetAcadFonts(mask As String) As Collection


Dim coll As New Collection

    Dim fso, fold, fil, fc, s
    Set fso = CreateObject("Scripting.FileSystemObject")

 Set fold = fso.GetFolder(ThisDrawing.Application.Path & "\Fonts")
    Set fc = fold.Files
    
    For Each fil In fc
    If LCase(CStr(fil.Name)) Like LCase(mask) Then
    coll.Add (fil.Name)
    End If
    Next

Set fso = Nothing
Set GetAcadFonts = coll
End Function
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'

Re: Список системных шрифтов

Спасибо! Нужен был только способ получения списка .TTF файлов установленных в Windows. Где-то ранее читал, что проблема в том что список нужно составлять из реестра, т.к. шрифты могут быть установлены из любых папок. Но сам я не проверял может это было в старых Windows. Так что функция GetWinFonts() подойдет.

Re: Список системных шрифтов

Lithium пишет:

Спасибо! Нужен был только способ получения списка .TTF файлов установленных в Windows. Где-то ранее читал, что проблема в том что список нужно составлять из реестра, т.к. шрифты могут быть установлены из любых папок. Но сам я не проверял может это было в старых Windows. Так что функция GetWinFonts() подойдет.

Рад помочь
Успехов :)