![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Вот пример кода:
Во второй строке надо указать имя фонта (но не имя файла)... Как его узнать ? Я заранее не знаю имя шрифта... -------------------- С уважением, г-н Посол. |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Приходит на ум - сделать список шрифтов до добавления и после и сравнить... дегенератизм но похоже в MS специально сделали поддержку шрифтов так чтоб не добраться...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Но как-то же fontview.exe показывает шрифт ? Посмотрел в импорте - есть AddFontResource, но никаких FontEnum*'ов нет... Есть и RemoveFontResource... И самое интересное - есть какая-то GetFontResourceInfo, описание которой специально опустили в MSDN'е (что-то они там с авторскими правами закрутили...)... Где бы надыбать описаловку этой функции ?
-------------------- С уважением, г-н Посол. |
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
p0s0l, по-моему, FontView работает через EnumFont, или, скорее, через EnumFontFamilies. ему то не надо знать конкретное имя.
может, тебе выделить загрузку шрифтов отдельно, потом генерить их список, и уже потом пусть юзверь выбирает из этого списка имя и этим шрифтом рисует? ты бы сказал про задачку подробнее. как-то же можно наверняка обойти. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
x77, у меня есть 4000 шрифтов, и надо найти среди них покрасивее. Т.к. винда английская FontView в примере пишет только английскими буквами. А мне надо русские шрифты... ACDSEE пишет "Font" - тоже не то...
Но проблему уже решил двумя способами: 1) в FontView поменял выводимую строку на свою 2) Искал в инете инфу об GetFontResourceInfo - находились только аналогичные вопросы в других форумах (и почему-то без ответов)... Методом дебагера и тыка выяснил кол-во и назначение параметров этой функции. Мало ли, кому в будущем пригодится: function GetFontResourceInfoW (FontPath : PWideChar; var BufSize : DWORD; FontName : PWideChar; dwFlags : DWORD) : DWORD; stdcall; external 'GDI32.DLL'; 1-ый параметр - указатель на Wide-строку, содержащую путь к файлу шрифта; 2-ой параметр - указатель на DWORD-переменную, содержащую размер выходного буфера. После выполнения функции в этой переменной будет содержаться необходимая длина буфера; 3-ий параметр - указатель на буфер, в случае успешного выполнения будет содержать Wide-строку имени шрифта; 4-ый параметр - какие-то флаги, если рыться в функции GetFontResourceInfoW особым случаем является когда dwFlags=4, но зачем это, я так и не понял - в результате будет возвращен тот же путь к файлу; ну а для получения имени шрифта флаг должен быть равен 1.
Пример вызова: GetFontName('C:\MyFonts\FUTURA.TTF') - возвратит 'FuturaEugenia'. PS: Всё бы хорошо, но эта функция хоть и есть в Win9x, только её там вызывать нельзя - пишет "This function is only valid in Windows NT mode."... FontView в Win9x использует EnumFontFamiliesEx (видимо по предложенному Vit'ом и x77 способу)... FontView в WinNT использует GetFontResourceInfo (в импорте вообще нет EnumFontFamiliesEx или других Enum*)... -------------------- С уважением, г-н Посол. |
|||
|
||||
-Сергей- |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 2.8.2003 Где: Россия Репутация: нет Всего: 1 |
Ну ты определяй тип винды. Если 9х - то юзай EnumFontFamiliesEx, а если НТ, то GetFontResourceInfo.
Или я не то понял? --------------------
Для утвердительного ответа достаточно лишь одного слова - "да". Все прочие слова придуманы, чтобы сказать "нет". |
|||
|
||||
Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Да это и ёжику понятно -Сергей-, Посол просто сетует на то, что в Win9x эта функция неработает.
-------------------- |
|||
|
||||
Igor_thief |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 12.9.2006 Где: Украина Репутация: нет Всего: нет |
p0s0l, dwFlgs
Specifies the type of resouce information to return. This parameter can be one of the following values. Value Meaning QFR_0 0 DWORD or LPVOID unknown QFR_DESCRIPTION 1 The function provides a string that an NT-based operating system will use to describe the font file. A null-terminated Unicode string is written to the buffer pointed to by lpBuffer. QFR_LOGFONT 2 Array of LOGFONT QFR_PDEV 3 PDEV ? QFR_FONTFILE 4 scalable font file name QFR_5 5 DWORD Windows XP: Always returns 0 Спасибо большое за невероятно полезную функцию! Это сообщение отредактировал(а) Igor_thief - 7.8.2008, 22:03 --------------------
В каждом из нас спит гений, и с каждым днем все крепче ...delphigeek.blogspot.com | www.iskomorokh.com |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |