![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с файлами шрифтов [D7, Win95/98, NT4, Win2k, WinXP]
Aleksandar © (2004-08-26 13:17:00)Как можно выводить текст (к примеру на форму) нестандартным шрифтом, т.е. файл шрифта в Windows’e не установлен, а находиться в тойже директории что и исполняемый файл программы.
ssk (2004-08-27 16:06:00) [1]про ресурсы здесь
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
Aleksandar (2004-08-27 15:52:00) [2]Все отлично. Спасибо ssk.
И все-таки как присоединить файл шрифта к ресурсам, а затем выводить на форме этим шрифтом текст. Если не трудно, то приведите пожалуйста пример кода.
ssk (2004-08-27 15:21:00) [3]прошу прощения за кривой линк http://www.ucad.pisem.net/delphi_demos/sskdinfont_example.zip
ssk (2004-08-27 15:20:00) [4]Проблема вот в чем. Один раз выполнив команду fmInstall, за ней по окончании работ надо выполнять fmUnInstall (прописав, например, в FormCloseQuery), иначе при повторном запуске модуль будет возвращать пустую строку, так как шрифт уже проинсталлирован. Выход - перезагрузить компьютер и сразу в проекте прописать деинсталляцию шрифта. Все будет работать.
пример можно скачать отсюда ucad.pisem.net/delphi_demos/sskdinfont_example.zip (40к)
Aleksandar (2004-08-27 13:04:00) [5]Что то с модулем у меня не пашет. Скорее всего я что то не так делаю. Вот часть кода:
SetFont('GreekMathSymbols.ttf',fmInstall, FonName);
Form1.Canvas.Font.Name:=FonName;
Form1.Canvas.TextOut(1,1,'1234as');
Я так понимаю в FonName должно возвращаться имя шрифта, по которому и следует подключать шрифт. А у меня в FonName вообще ничего не возвращается (пустая строка).
Подскажите в чем дело.
Aleksandar (2004-08-26 18:14:00) [6]Что-то ничего хорошего ни нашел в FAQ
Андрей Сенченко (2004-08-26 14:49:00) [7]В ресурсы его клади. Подробности - в FAQ
Aleksandar (2004-08-26 14:11:00) [8]Спасибо ssk.
Тут еще вопросик назрел. Нельзя ли присоединить файл шрифта к .EXE файлу, и если можно, то как выводить текст этим шрифтом.
ssk (2004-08-26 14:00:00) [9]держи модуль. думаю, сам разберешься:
{
Модуль для динамического подключения-отключения шрифтов
}
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 13:55:00) [10]Если не трудно, то поподробнее.
ssk (2004-08-26 13:50:00) [11]1. подключить динамически
AddFontResource(PChar(FontName));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
2. поработать
3. затем выгрузить
RemoveFontResource(PChar(FontName));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);