LCL, fix recursion on getting default paper name, issue #16496

git-svn-id: trunk@25492 -
This commit is contained in:
jesus 2010-05-18 01:13:27 +00:00
parent 99acaf9013
commit 94774d56fb

View File

@ -155,6 +155,7 @@ type
function GetSupportedPapers: TStrings; function GetSupportedPapers: TStrings;
procedure SetPaperName(const AName: string); procedure SetPaperName(const AName: string);
function PaperRectOfName(const AName: string) : TPaperRect; function PaperRectOfName(const AName: string) : TPaperRect;
procedure CheckSupportedPapers;
private private
fInternalPapers : array of TPaperItem; fInternalPapers : array of TPaperItem;
fDefaultPapers : boolean; fDefaultPapers : boolean;
@ -885,6 +886,8 @@ end;
function TPaperSize.GetDefaultPaperName: string; function TPaperSize.GetDefaultPaperName: string;
begin begin
CheckSupportedPapers;
if fDefaultPapers then if fDefaultPapers then
Result := FSupportedPapers[0] Result := FSupportedPapers[0]
else else
@ -924,6 +927,8 @@ end;
function TPaperSize.GetPaperName: string; function TPaperSize.GetPaperName: string;
begin begin
CheckSupportedPapers;
if fDefaultPapers then if fDefaultPapers then
Result := SupportedPapers[FDefaultPaperIndex] Result := SupportedPapers[FDefaultPaperIndex]
else else
@ -945,21 +950,8 @@ end;
function TPaperSize.GetSupportedPapers: TStrings; function TPaperSize.GetSupportedPapers: TStrings;
begin begin
if (fSupportedPapers.Count=0) or CheckSupportedPapers;
(fLastPrinterIndex<>fOwnedPrinter.PrinterIndex) then
begin
fOwnedPrinter.SelectCurrentPrinterOrDefault;
fSupportedPapers.Clear;
fDefaultPapers := false;
//DebugLn(['TPaperSize.GetSupportedPapers ',dbgsName(fOwnedPrinter),' ',dbgsName(Printer),' ',fOwnedPrinter=Printer]);
fOwnedPrinter.DoEnumPapers(fSupportedPapers);
if fSupportedPapers.Count=0 then
FillDefaultPapers;
fLastPrinterIndex:=fOwnedPrinter.PrinterIndex;
end;
Result:=fSupportedPapers; Result:=fSupportedPapers;
end; end;
@ -1016,6 +1008,25 @@ begin
else raise EPrinter.Create(Format('Paper "%s" not supported !',[aName])); else raise EPrinter.Create(Format('Paper "%s" not supported !',[aName]));
end; end;
procedure TPaperSize.CheckSupportedPapers;
begin
if (fSupportedPapers.Count=0) or
(fLastPrinterIndex<>fOwnedPrinter.PrinterIndex) then
begin
fOwnedPrinter.SelectCurrentPrinterOrDefault;
fSupportedPapers.Clear;
fDefaultPapers := false;
//DebugLn(['TPaperSize.GetSupportedPapers ',dbgsName(fOwnedPrinter),' ',dbgsName(Printer),' ',fOwnedPrinter=Printer]);
fOwnedPrinter.DoEnumPapers(fSupportedPapers);
if fSupportedPapers.Count=0 then
FillDefaultPapers;
fLastPrinterIndex:=fOwnedPrinter.PrinterIndex;
end;
end;
constructor TPaperSize.Create(aOwner: TPrinter); constructor TPaperSize.Create(aOwner: TPrinter);
begin begin
if not assigned(aOwner) then if not assigned(aOwner) then