Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #9  
Старый 25.09.2014, 13:46
limbast limbast вне форума
Прохожий
 
Регистрация: 24.09.2014
Сообщения: 2
Версия Delphi: Delphi XE2
Репутация: 10
По умолчанию

Все оказалось проще, но всё же непонятно. Ниже уже работающий код с объяснениями. Сразу ремарка: в проекте у L_Indicator шрифт выставлен как "Birch Std" с пробелом. Поэтому я его и пытался всегда использовать в run-time.
Делаю так:
В FormOnCreate проверяю наличие шрифта и, если его нет, извлекаю ресурс и регистрирую в системе:
Код:
if Screen.Fonts.IndexOf('Birch Std')=-1 then
  begin
    f_BirchStd:=ExtractFilePath(paramstr(0))+'FontBirchStd.otf';
    TResourceStream.Create(hInstance, 'Font_BirchStd', RT_RCDATA).SavetoFile(f_BirchStd);
    f_sys_B:=GetEnvironmentVariable('WINDIR');
    f_sys_B:=f_sys_B+'\FONTS\BirchStd.otf';
    CopyFile(PWideChar(f_BirchStd),PWideChar(f_sys_B),true);
    DeleteFile(PWideChar(f_BirchStd));
    hReg := TRegistry.Create;
    hReg.RootKey := HKEY_LOCAL_MACHINE;
    hReg.LazyWrite := false;
    hReg.OpenKey('Software\Microsoft\Windows NT\CurrentVersion\Fonts',false);
    hReg.WriteString('BirchStd (TrueType)','BirchStd.otf');
    hReg.CloseKey;
    hReg.free;
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
    FNewFont_BirchStd:=true;
  end;
Как можно увидеть, проверяю я наличие шрифта "Birch Std" (с пробелом в названии), а регистрирую шрифт без пробела.
Для использования шрифта "сразу" в первом запуске в FormOnShow делаю так:
Код:
  if FNewFont_BirchStd then
  begin
    if AddFontResource(PWideChar(f_sys_B))=0 then
      MessageDlg('Не удалось установить шрифт "BirchStd"!',mtError,[mbOK],0)
    else
    begin
      SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
      L_Indicator.Font.Name:='BirchStd';
    end;
  end;
Здесь тоже название шрифта без пробела. Если при регистрации и в L_Indicator.Font.Name:='BirchStd' ставить пробел, как было раньше, и как выставлен шрифт в дизайнере, то шрифт не опознается и не подключается, а вот без пробела работает.
Т.е. имя шрифта, регистрируемое в системе через реестр, с пробелом в имени, а по команде AddFontResource, его имя без пробела для этого шрифта. Для другого может быть по другому.
Почему так? Почему имя шрифта изменяется?

Последний раз редактировалось limbast, 25.09.2014 в 13:48.
Ответить с цитированием
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:30.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025