Форум: "Основная";
Текущий архив: 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.034 c