Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Шрифт проверить и установить 
:(
    Опции темы
simsmann
Дата 24.12.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 26.11.2006

Репутация: нет
Всего: нет



Как проверить установлен ли опредеделенный шрифт в ОС и если не установлен установить?
PM MAIL   Вверх
maestro2k
Дата 24.12.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 13.4.2006

Репутация: нет
Всего: нет



в каталоге C:\WINDOWS\Fonts если он есть то установлен, если нет кинь туда... 
PM MAIL   Вверх
Nicholas_S
Дата 24.12.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 12.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 19



maestro2k, зашибись совет  smile 

simsmann, см. AddFontResource()
Подробное описание найдешь в WinAPI справке, прилагающуюся к Delphi.


--------------------
...все в мире относительно
PM   Вверх
simsmann
Дата 24.12.2006, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 26.11.2006

Репутация: нет
Всего: нет



maestro2k Можеш накидать туда хоть миллион шрифтовых файлов НО они не установятся Read FAQ Windows for ... smile smile

Добавлено @ 19:43 
Спасибо ! Nicholas_S

AddFontResource ф-ция устанавливает шрифт в системе

RemoveFontResource ф-ция удаляет шрифт

ф-ции из gdi32.dll Работает во всех Win32?
Да и остается еще как же определить установлен определенный шрифт в системе?





Это сообщение отредактировал(а) simsmann - 24.12.2006, 19:30
PM MAIL   Вверх
simsmann
Дата 26.12.2006, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 26.11.2006

Репутация: нет
Всего: нет



Установлен ли определеный шрифт в системе, по этому вопросу коечто нашел переработал вот что получилось:

Код

//**
Type TPBoolean=^Boolean;
//**
function EnumProc(var elf: TEnumLogFont; var ntm: TNewTextmetric; FontType: Integer; FlagData: TPBoolean): Integer; stdcall;
begin
{Проверяем шрифты для данного данного семейства}
 if fonttype = TRUETYPE_FONTTYPE then
  begin
   FlagData^:=true;
   Result:=0;
  end else Result:=1; //просматриваем дальше
end;


procedure TForm1.Button1Click(Sender: TObject);
var
aFonts:TStrings;
f:boolean;
i:integer;
begin
f:=false;
aFonts:=TStringList.Create;
aFonts.Assign(Screen.Fonts);
i:=aFonts.Count;
if i>0 then
 repeat
  dec(i);
   if ansicomparetext(aFonts.Strings[i],'Tahoma')=0 then
        EnumFontFamilies(Self.Canvas.Handle, PChar(aFonts.Strings[i]),@EnumProc, integer(PChar(@f)));
 until (i=0)or(f);
aFonts.Free;
if f then
 begin
  ShowMessage('Tahoma - Found!');
  end else
 begin
  ShowMessage('Tahoma - Not Found!');
  end;
end;


Все работает !  smile 

Установка и удаление шрифта для своей программы лучше это предусмотреть при создании и разрушении глвной формы:

Код

//Install FONT
function LoadFont(sFontFile: string): boolean;
begin
try
if FileExists( sFontFile ) then begin
   sFontFile := sFontFile + #0;
    if AddFontResource( @sFontFile[ 1 ] ) = 0 then begin
      Result := false;
    end
    else begin
      SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
      Result := true;
      ShowMessage('Install Ok');
    end;
end
else begin
   Result := false;
end;
except
  Result := false;
end;
end;
//UninStall FONT
function DeleteFont(sFontFile: string): boolean;
begin
try
   sFontFile := sFontFile + #0;
    if RemoveFontResource( @sFontFile[ 1 ] ) = false then begin
      Result := false;
      ShowMessage('Error UninInstall');
    end
    else begin
      SendMessage( HWND_BROADCAST, WM_FONTCHANGE, 0, 0 );
      Result := true;
      ShowMessage('UninInstall Ok');
    end;
except
  Result := false;
   ShowMessage('Error !!!');
end;
end;


где sFontFile: string полный путь к вашему шрифту. Но этот шрифт не будет установлен в системе если даже шрифт не удалить, то после перезагрузки он не будет установден.

УМНИКИ !!! PLEASE !!! Как же установить шрифт в систему. На форуме есть кое что но это не верно, пишут надо прописать в реестре после копирования в папку font и его установки в ветви - 'Software\Microsoft\Windows\CurrentVersion\Fonts' такой ветви нет по крайне мере в XP в других пока не смотрел, но если в других даже и есть должна быть универсальность. Облазил весь реестр, прочесал ввел arial и пробовал другие в каких только прогах нет но в системе не нашел. Может его регистрация в системе другая? 
Так как же установить шрифт в систему ???????????

И еще как извлечь из ресурса для копирования в папку - font ? На данный вопрос тоже пока нет ответа!

Неприменно жду ваших ответов!!! smile 





Это сообщение отредактировал(а) simsmann - 26.12.2006, 22:36
PM MAIL   Вверх
Тилос
Дата 5.1.2007, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


SeparatorSoft



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.1.2007
Где: Красноярск

Репутация: нет
Всего: нет



У меня вопрос:

У меня есть шрифт TilosShrift, который содержится в папке MyFont в моем приложении.
Мне нужно шрифт Label1 поменять на этот самый TilosShrift. 
Как это осуществить?

ps: меня тормозит лишь то, что TilosShrift содержится не в системных шрифтах, а в простой папке, и я не знаю как сослаться на него (если просто TilosShrift запихать в системные шрифты, то исключается возможность пользоваться этим шрифтом на других машинах, где нету его)  smile 
PM MAIL WWW ICQ   Вверх
VICTAR
Дата 5.1.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: нет
Всего: 80



Цитата(Тилос @  5.1.2007,  20:33 Найти цитируемый пост)
ps: меня тормозит лишь то, что TilosShrift содержится не в системных шрифтах, а в простой папке, и я не знаю как сослаться на него (если просто TilosShrift запихать в системные шрифты, то исключается возможность пользоваться этим шрифтом на других машинах, где нету его) 


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

Я всегда делал так: 
Код

procedure InstallFont(ResName:PansiChar;FontFileName:string);
 var
  Res : TResourceStream;
 begin
  Res := TResourceStream.Create(hInstance, ResName, RT_RCDATA);
   Res.SaveToFile(FontFileName);
    Res.Free;
   AddFontResource(PChar(FontFileName));
  SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;


PM MAIL   Вверх
Тилос
Дата 9.1.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


SeparatorSoft



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.1.2007
Где: Красноярск

Репутация: нет
Всего: нет



Чтобы вызвать процедуру не понял чем является ResName.

Напиши как вызвать процедуру...

InstallFont(?,'TilosShrift')?
PM MAIL WWW ICQ   Вверх
VICTAR
Дата 9.1.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: нет
Всего: 80



Код

InstallFont('имя_ресурса','полный_путь_к_файлу');

т.е. когда ты добавляешь шрифт к ресурсу, задаешь ему имя. 
Например вот так:
TilosShrift RCDATA "С\...\TilosShrift.ttf"
тогда:
Код

InstallFont('TilosShrift','полный_путь_к_файлу');

Надеюсь понятно объяснил...

PM MAIL   Вверх
CAM
Дата 5.7.2007, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 28.6.2007

Репутация: нет
Всего: нет



Цитата(Тилос @ 5.1.2007,  20:33)
У меня вопрос:

У меня есть шрифт TilosShrift, который содержится в папке MyFont в моем приложении.
Мне нужно шрифт Label1 поменять на этот самый TilosShrift. 
Как это осуществить?

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

Как решили данный вопрос?
У меня точно такая же задача (только шрифт другой)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.2926 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.