Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как инсталировать шрифт в систему? [WinXP]


demon ©   (2008-11-16 22:17:00) 

Есть несколько шрифтов (*.ttf файлов), их нужно установить с систему, как это сделать?


demon   (2008-11-18 01:22:00) [1]

Ура! Заработало.
нужно было добавить
AddFontResource(pchar(fname2));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);


ЗЫ. Покритикуйте код, как правильнее было бы?


demon   (2008-11-18 00:37:00) [2]

вот написал код:
program addTTF;

{$APPTYPE CONSOLE}

uses  Windows, SysUtils, registry;

var
fname,fname2, temp:string;
PWindowsDir: array [0..255] of Char;
hReg: TRegistry;

procedure haveerror(i : integer);
begin
 case i of
   0: writeln('Error with copyring. ');
   1: writeln('Error with adding to registry. ');
 end;
 halt;
end;

begin
if ParamCount > 0 then
begin
 if FileExists(ParamStr(1)) and (uppercase(extractfileext(ParamStr(1)))='.TTF') then
   begin
     try
       GetWindowsDirectory(PWindowsDir,255);
       fname:=expandfilename(ParamStr(1)) ;
       fname2:=PWindowsDir+'\FONTS\'+extractfilename(ParamStr(1));
       CopyFile(pchar(fname), pchar(fname2), true);
     except
       haveerror(0);
     end;
     try
       hReg := TRegistry.Create;
       hReg.RootKey := HKEY_LOCAL_MACHINE;
       hReg.LazyWrite := false;
       hReg.OpenKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts', false);
       temp:=extractfilename(ParamStr(1));  
       delete(temp, length(temp)-3, 4);
       hReg.WriteString(temp+' (TrueType)', extractfilename(ParamStr(1)));
       hReg.CloseKey;
       hReg.free;
     except
       haveerror(1);
     end;
     writeln('Successful') ;
   end else writeln('error') ;
end else
begin
 writeln('Programm addTTF install TTF font in system');
 writeln('Use: addTTF <filename>');
end;

end.


не появляеться шрифт в системе, хотя в папку скопировался и в реестр добавился.


demon   (2008-11-17 21:42:00) [3]

нуу нет, это типа программа-инсталятор, вернее это командный файлы был изначально, приводивший свежеустановленую систему в нужное мне состояние (ну там проги с rar-ов распаковавал и настройки в реестр вносил), но шрифты так просто не установишь, вот и пишу консольную утилитку :)


CodeMaster   (2008-11-17 21:30:00) [4]

Вообще не понимаю зачем тебе инсталировать Шрифт в систему? Делаешь программу - закидываешь в её директорию файл шрифта, связываешь функцией AddFontResource и работаешь как с обычным шрифтом.

А вообще лучше канешно сделать на WinApi, там и эффектов можно добиться неплохих.


demon   (2008-11-17 03:39:00) [5]

Все ровно там нету ничего по извлечению информации о названии шрифта из ttf файла, просто добавляеться заранее прописаное название.
А можно ли где глянуть спецификацию по ttf файлам (ну там описание формата, не знаю как правильно сказать...)?


Германн   (2008-11-17 01:28:00) [6]


> demon ©   (17.11.08 00:38) [5]
>
> Нет, не проинсталирует.
> Но если после копирования открыть Fonts с панели управления,
>  то шрифты пропишуться в реестр.
>

Возможно поможет этот ответ:
http://www.delphi-club.ru/delphi/add_true_type_font.html
Токо он несколько устарел. Ветка реестра Fonts нынче находится в другом месте.


demon   (2008-11-17 00:38:00) [7]

Нет, не проинсталирует.
Но если после копирования открыть Fonts с панели управления, то шрифты пропишуться в реестр.


{RASkov}   (2008-11-17 00:27:00) [8]

> в системную папку

ну имелось в виду [1]) т.е. %SystemRoot%\Fonts


{RASkov}   (2008-11-17 00:26:00) [9]

> [2] demon ©   (16.11.08 23:42)

Пробывать не охото.... но помоему простое копирование в системную папку файла со шрифтом(ами) и ось сама все проинсталирует...
А вообще есть АПИ функции для работы со шрифтами посмотри: Font and Text Functions
и например: AddFontResource


demon   (2008-11-16 23:42:00) [10]

Это понятно.
А как тогда получить название шрифта чтобы дабавить его в реестр?


CodeMaster   (2008-11-16 23:02:00) [11]

Ищешь папку Fonts и копируешь туда всё (подсказка реестр)


Наверх

Титульная страница Поиск, карта сайта Написать письмо