Как открыть свой шрифт?

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Как открыть свой шрифт?

Сообщение longwair » 06.03.2011 (Вс) 22:02

Код: Выделить всё
Public Sub InitGameFont()
Dim MyFont As IFont
Set MyFont = New StdFont
MyFont.Name = "Arial"
MyFont.Size = 15
MyFont.Bold = True
Set GameFont = D3DX.CreateFont(d3ddevice, MyFont.hFont)
End Sub

Ну это понятно. А как открыть свой шрифт из папки с поектом?
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как открыть свой шрифт?

Сообщение Mikle » 08.03.2011 (Вт) 11:56

API - AddFontResource.

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как открыть свой шрифт?

Сообщение longwair » 08.03.2011 (Вт) 15:09

Код: Выделить всё
Public Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long


Вот нашёл такую строку а как дальше впихнуть это в код, понятия не имею. Точнее эту строку впихнуть то могу, а как дальше? Как указать что

MyFont.Name = "LONG" или как AddFontResource "LONG.ttf", ну и как заставить это работать.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как открыть свой шрифт?

Сообщение iGrok » 08.03.2011 (Вт) 16:36

Регистрируешь шрифт, потом используешь его имя.
Только имя шрифта, а не имя файла. Зарегистрируй его разок сам и посмотри, какое у него имя.
label:
cli
jmp label

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как открыть свой шрифт?

Сообщение longwair » 08.03.2011 (Вт) 17:25

Регистрируешь шрифт, потом используешь его имя.
Только имя шрифта, а не имя файла. Зарегистрируй его разок сам и посмотри, какое у него имя.


не пойму всё равно как это вставить сюда

Код: Выделить всё
Public Sub InitGameFont()
Dim MyFont As IFont
Set MyFont = New StdFont
MyFont.Name = "Arial"
MyFont.Size = 15
MyFont.Bold = True
Set GameFont = D3DX.CreateFont(d3ddevice, MyFont.hFont)
End Sub
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как открыть свой шрифт?

Сообщение iGrok » 08.03.2011 (Вт) 17:32

После регистрации твоего шрифта при помощи AddFontResource можно будет использовать его название в MyFont.Name = "название_шрифта".

Только не забывай - название шрифта, и имя файла шрифта - это не одно и то же.
Добавь вручную свой шрифт в систему, и посмотри, какое у него будет название.

Я бы даже лучше использовал вот такой вариант:
(myfont.ttf - имя файла шрифта, MyFontName - название шрифта, как оно отображается в папке Fonts, или в диалогах выбора шрифта в разных редакторах)
Код: Выделить всё
Declare Function AddFontResourceEx Lib "gdi32.dll" Alias "AddFontResourceExA" (ByVal lpcstr As String, ByVal dword As Long, ByRef DESIGNVECTOR) As Long
...
AddFontResourceExA "myfont.ttf", FR_PRIVATE, 0
...
MyFont.Name = "MyFontName"
...


В таком виде эта строка:
AddFontResourceExA "myfont.ttf", FR_PRIVATE, 0
Регистрирует шрифт только для твоего процесса, и автоматически удаляет его из системы после завершения процесса.
label:
cli
jmp label

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как открыть свой шрифт?

Сообщение longwair » 08.03.2011 (Вт) 18:14

Всё разобрался спасибо всем кто помогал.
сделал так

Код: Выделить всё
Public Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
Public Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long
........
AddFontResource "LONG.ttf"
MyFont.Name = "LONG"
......
и при выгрузке формы
RemoveFontResource "LONG.ttf"
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как открыть свой шрифт?

Сообщение iGrok » 08.03.2011 (Вт) 18:26

Насколько я понимаю, лучше всё-таки заменить AddFontResource на AddFontResourceEx с флагом FR_PRIVATE, и совсем убрать RemoveFontResource.
Это нужно для того, чтобы:
а) Во время работы твоей программы из другой нельзя было выбрать твой шрифт.
б) После краха программы (мало ли, лучше это тоже предусмотреть) он всё равно удалился.
label:
cli
jmp label

longwair
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 21.04.2010 (Ср) 12:37
Откуда: Крым.

Re: Как открыть свой шрифт?

Сообщение longwair » 08.03.2011 (Вт) 18:32

А у меня почему то вот здесь выдаёт ошибку
Код: Выделить всё
AddFontResourceExA "myfont.ttf", FR_PRIVATE, 0


Хотя может это ты написал не правильно. Может в AddFontResourceExA последнюю "А" не писать, тогда всё работает.
Тут же #000000 по #ffffff написано
Уроки по 3DS Max для начинающих - http://3dlong.ucoz.ru/

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: Как открыть свой шрифт?

Сообщение Viper » 08.03.2011 (Вт) 19:10

longwair писал(а):Может в AddFontResourceExA последнюю "А" не писать, тогда всё работает.
Именно так, последняя A не нужна.
Весь мир матрица, а мы в нем потоки байтов!

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Как открыть свой шрифт?

Сообщение iGrok » 08.03.2011 (Вт) 22:05

Ага, издержки копипаста. :)
label:
cli
jmp label

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Как открыть свой шрифт?

Сообщение arthur2 » 09.03.2011 (Ср) 7:41

Viper писал(а):Именно так, последняя A не нужна.
А нужна бы последняя W :)
Поскольку пути вполне могут содержать уникодные символы - и тады программа не найдет файла. Кстати, это относится вообще ко всем обращениям к файловой системе из бейсика: нужны бы W-версии функций.
Артур
 
   


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

    TopList