क्रॉस प्लेटफ़ॉर्म समाधान को मैकएपी.एपकिट और विंडोज़ विनापी का सशर्त परिभाषाओं में एक साथ उपयोग करना चाहिए।
सबसे पहले अपने उपयोगों खंड करने के लिए इन कोड जोड़ें:
{$IFDEF MACOS}
MacApi.Appkit,Macapi.CoreFoundation, Macapi.Foundation,
{$ENDIF}
{$IFDEF MSWINDOWS}
Winapi.Messages, Winapi.Windows,
{$ENDIF}
फिर अपने कार्यान्वयन के लिए इस कोड जोड़ें:
{$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;
अब आप CollectFonts प्रक्रिया का उपयोग कर सकते हैं। प्रक्रिया में एक गैर-शून्य TStringlist पास करने के लिए मत भूलना। एक सामान्य उपयोग इस तरह हो सकता है।
Printer.ActivePrinter;
memo1.lines.AddStrings(Printer.Fonts);
उपयोग में FMX.Printer की घोषणा:
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;
स्रोत
2012-11-19 21:51:21
आपको बहुत बहुत धन्यवाद! जब मुझे इसका परीक्षण करने का मौका मिलता है तो मैं सही के रूप में स्वीकार करूंगा, लेकिन यह मेरे लिए एक अच्छा जवाब दिखता है :) – sergeantKK
हैलो, आप एक पूर्ण कामकाजी समाधान देखने के लिए मेरे ब्लॉग की जांच कर सकते हैं: http://delphiscience.wordpress.com/2012/11/20/हो रही-सिस्टम-फोंट-सूची-इन-फायरमोनकी-द-न्यू-टीप्लफार्मक्स्टेंशन-क्लास/ –
@ mehmed.ali वैसे; यहां आपकी प्रोफ़ाइल में एक जगह है जहां आप अपने ब्लॉग के होम पेज पर एक लिंक जोड़ सकते हैं (और चाहिए)। –