Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
ВнизРабота с файлами шрифтов Найти похожие ветки
← →
Aleksandar (2004-08-26 13:17) [0]Как можно выводить текст (к примеру на форму) нестандартным шрифтом, т.е. файл шрифта в Windows’e не установлен, а находиться в тойже директории что и исполняемый файл программы.
← →
ssk © (2004-08-26 13:50) [1]1. подключить динамически
AddFontResource(PChar(FontName));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
2. поработать
3. затем выгрузитьRemoveFontResource(PChar(FontName));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
← →
Aleksandar (2004-08-26 13:55) [2]Если не трудно, то поподробнее.
← →
ssk © (2004-08-26 14:00) [3]держи модуль. думаю, сам разберешься:
{
Модуль для динамического подключения-отключения шрифтов
}
unit sskDinFont;
interface
uses
Classes, Forms, Windows, Messages;
type
TFontMode = (fmInstall, fmUnInstall);
procedure SetFont(FontName: string; Mode: TFontMode; var InSystemName: string);
implementation
procedure SetFont(FontName: string; Mode: TFontMode; var InSystemName: string);
var
Old, New: TStrings;
k: integer;
begin
InSystemName:="";
case Mode of
fmInstall: begin
Old:=TStringList.Create;
Old.AddStrings(Screen.Fonts);
AddFontResource(PChar(FontName));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
New:=TStringList.Create;
New.AddStrings(Screen.Fonts);
for k:=Old.Count-1 downto 0 do
if New.IndexOf(Old[k])>-1 then
New.Delete(New.IndexOf(Old[k]));
if New.Count>0 then
InSystemName:=New[0];
New.Free;
Old.Free;
end;
fmUnInstall: begin
RemoveFontResource(PChar(FontName));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
end;
end;
end;
end.
← →
Aleksandar (2004-08-26 14:11) [4]Спасибо ssk.
Тут еще вопросик назрел. Нельзя ли присоединить файл шрифта к .EXE файлу, и если можно, то как выводить текст этим шрифтом.
← →
Андрей Сенченко © (2004-08-26 14:49) [5]В ресурсы его клади. Подробности - в FAQ
← →
Aleksandar (2004-08-26 18:14) [6]Что-то ничего хорошего ни нашел в FAQ
← →
Aleksandar (2004-08-27 13:04) [7]Что то с модулем у меня не пашет. Скорее всего я что то не так делаю. Вот часть кода:
SetFont("GreekMathSymbols.ttf",fmInstall, FonName);
Form1.Canvas.Font.Name:=FonName;
Form1.Canvas.TextOut(1,1,"1234as");
Я так понимаю в FonName должно возвращаться имя шрифта, по которому и следует подключать шрифт. А у меня в FonName вообще ничего не возвращается (пустая строка).
Подскажите в чем дело.
← →
ssk © (2004-08-27 15:20) [8]Проблема вот в чем. Один раз выполнив команду fmInstall, за ней по окончании работ надо выполнять fmUnInstall (прописав, например, в FormCloseQuery), иначе при повторном запуске модуль будет возвращать пустую строку, так как шрифт уже проинсталлирован. Выход - перезагрузить компьютер и сразу в проекте прописать деинсталляцию шрифта. Все будет работать.
пример можно скачать отсюда ucad.pisem.net/delphi_demos/sskdinfont_example.zip (40к)
← →
ssk © (2004-08-27 15:21) [9]прошу прощения за кривой линк http://www.ucad.pisem.net/delphi_demos/sskdinfont_example.zip
← →
Aleksandar (2004-08-27 15:52) [10]Все отлично. Спасибо ssk.
И все-таки как присоединить файл шрифта к ресурсам, а затем выводить на форме этим шрифтом текст. Если не трудно, то приведите пожалуйста пример кода.
← →
ssk © (2004-08-27 16:06) [11]про ресурсы здесь
http://delphimaster.ru/cgi-bin/faq.pl?look=1&id=988622528&n=22
и здесь
http://delphimaster.ru/cgi-bin/faq.pl?look=1&id=988625327&n=21
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.034 c