mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-30 03:50:43 +02:00
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:
parent
88a54c3916
commit
6d093a3d09
@ -38,6 +38,8 @@ end;
|
||||
|
||||
destructor TWinPrinter.Destroy;
|
||||
begin
|
||||
fDestroying := true;
|
||||
|
||||
ClearDC;
|
||||
|
||||
DoResetPrintersList;
|
||||
@ -84,7 +86,7 @@ end;
|
||||
|
||||
procedure TWinPrinter.PrinterSelected;
|
||||
begin
|
||||
if (PrinterIndex >= 0) and not RawMode then
|
||||
if not fDestroying and (PrinterIndex >= 0) and not RawMode then
|
||||
SetDC;
|
||||
end;
|
||||
|
||||
@ -805,22 +807,26 @@ begin
|
||||
if FPrinterHandle <> 0 then
|
||||
ClosePrinter(FPrinterHandle);
|
||||
|
||||
PDev := TPrinterDevice(Printers.Objects[i]);
|
||||
{$IFDEF USEUNICODE}
|
||||
if not OpenPrinterW(PWideChar(UTF8Decode(PDev.Name)), @fPrinterHandle, nil) then
|
||||
{$ELSE}
|
||||
if not OpenPrinter(PChar(PDev.Name), @fPrinterHandle, nil) then
|
||||
{$ENDIF}
|
||||
begin
|
||||
FprinterHandle := 0;
|
||||
raise EPrinter.CreateFmt('OpenPrinter exception : %s',
|
||||
[SysErrorMessage(GetlastError)]);
|
||||
end;
|
||||
if fDestroying then
|
||||
result := i
|
||||
else begin
|
||||
PDev := TPrinterDevice(Printers.Objects[i]);
|
||||
{$IFDEF USEUNICODE}
|
||||
if not OpenPrinterW(PWideChar(UTF8Decode(PDev.Name)), @fPrinterHandle, nil) then
|
||||
{$ELSE}
|
||||
if not OpenPrinter(PChar(PDev.Name), @fPrinterHandle, nil) then
|
||||
{$ENDIF}
|
||||
begin
|
||||
FprinterHandle := 0;
|
||||
raise EPrinter.CreateFmt('OpenPrinter exception : %s',
|
||||
[SysErrorMessage(GetlastError)]);
|
||||
end;
|
||||
|
||||
if UpdateDevMode(i) then
|
||||
Result := i
|
||||
else
|
||||
Result := -1;
|
||||
if UpdateDevMode(i) then
|
||||
Result := i
|
||||
else
|
||||
Result := -1;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -33,7 +33,7 @@ Type
|
||||
fLastHandleType : THandleType;
|
||||
fDC : HDC;
|
||||
fPrinterHandle : THandle;
|
||||
|
||||
fDestroying : boolean;
|
||||
procedure SetIC;
|
||||
procedure SetDC;
|
||||
procedure ClearDC;
|
||||
|
Loading…
Reference in New Issue
Block a user