Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 736

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!назрел такой вопрос как можно в свою программу "запихнуть" шрифт? Например моя программа использует шрифт Comic sans как сделать так чтобы он независимо от того установлен ли он в системи отображался правильно?

Аксион Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Аксион (статус: 4-ый класс)
Вопрос отправлен: 13 июля 2007, 10:49
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, Матвеев Мефодий Олегович!
При запуске программы нужно подключить шрифт к системе: AddFontResource(PChar('путь_к_файлу_шрифта')); После этого его можно использовать как обычный шрифт, т.е. нужно выполнить {имя_компонента}.Font.Name:='имя_шрифта'; При выходе из программы желательно свой шрифт отключить (хотя можно и оставить при условии, что файл шрифта - *.ttf останется в том же каталоге). Отключается шрифт функцией RemoveFontResource();
Удачи!

Ответ отправил: Dron (статус: Студент)
Время отправки: 13 июля 2007, 11:07
Оценка за ответ: 3

Комментарий к оценке: Это я в Delphi Russian Knowledge Base видел

Ответ #2. Отвечает эксперт: Николай Рубан

Здравствуйте, Матвеев Мефодий Олегович!

Предлагаю Вам шрифт прикрепить к приложению как ресурс и далее просто в нужный момент просто извлекаете файл шрифта из программы и переправляете его в папку со шрифтами либо в соответствующий каталог.
В приложении код который позволяет это сделать, как правильно создать ресурс и работать с ним Вы можете прочитать ряд статей по такой ссылке http://delphiworld.narod.ru/_files_.html раздел "Ресурсы".

В моей программе файл шрифта извлекается из приложения и сразу переноситься в системную папку Font - причем предварительно ведется проверка нет ли уже такого шрифта.

Good Luck!!!

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, ShlObj;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. Label1: TLabel;
  13. procedure Button1Click(Sender: TObject);
  14. procedure FormCreate(Sender: TObject);
  15. private
  16. { Private declarations }
  17. public
  18. { Public declarations }
  19. end;
  20.  
  21. var
  22. Form1: TForm1;
  23.  
  24. implementation
  25.  
  26. {$R *.dfm}
  27.  
  28.  
  29.  
  30. var tmp:array[0..MAX_PATH] of Char;
  31. pidl:PItemIDList;
  32. begin
  33. SHGetSpecialFolderLocation(0,CSIDL_FONTS, pidl);
  34. SHGetPathFromIDList(pidl,@tmp);
  35. if tmp[Length(tmp)-1]<>''
  36. then Result:=StrPas(tmp)+''
  37. else Result:=StrPas(tmp);
  38. end;
  39.  
  40.  
  41. procedure TForm1.Button1Click(Sender: TObject);
  42. begin
  43. AddFontResource(PChar(GetFntPath+'amadeus.ttf'));
  44. Label1.Font.Name:='amadeus';
  45. Form1.Refresh;
  46. end;
  47.  
  48. procedure TForm1.FormCreate(Sender: TObject);
  49. var f:TFileStream;
  50. rs:TResourceStream;
  51. begin
  52. try
  53. rs:=TResourceStream.Create(HInstance, 'AMAD', RT_RCDATA);
  54. if not FileExists(GetFntPath+'amadeus.ttf') then
  55. begin
  56. f:=TFileStream.Create(GetFntPath+'amadeus.ttf',fmCreate);
  57. f.CopyFrom(rs,rs.Size);
  58. f.Free;
  59. end;
  60. finally
  61. rs.Free;
  62. end;
  63. end;
  64.  
  65. end.


Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 13 июля 2007, 13:58
Оценка за ответ: 5

Комментарий к оценке: Спасибо за инсталятор шрифтов

Мини-форум вопроса

Всего сообщений: 12; последнее сообщение — 13 июля 2007, 11:48; участников в обсуждении: 3.
Dron

Dron (статус: Студент), 13 июля 2007, 10:55 [#1]:

Для справки: шрифт Comic Sans MS стандартный, он есть во всех версиях Windows.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 13 июля 2007, 11:02 [#2]:

Да но в некоторых например win2000 он "немнога" другой если в хр он 'плавный' то в 2000 он с зазубринками, да и удруга на хр его не было (почему не знаю) вот по этому на всякий пожарный я и хочу его запихнуть
Аксион

Аксион (статус: 4-ый класс), 13 июля 2007, 11:03 [#3]:

dron вопрос на засыпку как сделать так чтобы outlook 2007 только принимал почту но не пытался отправлять?
Dron

Dron (статус: Студент), 13 июля 2007, 11:04 [#4]:

Никаких зазубринок там нет. Точнее, они если и есть, то везде. Отображение зависит от установленного сглаживания шрифтов в системе.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 13 июля 2007, 11:07 [#5]:

ладно но всётаки как запихнуть шрифт в прогу?
Dron

Dron (статус: Студент), 13 июля 2007, 11:08 [#6]:

> dron вопрос на засыпку как сделать так чтобы outlook 2007 только принимал почту но не пытался отправлять?

Вы в курсе вообще, какова тема всего портала? За флуд и тем более не по теме можно и забанить.
С уважением.
Dron

Dron (статус: Студент), 13 июля 2007, 11:10 [#7]:

Сам файл шрифта лучше распространять отдельным файлом, наравне с исполняемым. Либо его можно подключить к exe-файлу как ресурс, а затем извлечь в какой-то каталог.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 13 июля 2007, 11:16 [#8]:

А можно его чтобы он был в самом ехе и чтобы распаковывать не надо было?
Dron

Dron (статус: Студент), 13 июля 2007, 11:17 [#9]:

Нет, так скорее всего не получится. Когда шрифт "запакован" в файле, к нему нет прямого доступа.
С уважением.
Аксион

Аксион (статус: 4-ый класс), 13 июля 2007, 11:20 [#10]:

плохо :(
Вадим К

Вадим К (статус: Академик), 13 июля 2007, 11:44 [#11]:

to Матвеев Мефодий Олегович:
Dimit - это не ваш ник в ирке?
Вопрос больно похож. Если уж сильно хочеться, что бы шрифт не надо было распаковывать, есть ещё один способ - рисовать буковки полностью самостоятельно. Но много прийдётся рисовать...
Галочка "подтверждения прочтения" - вселенское зло.
Аксион

Аксион (статус: 4-ый класс), 13 июля 2007, 11:48 [#12]:

нет я в мирке редко бываю и ник у меня из 2 букв

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:42
Выполнено за 0.03 сек.