Printers, windows, do not open and setup printer if it's being destroyed, issue #23026

git-svn-id: trunk@43024 -
This commit is contained in:
jesus 2013-09-29 04:49:22 +00:00
parent 88a54c3916
commit 6d093a3d09
2 changed files with 23 additions and 17 deletions

View File

@ -38,6 +38,8 @@ end;
destructor TWinPrinter.Destroy; destructor TWinPrinter.Destroy;
begin begin
fDestroying := true;
ClearDC; ClearDC;
DoResetPrintersList; DoResetPrintersList;
@ -84,7 +86,7 @@ end;
procedure TWinPrinter.PrinterSelected; procedure TWinPrinter.PrinterSelected;
begin begin
if (PrinterIndex >= 0) and not RawMode then if not fDestroying and (PrinterIndex >= 0) and not RawMode then
SetDC; SetDC;
end; end;
@ -805,22 +807,26 @@ begin
if FPrinterHandle <> 0 then if FPrinterHandle <> 0 then
ClosePrinter(FPrinterHandle); ClosePrinter(FPrinterHandle);
PDev := TPrinterDevice(Printers.Objects[i]); if fDestroying then
{$IFDEF USEUNICODE} result := i
if not OpenPrinterW(PWideChar(UTF8Decode(PDev.Name)), @fPrinterHandle, nil) then else begin
{$ELSE} PDev := TPrinterDevice(Printers.Objects[i]);
if not OpenPrinter(PChar(PDev.Name), @fPrinterHandle, nil) then {$IFDEF USEUNICODE}
{$ENDIF} if not OpenPrinterW(PWideChar(UTF8Decode(PDev.Name)), @fPrinterHandle, nil) then
begin {$ELSE}
FprinterHandle := 0; if not OpenPrinter(PChar(PDev.Name), @fPrinterHandle, nil) then
raise EPrinter.CreateFmt('OpenPrinter exception : %s', {$ENDIF}
[SysErrorMessage(GetlastError)]); begin
end; FprinterHandle := 0;
raise EPrinter.CreateFmt('OpenPrinter exception : %s',
[SysErrorMessage(GetlastError)]);
end;
if UpdateDevMode(i) then if UpdateDevMode(i) then
Result := i Result := i
else else
Result := -1; Result := -1;
end;
end; end;
end; end;

View File

@ -33,7 +33,7 @@ Type
fLastHandleType : THandleType; fLastHandleType : THandleType;
fDC : HDC; fDC : HDC;
fPrinterHandle : THandle; fPrinterHandle : THandle;
fDestroying : boolean;
procedure SetIC; procedure SetIC;
procedure SetDC; procedure SetDC;
procedure ClearDC; procedure ClearDC;