Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.042 c
10-1036587142
49
2002-11-06 15:52
2004.09.12
клиент не может найти orbpas50.dll


14-1092981173
Мастер
2004-08-20 09:52
2004.09.12
Интересные правила на ixbt ;-)


1-1093786680
Antonmm
2004-08-29 17:38
2004.09.12
Размер файла


4-1091175026
Andriy Tysh
2004-07-30 12:10
2004.09.12
Включён ли "принтер по умолчанию"?


1-1093344430
Sourse
2004-08-24 14:47
2004.09.12
Как отследить обращение к реестру?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский