reading available fonts on system
- plantenkennis
- Posts: 151
- Joined: Wed Nov 25, 2015 7:13 pm
- Location: the Netherlands
- Contact:
reading available fonts on system
Hello,
Is it possible to check what fonts are available on a system. I want to put all fonts in an array, so the user can choose which font to use for printing some data.
I am looking for some function like "aFonts := ReadFonts()"
Is it possible to check what fonts are available on a system. I want to put all fonts in an array, so the user can choose which font to use for printing some data.
I am looking for some function like "aFonts := ReadFonts()"
Kind regards,
René Koot
René Koot
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: reading available fonts on system
René,
I am implementing ChooseFont() using Cocoa's NSFontPanel:
https://stackoverflow.com/questions/141 ... l-in-cocoa
I am implementing ChooseFont() using Cocoa's NSFontPanel:
https://stackoverflow.com/questions/141 ... l-in-cocoa
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: reading available fonts on system
First try:
Code: Select all
#include "FiveMac.ch"
function Main()
MsgInfo( ChooseFont() )
return nil
#pragma BEGINDUMP
#include <fivemac.h>
HB_FUNC( CHOOSEFONT )
{
NSFontManager * fontManager = [ NSFontManager sharedFontManager ];
NSFontPanel * fontPanel = [ fontManager fontPanel:YES ];
[ fontPanel makeKeyAndOrderFront: fontPanel ];
// [ NSApp runModalForWindow: fontPanel ];
}
#pragma ENDDUMP
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: reading available fonts on system
More...
https://stackoverflow.com/questions/923 ... rom-nsfont
Code: Select all
#include "FiveMac.ch"
function Main()
MsgInfo( ChooseFont() )
return nil
#pragma BEGINDUMP
#include <fivemac.h>
@interface FontPanelController : NSWindowController <NSWindowDelegate>
{
}
-( void ) changeFont: ( id ) sender;
-( void ) windowWillClose: ( id ) sender;
@end
@implementation FontPanelController
-( void ) changeFont: ( id ) sender
{
NSBeep();
}
- ( void ) windowWillClose: ( id ) sender
{
NSBeep();
[ NSApp abortModal ];
// hb_retc( [ [ sender font ].fontName cStringUsingEncoding : NSWindowsCP125$sCP1252StringEncoding ] );
hb_retc( "font name" );
}
@end
HB_FUNC( CHOOSEFONT )
{
NSFontManager * fontManager = [ NSFontManager sharedFontManager ];
NSFontPanel * fontPanel = [ fontManager fontPanel:YES ];
[ fontPanel setDelegate: [ [ FontPanelController alloc ] init ] ];
[ fontPanel makeKeyAndOrderFront: fontPanel ];
[ NSApp runModalForWindow: fontPanel ];
}
#pragma ENDDUMP
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: reading available fonts on system
This function ChooseFont() is working fine
I have implemented it as modal. Its easy to implement it as non modal too.
I have implemented it as modal. Its easy to implement it as non modal too.
Code: Select all
#include "FiveMac.ch"
function Main()
MsgInfo( ChooseFont() )
return nil
#pragma BEGINDUMP
#include <fivemac.h>
@interface FontPanelController : NSWindowController <NSWindowDelegate>
{
@public NSFont * font;
@public NSFont * newFont;
}
-( void ) changeFont: ( id ) sender;
-( void ) windowWillClose: ( id ) sender;
@end
@implementation FontPanelController
-( void ) changeFont: ( id ) sender
{
newFont = [ sender convertFont: font ];
}
- ( void ) windowWillClose: ( id ) sender
{
[ NSApp abortModal ];
hb_retc( [ [ ( newFont ? newFont: font ) displayName ] cStringUsingEncoding : NSWindowsCP1252StringEncoding ] );
}
@end
HB_FUNC( CHOOSEFONT )
{
NSFontManager * fontManager = [ NSFontManager sharedFontManager ];
NSFontPanel * fontPanel = [ fontManager fontPanel:YES ];
FontPanelController * fontPanelController = [ [ FontPanelController alloc ] init ];
[ fontPanel setDelegate: fontPanelController ];
fontPanelController->font = [ NSFont systemFontOfSize : 10 ];
[ fontPanel makeKeyAndOrderFront: fontPanel ];
[ NSApp runModalForWindow: fontPanel ];
}
#pragma ENDDUMP
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: reading available fonts on system
René,
I have added this new function ChooseFont() to FiveMac:
https://bitbucket.org/fivetech/fivemac/ ... d9d06858f3
So simply download the new FiveMac libs and try this example:
https://bitbucket.org/fivetech/fivemac/ ... /libfive.a
https://bitbucket.org/fivetech/fivemac/ ... libfivec.a
Will users ever notice that we are giving FiveMac for free... ?
I have added this new function ChooseFont() to FiveMac:
https://bitbucket.org/fivetech/fivemac/ ... d9d06858f3
So simply download the new FiveMac libs and try this example:
https://bitbucket.org/fivetech/fivemac/ ... /libfive.a
https://bitbucket.org/fivetech/fivemac/ ... libfivec.a
Code: Select all
#include "FiveMac.ch"
function Main()
MsgInfo( ChooseFont() )
return nil
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: reading available fonts on system
Dear Enrico,
Always
Always
- plantenkennis
- Posts: 151
- Joined: Wed Nov 25, 2015 7:13 pm
- Location: the Netherlands
- Contact:
Re: reading available fonts on system
Hello Antonio,
Thank you very much for this implementation, it looks very nice and easy to use.
But what I mean is a function that only puts the names of the fonts in an array. Than I can use that array in a COMBOBOX and use the name of the font in a print routine. Simular as in Word where the user can choose the font from a combobox and than the fontsize from another combobox.
Always thankful for all the help you give. If you need some financial support, please let me know.
Thank you very much for this implementation, it looks very nice and easy to use.
But what I mean is a function that only puts the names of the fonts in an array. Than I can use that array in a COMBOBOX and use the name of the font in a print routine. Simular as in Word where the user can choose the font from a combobox and than the fontsize from another combobox.
Always thankful for all the help you give. If you need some financial support, please let me know.
Kind regards,
René Koot
René Koot
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: reading available fonts on system
René,
This is function FM_AvailableFonts() that returns an array with all available fonts names:
This is an example of use:
Changes already commited to the FiveMac repository:
https://bitbucket.org/fivetech/fivemac/ ... 9b0c0b51d1
FiveMac modified C library already available from here:
https://bitbucket.org/fivetech/fivemac/ ... libfivec.a
This is function FM_AvailableFonts() that returns an array with all available fonts names:
Code: Select all
HB_FUNC( FM_AVAILABLEFONTS )
{
NSArray * aFonts = [ [ NSFontManager sharedFontManager ] availableFonts ];
int i;
hb_reta( [ aFonts count ] );
for( i = 0; i < [ aFonts count ]; i++ )
hb_storvc( [ ( NSString * ) [ aFonts objectAtIndex: i ] cStringUsingEncoding : NSWindowsCP1252StringEncoding ], -1, i + 1 );
}
Code: Select all
#include "FiveMac.ch"
function Main()
local oDlg, cVar
local aFonts := FM_availableFonts()
DEFINE DIALOG oDlg TITLE "Available fonts" SIZE 300, 300
@ 200, 50 COMBOBOX cVar ITEMS aFonts SIZE 200, 20 OF oDlg
ACTIVATE DIALOG oDlg CENTERED
return nil
https://bitbucket.org/fivetech/fivemac/ ... 9b0c0b51d1
FiveMac modified C library already available from here:
https://bitbucket.org/fivetech/fivemac/ ... libfivec.a
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- plantenkennis
- Posts: 151
- Joined: Wed Nov 25, 2015 7:13 pm
- Location: the Netherlands
- Contact:
Re: reading available fonts on system
Hello Antonio,
Sorry for the late response, I had a small vacation (needed it)
Thank you very much, this is just what I was looking for.
Sorry for the late response, I had a small vacation (needed it)
Thank you very much, this is just what I was looking for.
Kind regards,
René Koot
René Koot