| 
| 
 | Вопрос # 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!!!
 Приложение:Переключить в обычный режим unit Unit1; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ShlObj; type  TForm1 = class(TForm)    Button1: TButton;    Label1: TLabel;    procedure Button1Click(Sender: TObject);    procedure FormCreate(Sender: TObject);  private    { Private declarations }  public    { Public declarations }  end; var  Form1: TForm1; implementation {$R *.dfm}   var tmp:array[0..MAX_PATH] of Char;    pidl:PItemIDList;begin  SHGetSpecialFolderLocation(0,CSIDL_FONTS, pidl);  SHGetPathFromIDList(pidl,@tmp);  if tmp[Length(tmp)-1]<>''     then Result:=StrPas(tmp)+''     else Result:=StrPas(tmp);end;  procedure TForm1.Button1Click(Sender: TObject);begin AddFontResource(PChar(GetFntPath+'amadeus.ttf'));  Label1.Font.Name:='amadeus';  Form1.Refresh;end; procedure TForm1.FormCreate(Sender: TObject);var f:TFileStream;    rs:TResourceStream;begin  try    rs:=TResourceStream.Create(HInstance, 'AMAD', RT_RCDATA);    if not FileExists(GetFntPath+'amadeus.ttf') then    begin      f:=TFileStream.Create(GetFntPath+'amadeus.ttf',fmCreate);      f.CopyFrom(rs,rs.Size);      f.Free;    end;  finally    rs.Free;  end;end; end.
|  | Ответ отправил: Николай Рубан (статус: 10-ый класс)Время отправки: 13 июля 2007, 13:58
 Оценка за ответ: 5
 Комментарий к оценке: Спасибо за инсталятор шрифтов |  
 Мини-форум вопросаВсего сообщений: 12; последнее сообщение — 13 июля 2007, 11:48; участников в обсуждении: 3. 
|   | 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 (статус: Студент), 13 июля 2007, 11:04 [#4]:Никаких зазубринок там нет. Точнее, они если и есть, то везде. Отображение зависит от установленного сглаживания шрифтов в системе. С уважением. |  
|   | Аксион (статус: 4-ый класс), 13 июля 2007, 11:07 [#5]:ладно но всётаки как запихнуть шрифт в прогу? |  
|   | Dron (статус: Студент), 13 июля 2007, 11:08 [#6]:> dron вопрос на засыпку как сделать так чтобы outlook 2007 только принимал почту но не пытался отправлять? 
 Вы в курсе вообще, какова тема всего портала? За флуд и тем более не по теме можно и забанить.
 С уважением. |  
|   | Dron (статус: Студент), 13 июля 2007, 11:10 [#7]:Сам файл шрифта лучше распространять отдельным файлом, наравне с исполняемым. Либо его можно подключить к exe-файлу как ресурс, а затем извлечь в какой-то каталог. С уважением. |  
|   | Аксион (статус: 4-ый класс), 13 июля 2007, 11:16 [#8]:А можно его чтобы он был в самом ехе и чтобы распаковывать не надо было? |  
|   | 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 букв |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |