Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8859555
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 14, 20262026-06-14T15:05:39+00:00 2026-06-14T15:05:39+00:00

In order to create a font picker I need to get the list of

  • 0

In order to create a font picker I need to get the list of fonts available to Firemonkey.
As Screen.Fonts doesn’t exist in FireMonkey I thought I’d need to use FMX.Platform ?
eg:

if TPlatformServices.Current.SupportsPlatformService(IFMXSystemFontService, IInterface(FontSvc)) then
  begin
    edit1.Text:= FontSvc.GetDefaultFontFamilyName;
  end
  else
    edit1.Text:= DefaultFontFamily;

However, the only function available is to return the default Font name.

At the moment I’m not bothered about cross-platform support but if I’m going to move to Firemonkey I’d rather not rely on Windows calls where possible.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-14T15:05:41+00:00Added an answer on June 14, 2026 at 3:05 pm

    The cross platform solution should use the MacApi.AppKit and Windows.Winapi together in conditional defines.

    First Add these code to your uses clause:

    {$IFDEF MACOS}
    MacApi.Appkit,Macapi.CoreFoundation, Macapi.Foundation,
    {$ENDIF}
    {$IFDEF MSWINDOWS}
    Winapi.Messages, Winapi.Windows,
    {$ENDIF}
    

    Then add this code to your implementation:

    {$IFDEF MSWINDOWS}
    function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric;
      FontType: Integer; Data: Pointer): Integer; stdcall;
    var
      S: TStrings;
      Temp: string;
    begin
      S := TStrings(Data);
      Temp := LogFont.lfFaceName;
      if (S.Count = 0) or (AnsiCompareText(S[S.Count-1], Temp) <> 0) then
        S.Add(Temp);
      Result := 1;
    end;
    {$ENDIF}
    
    procedure CollectFonts(FontList: TStringList);
    var
    {$IFDEF MACOS}
      fManager: NsFontManager;
      list:NSArray;
      lItem:NSString;
    {$ENDIF}
    {$IFDEF MSWINDOWS}
      DC: HDC;
      LFont: TLogFont;
    {$ENDIF}
      i: Integer;
    begin
    
      {$IFDEF MACOS}
        fManager := TNsFontManager.Wrap(TNsFontManager.OCClass.sharedFontManager);
        list := fManager.availableFontFamilies;
        if (List <> nil) and (List.count > 0) then
        begin
          for i := 0 to List.Count-1 do
          begin
            lItem := TNSString.Wrap(List.objectAtIndex(i));
            FontList.Add(String(lItem.UTF8String))
          end;
        end;
      {$ENDIF}
      {$IFDEF MSWINDOWS}
        DC := GetDC(0);
        FillChar(LFont, sizeof(LFont), 0);
        LFont.lfCharset := DEFAULT_CHARSET;
        EnumFontFamiliesEx(DC, LFont, @EnumFontsProc, Winapi.Windows.LPARAM(FontList), 0);
        ReleaseDC(0, DC);
      {$ENDIF}
    end;
    

    Now you can use CollectFonts procedure. Don’t forget to pass a non-nil TStringlist to the procedure.A typical usage may be like this.

    procedure TForm1.FormCreate(Sender: TObject);
    var fList: TStringList;
        i: Integer;
    begin
      fList := TStringList.Create;
      CollectFonts(fList);
      for i := 0 to fList.Count -1 do
      begin
         ListBox1.Items.Add(FList[i]);
      end;
      fList.Free;
    end;
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have this piece of XML that I use in order to create a
could someone please tell me what I need to do in order to create
I cant seem to get this working, i need to display the Total Order
Suppose I created index with descending order CREATE INDEX `MyTable.MyIndex` USING BTREE ON `MyTable`
In order to create a more elegant solution I'm curios to know your suggestion
When using Redis in order to create a record you can create a hash
Right now I'm using JFreeChart in order to create a dynamic chart. However the
I'm trying to convert datetime2 to datetime in order to create a standard between
I'm using the openssl utility of debian in order to create a certificate. The
I'm using the following script in my website in order to create pagination next-previous

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.