Имя: Пароль:
1C
1C 7.7
v7: Как проверить наличие шрифта с заданным именем в системе?
0 Chai Nic
 
27.08.21
18:43
Собственно сабж. Нужно перед формированием печатной формы убедиться, что шрифт, который используется, установлен. Если нет - то выдать сообщение пользователю.
Как это сделать максимально просто, без парсинга реестра? Компоненты 1с++ и формекс подключены и используются.
1 Aleksey
 
27.08.21
18:54
WSH=СоздатьОбъект("WScript.Shell");
Шрифты=WSH.SpecialFolders("Fonts");
2 Chai Nic
 
27.08.21
18:55
(1) На 2003 и XP будет работать?
3 Aleksey
 
27.08.21
18:56
Папки со шрифтами по моему еще в 95 была
4 Базис
 
naïve
27.08.21
18:56
Поищи в конфе по слову "шрифт", вроде некоторые (Бух?) проверяли наличие шрифта для 1D-баркода.
5 victuan1
 
30.08.21
07:17
(4) Нет, не нашел там того. Ни в самой конфигурации, ни в рег. отчетности.
6 MWWRuza
 
гуру
30.08.21
14:54
Ничего там не проверялось. В случае отсутствия шрифта, просто выводились "циферки" и восклицательные знаки вместо ШК...
Может это в снеговике проверялось? х.з....
7 Djelf
 
30.08.21
15:53
(0) А зачем перебором? С 1С++ можно и без перебора.

Функция ЕстьШрифт(ИмяШрифта,ФайлШрифта="")
    // ИмяШрифта  - так как он называется в реестре
    // ФайлШрифта - возвращается в случае его наличия в реестре
    Реестр=СоздатьОбъект("РеестрWin");
    Если Реестр.ОткрытьКлюч("HKEY_LOCAL_MACHINE","SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts","KEY_QUERY_VALUE")=0 Тогда
        Сообщить("Ошибка открытия Реестра Windows","!");
        Возврат 0;
    КонецЕсли;
    Возврат Реестр.ЗапроситьЗначение(ИмяШрифта,ФайлШрифта);
КонецФункции
8 Tatitutu
 
30.08.21
17:22
Если ФС.СуществуетФайл(фс.windowsКаталог()+"\Fonts\eang000.ttf")=0 Тогда

так не подойдет ?
9 Chai Nic
 
31.08.21
08:14
(7)(8) Шрифты могут быть установлены и в профиль пользователя. Так что придется проверять ещё и ветку HKCU (ну или папку профиля).
Программист всегда исправляет последнюю ошибку.