powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать установлени ли шрифт в системе
6 сообщений из 6, страница 1 из 1
Как узнать установлени ли шрифт в системе
    #32295618
Kach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут из Акцеса печатаю штрих-коды используя Бар-код шрифты
1.Как узнать програмно установлен ли шрифт?
2.Как установить шрифт?
...
Рейтинг: 0 / 0
Как узнать установлени ли шрифт в системе
    #32295691
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Из реестра
2) Руками.

Подробности позже.
...
Рейтинг: 0 / 0
Как узнать установлени ли шрифт в системе
    #32295703
Фотография Темный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.1) HKLM->Software->Microsoft->Windows NT->Current Version->Fonts
...
Рейтинг: 0 / 0
Как узнать установлени ли шрифт в системе
    #32295770
Фотография PA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function FontExists(strFontName As String) As Boolean
On Error Resume Next
    Dim WshShell As Object
    Dim bKey As Variant
    
    Set WshShell = CreateObject( "WScript.Shell" )
    bKey = WshShell.RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts\"  & strFontName)
    FontExists = (Err.Number =  0 )
End Function
...
Рейтинг: 0 / 0
Как узнать установлени ли шрифт в системе
    #32296517
Kach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо РА
а как установить програмно никто часом незнает??
...
Рейтинг: 0 / 0
Как узнать установлени ли шрифт в системе
    #32298259
АлексейЕ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kach писал:а как установить програмно никто часом незнает??

1. В реестре самому прописать шрифт с помощью API или WScript.Shell.
посмотри тут. В результате шрифт будет загружаться с загрузкой Win.

2. Подгружать шрифт с помощью API во время работы своего приложения, или при загрузке оного.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Declare Function RemoveFontResource Lib  "gdi32"  Alias  "RemoveFontResourceA"  (ByVal lpFileName As String) As Long
Public Declare Function AddFontResource Lib  "gdi32"  Alias  "AddFontResourceA"  (ByVal lpFileName As String) As Long

Public Declare Function SendMessage Lib  "user32"  Alias  "SendMessageA"  (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, LParam As Any) As Long


Public Const HWND_BROADCAST = &HFFFF&

Public Const WM_FONTCHANGE = &H1D

' Загрузка шрифта'
Public Sub AddFont()
    AddFontResource  "D:\Мои документы\Proect\Font\V200011_.TTF" 
    SendMessage HWND_BROADCAST, WM_FONTCHANGE,  0 ,  0 
End Sub

' Выгрузка шрифта'
Public Sub RemoveFont()
    RemoveFontResource  "D:\Мои документы\Proect\Font\V200011_.TTF" 
    SendMessage HWND_BROADCAST, WM_FONTCHANGE,  0 ,  0 
End Sub


При такой загрузке шрифта определить, сможешь ли ты им пользоваться или нет, через реестр не получится, т.к. в реестре он не прописывается. Но можно вывести список шрифтов доступных MSA с помощью того же API.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
'Fontenumeration types'
Public Const LF_FACESIZE =  32 
Public Const LF_FULLFACESIZE =  64 

Type LOGFONT
        lfHeight As Long
        lfWidth As Long
        lfEscapement As Long
        lfOrientation As Long
        lfWeight As Long
        lfItalic As Byte
        lfUnderline As Byte
        lfStrikeOut As Byte
        lfCharSet As Byte
        lfOutPrecision As Byte
        lfClipPrecision As Byte
        lfQuality As Byte
        lfPitchAndFamily As Byte
        lfFaceName(LF_FACESIZE) As Byte
End Type

Type NEWTEXTMETRIC
        tmHeight As Long
        tmAscent As Long
        tmDescent As Long
        tmInternalLeading As Long
        tmExternalLeading As Long
        tmAveCharWidth As Long
        tmMaxCharWidth As Long
        tmWeight As Long
        tmOverhang As Long
        tmDigitizedAspectX As Long
        tmDigitizedAspectY As Long
        tmFirstChar As Byte
        tmLastChar As Byte
        tmDefaultChar As Byte
        tmBreakChar As Byte
        tmItalic As Byte
        tmUnderlined As Byte
        tmStruckOut As Byte
        tmPitchAndFamily As Byte
        tmCharSet As Byte
        ntmFlags As Long
        ntmSizeEM As Long
        ntmCellHeight As Long
        ntmAveWidth As Long
End Type

' ntmFlags field flags'
Public Const NTM_REGULAR = &H40&
Public Const NTM_BOLD = &H20&
Public Const NTM_ITALIC = &H1&

'  tmPitchAndFamily flags'
Public Const TMPF_FIXED_PITCH = &H1
Public Const TMPF_VECTOR = &H2
Public Const TMPF_DEVICE = &H8
Public Const TMPF_TRUETYPE = &H4

Public Const ELF_VERSION =  0 
Public Const ELF_CULTURE_LATIN =  0 

'  EnumFonts Masks'
Public Const RASTER_FONTTYPE = &H1
Public Const DEVICE_FONTTYPE = &H2
Public Const TRUETYPE_FONTTYPE = &H4

Declare Function EnumFontFamilies Lib  "gdi32"  Alias  "EnumFontFamiliesA"  _
     (ByVal hDC As Long, ByVal lpszFamily As String, _
     ByVal lpEnumFontFamProc As Long, LParam As Any) As Long
     
Declare Function GetDC Lib  "user32"  (ByVal hWnd As Long) As Long

Declare Function ReleaseDC Lib  "user32"  (ByVal hWnd As Long, ByVal hDC As Long) As Long

Function EnumFontFamProc(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, _
     ByVal FontType As Long, LParam As ListBox) As Long
Dim FaceName As String
Dim FullName As String
    FaceName = StrConv(lpNLF.lfFaceName, vbUnicode)
    Debug.Print Left$(FaceName, InStr(FaceName, vbNullChar) -  1 )
    EnumFontFamProc =  1 
End Function

Function FillListWithFonts()
Dim hDC As Long, lngWndAccess As Long
    lngWndAccess = Access.hWndAccessApp
    hDC = GetDC(lngWndAccess)
    EnumFontFamilies hDC, vbNullString, AddressOf EnumFontFamProc,  0 
    ReleaseDC lngWndAccess, hDC
End Function

Если строку
EnumFontFamilies hDC, vbNullString, AddressOf EnumFontFamProc, 0
заменить на
EnumFontFamilies hDC, "EanBwrP36Tt", AddressOf EnumFontFamProc, 0

То выведется имя шрифта, если он доступен и пустая строка если нет.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать установлени ли шрифт в системе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]