From e0905893f512b9bfd27c649d87e1f6a51e97fbff Mon Sep 17 00:00:00 2001 From: jesus Date: Wed, 9 Oct 2013 04:36:52 +0000 Subject: [PATCH] Printers, implements printer.fonts (windows), issue #17122 git-svn-id: trunk@43184 - --- components/printers/win32/winprinters.inc | 31 +++++++++++++++++++++ components/printers/win32/winprinters_h.inc | 1 + lcl/printers.pas | 4 ++- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/components/printers/win32/winprinters.inc b/components/printers/win32/winprinters.inc index 54bc10d557..4caa4ace8b 100644 --- a/components/printers/win32/winprinters.inc +++ b/components/printers/win32/winprinters.inc @@ -1169,6 +1169,37 @@ begin end; end; +function PrinterEnumFontsProc( + var ELogFont: LCLType.TEnumLogFontEx; + var Metric: LCLType.TNewTextMetricEx; + FontType: Longint; + Data:LParam):Longint; stdcall; +var + S: string; + Lst: TStrings; +begin + s := StrPas(ELogFont.elfLogFont.lfFaceName); + Lst := TStrings(PtrInt(Data)); + if Lst.IndexOf(S)<0 then + Lst.AddObject(S, TObject(PtrInt(FontType))); + result := 1; +end; + +procedure TWinPrinter.DoEnumFonts(Lst: TStrings); +var + Lf: TLogFont; +begin + if (Lst=nil) then + exit; + Lst.Clear; + if Printers.Count>0 then begin + Lf.lfFaceName := ''; + Lf.lfCharSet := DEFAULT_CHARSET; + Lf.lfPitchAndFamily := 0; + LCLIntf.EnumFontFamiliesEx(Canvas.Handle, @Lf, @PrinterEnumFontsProc, PtrInt(Lst), 0); + end; +end; + initialization Printer:=TWinPrinter.Create; diff --git a/components/printers/win32/winprinters_h.inc b/components/printers/win32/winprinters_h.inc index 65682ca10f..34504ef31a 100644 --- a/components/printers/win32/winprinters_h.inc +++ b/components/printers/win32/winprinters_h.inc @@ -60,6 +60,7 @@ Type function DoGetDefaultBinName: string; override; function DoGetBinName: string; override; procedure DoSetBinName(aName: string); override; + procedure DoEnumFonts(Lst: TStrings); override; function DoSetPrinter(aName : string): Integer; override; diff --git a/lcl/printers.pas b/lcl/printers.pas index 691200eee6..f5327f5534 100644 --- a/lcl/printers.pas +++ b/lcl/printers.pas @@ -717,6 +717,7 @@ begin else raise EPrinter.Create('Printer index out of range!'); SetPrinter(aName); + DoResetFontsList; end else raise EPrinter.Create('No printers defined!'); @@ -772,7 +773,8 @@ end; procedure TPrinter.DoResetFontsList; begin - //Override this method + if fFonts<>nil then + fFonts.Clear; end; //Initialize the Lst with all definied printers