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

nikolaynik

Пользователи
  • Постов

    1
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные nikolaynik

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

     

    Открыл для себя 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)
    
    

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

    Всем спасибо

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