Перейти к содержанию
Fire Monkey от А до Я
  • 0

Друзья, помогите получить шрифты


nikolaynik

Вопрос

Здравствуйте, дорогие друзья!

 

Открыл для себя firemonkey, и неожиданно поняд, что крос платформенность - тяжелая для меня ноша!

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

Обнаружил, что в firemonkey нет TFontDialog, нет TFontList.

 

Ситуация бесfontовая!

 

Благо есть интернет. И там, добрый человек - честь и хвала ему - детально раскладывает, как решить эту задачу хоть для windows, хоть для Mac.

https://delphiscience.wordpress.com/2012/11/20/getting-system-fonts-list-in-firemonkey-the-new-tplatformextensions-class/

 

Но снова судьба злодейка кинула! Коды на Delphi! А я только начал разбираться в СИ++.

 

В общем, прошу Вас, друзья, помочь мне адаптировать тот код под СИ, и вконце концов получить список системных шрифтов:

 

TPlatformExtention.h

//---------------------------------------------------------------------------

#ifndef PlatformExtentionH
#define PlatformExtentionH

//---------------------------------------------------------------------------
#include <System.Classes.hpp>
//---------------------------------------------------------------------------
class TPlatformExtention: public TObject{

  public:
  void FGetSystemFonts( TStringList *FontList );

};
//---------------------------------------------------------------------------
#endif

TPlatformExtention.cpp

//---------------------------------------------------------------------------

#pragma hdrstop
#include <string>
#include "PlatformExtention.h"

//---------------------------------------------------------------------------
int FEnumFonts( TLogFont LogFont, TTextMetric TextMetric, unsigned long FontType, long Data ){
  TStringList *List = new TStringList();
  UnicodeString fName;

  fName = LogFont.lfFaceName;
  if( List->Count == 0 || (AnsiCompareText(List[List->Count-1].Text, fName) != 0 ) ){
	List->Add( fName );
	return 1;
  }
  return 0;
}
//---------------------------------------------------------------------------
void TPlatformExtention::FGetSystemFonts( TStringList *FontList ){
  HDC dContext;
  TLogFont *LogFont = new TLogFont;

  dContext = GetDC(0);
  StringOfChar( *(LogFont->lfFaceName), sizeof( LogFont ) );
  LogFont->lfCharSet = DEFAULT_CHARSET;
  EnumFontFamiliesEx( dContext, LogFont, FEnumFonts, 0, 0 );
  ReleaseDC(0, dContext);
}
//---------------------------------------------------------------------------
#pragma package(smart_init)

Моя признательность всем откликнувшимся не знает границ.

Всем спасибо

Ссылка на комментарий

Рекомендуемые сообщения

Ответов пока нет

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...