Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

Как подгрузить фонт из ресурса?   Найти похожие ветки 

 
Andrata   (2005-05-24 01:54) [0]

Хочу показать псевдографику шрифтом FixedSys, но у него нет псевдографики, поэтому пользовался другим (Terminal вроде). Недавно нашел подправленный FixedSysOEM.fon - отобразил, получил, что хотел, но этот шрифтовый файл болтается на винте, что мне очень не нравится.
 В ресурс файл затолкать - могу, из ресурса достать и положить на винт - тоже могу, но вот как подключить фонт не с винта?
 AddFontResource просит файл с винта (c:\123.fon), с CreateFileMapping толком не смог разобратся. Нечто подобное делает TotalCommander - откуда то берет фонт (в ресурсах его не нашел) и показывает им текст, причем на винте никаких доп. файлов не появляется.
 В каком направлении рыть?


 
Чапаев ©   (2005-05-24 09:55) [1]

> откуда то берет фонт (в ресурсах его не нашел) и показывает им текст
Может, посимвольно рисует?

А чего это тебе обязательно "не с винта"?


 
Andrata   (2005-05-25 21:31) [2]

AddFontResource просит файл с винта (Must use string, not handle, for filename), с CreateFileMapping разобрался (создаю, пишу, читаю), но обратится к файлу можно только по хендлу - налицо несовместимость функций, я в тупике, может кто то столкнет с мертвой точки?

2Чапаев
Конкретнее по "посимвольно".
Файл будет запускатся и с READONLY диска и у меня нет желания думать о рамдрайве, HDD (они могут отсутствовать).


 
Просто Джо ©   (2005-05-26 02:14) [3]


>  Нечто подобное делает TotalCommander - откуда то берет
> фонт (в ресурсах его не нашел) и показывает им текст


AFAIK, он устанавливает в систему шрифт. А затем, возможно, использует функцию AddFontResourceEx с флагом FR_PRIVATE.
Почему нельзя положить файл со шрифтом в папку с программой и использовать указанную мной функцию с соответствующим флагом? Фонт (не сам файл, конечно) не будет виден никому, кроме твоего процесса.


 
KilkennyCat ©   (2005-05-26 02:18) [4]

Из Кулибы.

Включение шрифта как ресурс в *.EXE

Включение шрифта в ваш EXE:

Используйте ваш любимый текстовый редактор, создайте *.rc файл, описывающий шрифт:
--------------------------------------------------------------------------------
   MY_FONT ANYOL1 "Bauhs93.ttf"  

Первые два параметра могут быть любыми. Они будут использоваться в программе позже.

Затем для создания *.res файла используйте компилятор командной строки BRCC32.EXE, поставляемый с Delphi. Если ваш файл на этапе 1 был назван MyFont.rc, командная строка в сеансе DOS должна выглядеть так:
--------------------------------------------------------------------------------
   BRCC32 MyFont  

Программа добавит в компилируемый файл созданный ресурс .rc и создаст файл с тем же именем, за исключением расширения, которое будет .res: MyFont.res

В вашей программе добавьте директиву компилятора, чтобы включить вновь созданный файл:
--------------------------------------------------------------------------------
   {$R MyFont.res}  

Правильным будет разместить его в секции реализации после строчки {$R *.DFM}.

Добавьте процедуру создания файла из ресурса, делающим шрифт доступным для использования. Пример:
--------------------------------------------------------------------------------
   procedure TForm1.FormCreate(Sender: TObject);
var

Res : TResourceStream;
begin

Res := TResourceStream.Create(hInstance, "MY_FONT", Pchar("ANYOL1"));
Res.SavetoFile("Bauhs93.ttf");
Res.Free;
AddFontResource(PChar("Bauhs93.ttf"));
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;  

Теперь вы можете использовать данный шрифт в своем приложении:
--------------------------------------------------------------------------------
   procedure TForm1.Button1Click(Sender: TObject);
begin

Button1.Font.Name := "Bauhaus 93";
end;  

Предостережения:
Приведенный пример не предусматривает никакой проверки и защиты от возможных ошибок.

Обратите внимание - имя файла НЕ такое же, как имя шрифта. Это допускает, что вы знаете имя шрифта и имя его ttf-файла. Вы можете определить это, дважды щелкнув на файле в окне Проводника.

Я рекомендую устанавливать файл шрифта в папку C:\WINDOWS\FONTS. Его легче отыскать потом именно там.

Ваш вновь установленный шрифт может быть удален программным путем, естественно, в случае, когда он никем не используется:

--------------------------------------------------------------------------------
   procedure TForm1.FormDestroy(Sender: TObject);
begin

RemoveFontResource(PChar("Bauhs93.ttf"))
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;  

Для получения дополнительной справки по функциям AddFontResource и RemoveFontResource загляните в электронную справку по Win32. [000091


 
KilkennyCat ©   (2005-05-26 02:21) [5]

а, прошу, прощения, не правильно понял вопрос, что не с винта надо...


 
KilkennyCat ©   (2005-05-26 02:24) [6]

Только вот непонятно,

Файл будет запускатся и с READONLY диска и у меня нет желания думать о рамдрайве, HDD (они могут отсутствовать).

почему бы его на ентот риадонли диск сразу не записать?


 
Andrata   (2005-05-26 16:48) [7]

2Просто Джо
> AFAIK, он устанавливает в систему шрифт
Я же написал "..на винте никаких доп. файлов не появляется", кстати вызовов AddFontResource?? нет.
> AddFontResourceEx с флагом FR_PRIVATE
и AddFontResource не плохо справляется, без глобального оповещения конечно, кстати длится оно у меня секунды 2-3.

2KilkennyCat & Просто Джо
Эти варианты я до вас "обсосал" и "проглотил". В любом случае спасибо, хоть кто то откликнулся.

> почему бы его на ентот риадонли диск сразу не записать?
Человеческая память имеет пределы и мне хочется помнить WinApi, Delphi, а не то что, при копировании моей проги я должен скопировать еще какой то там фонт. К тому же я знаю, что это мне пригодится в дальнейшем и решать эту задачу (или подобную) все равно придется.


 
Просто Джо ©   (2005-05-26 16:58) [8]


> и мне хочется помнить WinApi, Delphi, а не то что, при копировании
> моей проги я должен скопировать еще какой то там фонт.


На то есть инсталляторы.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.038 c
3-1115551746
Zahar
2005-05-08 15:29
2005.06.14
Помогите с SQL-запросом.


3-1115201907
InVariantian
2005-05-04 14:18
2005.06.14
Data Module


9-1110808760
qwe
2005-03-14 16:59
2005.06.14
GlScene and 3DS


14-1115861977
ArMellon
2005-05-12 05:39
2005.06.14
Хочу саб вуфер


1-1117455751
Still Swamp
2005-05-30 16:22
2005.06.14
Подмена хэндла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский