Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

Работа с файлами шрифтов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
3-1092819526
surkis
2004-08-18 12:58
2004.09.12
Access


1-1093580888
samumka
2004-08-27 08:28
2004.09.12
Работа с датой в Delphi?


14-1093516749
Micah'GF
2004-08-26 14:39
2004.09.12
Ищу аналог Visio


1-1093589612
dim-
2004-08-27 10:53
2004.09.12
Почему повторный вызов dll вызывает ошибку?


1-1093405354
COOLer
2004-08-25 07:42
2004.09.12
DataSet to XML