|
Вопрос # 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 букв
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|