Главная страница
    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.034 c
14-1093111146
Черный прапор
2004-08-21 21:59
2004.09.12
Какую (подерженную) иномарку выбрать


1-1093871349
Erik1
2004-08-30 17:09
2004.09.12
Как изменить во время (Pause, Resume) TimeOut сервиса?


4-1090878975
g-l-u-k
2004-07-27 01:56
2004.09.12
Сравнение файлов на winapi и поиск различий


14-1092945048
Voprosov_net
2004-08-19 23:50
2004.09.12
Грустно.


1-1093528640
Age
2004-08-26 17:57
2004.09.12
Блокировка печати в QReport





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