Пятница - 23.04.2021 - 07:16:46
2202
0
   Очень часто приходится сталкиваться с такой ситуацией, когда собственная программа, на другом компьютере, вместо надписей на кнопках, лабелах и т.д., отображает какие-то иероглифы. Одна из причин - в системе отсутствуют шрифты, которыми мы пользуемся в своих программах. Вещь, конечно, не приятная, чтобы ее исправить, необходимо установить свои шрифты в системе. Как это сделать и будет показано ниже. И еще мой совет, пользуйтесь в каждой программе проверкой на наличие шрифтов в системе - это предохранит от неприятных неожиданностей. Еще добавлена функция, которая выводит все установленные в системе шрифты. Все, возникнут вопросы, критика и т.д. - пишите в гоствую книгу.
Среда программирования C++Builder 6.

7. Установка шрифтов в системе


//---------------------------------------------------------
//объявляем в файле .h
bool __fastcall IsMyFonts(String nameFont);
void __fastcall InstallMyFonts(String nameFont);


//********************* файл .сср ***************************
//-------------проверка на наличие шрифта------------------- 
bool __fastcall TMyDataModule::IsMyFonts(String nameFont)
{
 char WinSysDir[256];
 GetWindowsDirectory(WinSysDir,256);
 nameFont=String(WinSysDir)+"\\Fonts\\"+nameFont;
 if(FileExists(nameFont))
 {return 1;}
 else
 {return 0;}
}

//-------------устновка шрифта--------------------------------
void __fastcall TMyDataModule::InstallMyFonts(String nameFont)
{
 char WinSysDir[256];
 GetWindowsDirectory(WinSysDir,256);
 nameFont=String(WinSysDir)+"\\Fonts\\"+nameFont;
 if(!FileExists(nameFont))
 {
  //у меня шрифт упакован в файл ресурса, поэтому если шрифт
  //не упакован, тогда нужно изменить код и воспользоваться
  //функцией копирования файлов. Главное поместить шрифт в системную
  //папку Fonts. Как вы это сделаете - ваша фантазия. Способов в
  //Builder-e C++ множество.  
  TResourceStream *pObj=new TResourceStream(0,"FONTSVERDANA1","MYFONT");
  pObj->SaveToFile(nameFont);
  delete pObj;
  ShowMessage("Шрифт < "+nameFont+" > - установлен");}
}
//------------------------------------------------------------
//чтобы просмотреть все шрифты, установленные в системе,
//используем следующий код:
for(int i=0; i<Screen->Fonts->Strings[i]; i++)
{ListBox1->Items->Add(Screen->Fonts->Strings[i]);}
//------------------------------------------------------------