Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2009, 00:56   #1
С.М.С
Участник клуба
 
Аватар для С.М.С
 
Регистрация: 29.12.2008
Сообщений: 1,598
По умолчанию Вопрос по API Visual Basic

Доброй ночи всем!
приведённый ниже Код должен программно устанавливать шрифт fonet_tm.
при выполнении выводит ошибку - File not found:GDI - и выдиляет часть кода, но ни в этом суть можно удалить эту часть кода, тогда выделит следующюю часть и туже ошибку. Я так понимаю Ошибка в присваивании значении - FontName$, FontFileName$, WinSysDir$

' FontName$ is the font's name (e.g. "Goudy Old Style")
'
' FontFileName$ is the font's filename (e.g. "GOUDOS.TTF")
'
' WinSysDir$ is the user's System folder (e.g.
' "C:\WINDOWS\SYSTEM"
' or "C:\WINDOWS\SYSTEM32")

эти пяснения в аригинале были к коду

Помогите разобраться!


Declare Function WriteProfileString Lib "Kernel" (ByVal _
lpApplicationName As String, ByVal lpKeyName As String, _
ByVal lpString As String) As Integer

Declare Function CreateScalableFontResource% Lib "GDI" _
(ByVal fHidden%, ByVal lpszResourceFile$, ByVal _
lpszFontFile$, ByVal lpszCurrentPath$)

Declare Function _
AddFontResource Lib "GDI" (ByVal lpFilename As Any) As _
Integer

Declare Function SendMessage Lib "User" (ByVal hWnd As _
Integer, ByVal wMsg As Integer, ByVal wParam As _
Integer, lParam As Any) As Long


Sub Install_TTF (FontName$, FontFileName$, WinSysDir$)
Dim Ret%, Res&, FontPath$, FontRes$
Const WM_FONTCHANGE = &H1D
Const HWND_BROADCAST = &HFFFF

FontPath$ = WinSysDir$ + "\" + FontFileName$
FontRes$ = Left$(FontPath$, Len(FontPath$) - 3) + "FOT"

Ret% = CreateScalableFontResource(0, FontRes$, _
FontFileName$, WinSysDir$)

Ret% = AddFontResource(FontRes$)
Res& = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0)
Ret% = WriteProfileString("fonts", FontName + " " & _
"(TrueType)", FontRes$)
End Sub



const FontName$ = "fonet_tm"
const FontFileName$ = "fonet_tm.ttf"
const WinSysDir$ = "C:\Documents and Settings\С.М.С\Рабочий стол"

Call Install_TTF (FontName$, FontFileName$, WinSysDir$)

Последний раз редактировалось С.М.С; 09.01.2009 в 01:11.
С.М.С вне форума Ответить с цитированием
Старый 09.01.2009, 10:10   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Цитата:
Сообщение от С.М.С Посмотреть сообщение
Доброй ночи всем!
приведённый ниже Код должен программно устанавливать шрифт fonet_tm.
при выполнении выводит ошибку - File not found:GDI - и выдиляет часть кода, но ни в этом суть можно удалить эту часть кода, тогда выделит следующюю часть и туже ошибку. Я так понимаю Ошибка в присваивании значении - FontName$, FontFileName$, WinSysDir$
Возьмите другой код. Например
http://www.microsoft.com/Rus/Msdn/Ac.../Other/91.mspx
http://www.ex-designz.net/apidetail.asp?api_id=587
http://www.answers.com/topic/addfontresource

увидите разницу.
alexBlack вне форума Ответить с цитированием
Старый 09.01.2009, 12:45   #3
С.М.С
Участник клуба
 
Аватар для С.М.С
 
Регистрация: 29.12.2008
Сообщений: 1,598
По умолчанию

Спасибо большое alexBlack! Работает!
взял код с первой ссылки(приведён ниже)

Option Explicit
#If Win32 Then
Private Declare Function AddFontResource Lib _
"gdi32" Alias "AddFontResourceA" (ByVal _
lpFileName As String) As Long
Private Declare Function SendMessage Lib _
"user32" Alias "SendMessageA" (ByVal hWnd _
As Long, ByVal wMsg As Long, ByVal wParam _
As Long, lParam As Long) As Long
Private Declare Function GetWindowsDirectory _
Lib "kernel32" Alias "GetWindowsDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As _
Long) As Long
#Else
Private Declare Function AddFontResource Lib _
"GDI" (ByVal lpFilename As Any) As Integer
Private Declare Function SendMessage Lib "User" _
(ByVal hWnd As Integer, ByVal wMsg As Integer, _
ByVal wParam As Integer, lParam As Any) As Long
Private Declare Function GetWindowsDirectory _
Lib "Kernel" (ByVal lpBuffer As String, ByVal _
nSize As Integer) As Integer
#End If

Const WM_FONTCHANGE = &H1D
Const HWND_BROADCAST = &HFFFF&

Function AddFont3 (FileName As String) As Integer
Dim WindowsDir As String
Dim Lbuf As Long
' - Получение каталога Windows
Lbuf = GetWindowsDirectory (WindowsDir, Len (Buffer))
If Lbuf Then
WindowsDir = Left$(windowsDir, Lbuf)
' - Копирование файла
FileCopy FileName, WindowsDir & "\Fonts\" & FileName
' - Добавление шрифта
If AddFontResource (FileName) Then
SendMessage HWND_BROADCAST, WM_FONTCHANGE, 0, 0
AddFont3 = True
End If
End If
End Function

несрабатывало копирование шрифта- ошика вот в этой строчки
FileCopy FileName, WindowsDir & "\Fonts\" & FileName
одинаковые адреса откуда брать шрифт и куда копировать
В общем кому интересно ниже переделанный вариант

(размещается в начале модуля)

Private Declare Function AddFontResource Lib _
"gdi32" Alias "AddFontResourceA" (ByVal _
lpFilename As String) As Long
Private Declare Function SendMessage Lib _
"user32" Alias "SendMessageA" (ByVal hWnd _
As Long, ByVal wMsg As Long, ByVal wParam _
As Long, lParam As Long) As Long
Private Declare Function GetWindowsDirectory _
Lib "kernel32" Alias "GetWindowsDirectoryA" _
(ByVal lpBuffer As String, ByVal nSize As _
Long) As Long


Const WM_FONTCHANGE = &H1D
Const HWND_BROADCAST = &HFFFF&

Sub AddFont3(FileName, puteFileName)
' показываем путь папки Windows
Dim windir As String ' получаем путь папки Windows
Dim slength As Long ' получаем длину возвращаемой строки

windir = Space(255) 'отводим место для получения строки в буфере
slength = GetWindowsDirectory(windir, 255) ' узнаём путь папки
windir = Left(windir, slength) ' получаем имя из буфера

If Dir$(windir & "\Fonts\" & FileName) = "" Then
' - Копирование файла
FileCopy puteFileName, windir & "\Fonts\" & FileName
' - Добавление шрифта
If AddFontResource(FileName) Then
SendMessage HWND_BROADCAST, WM_FONTCHANGE, 0, 0

End If
End If
End Sub

(Далее вызываем процедуру)
'имя шрифта
Const FileName = "fonet_tm.ttf"
'его путь с именем
Const puteFileName = "C:\Documents and Settings\С.М.С\Рабочий стол\fonet_tm.ttf"
'вызов процедуры
Call AddFont3(FileName, puteFileName)
С.М.С вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по Visual Basic Иллидан Помощь студентам 3 20.04.2008 13:08
Использование Windows Visual Styles (Themes) API Vlast Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 29.07.2007 16:27