mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 07:19:18 +02:00
fixed problem with network printers with long names from Christian Ulrich
git-svn-id: trunk@8548 -
This commit is contained in:
parent
042e4992ac
commit
7e79e0d25c
@ -90,24 +90,26 @@ begin
|
|||||||
if (fLastHandleType<>2) and (Printers.Count>0) then
|
if (fLastHandleType<>2) and (Printers.Count>0) then
|
||||||
begin
|
begin
|
||||||
ClearDC;
|
ClearDC;
|
||||||
|
|
||||||
PDev:=TPrinterDevice(Printers.Objects[PrinterIndex]);
|
PDev:=TPrinterDevice(Printers.Objects[PrinterIndex]);
|
||||||
try
|
try
|
||||||
fDC:=CreateDC(nil,PChar(PDev.Device),nil,@PDev.DevMode);
|
|
||||||
if fDC=0 then fDC:=CreateDC(PChar('WISPOOL'),PChar(PDev.Device),nil,@PDev.DevMode);
|
|
||||||
|
|
||||||
|
//Device is only 32 chars long, if the Printername or share is longer than 32 chars, this will return 0
|
||||||
|
fDC:=CreateDC(nil,PChar(Printers[PrinterIndex]),nil,@PDev.DevMode);
|
||||||
|
if fDC=0 then
|
||||||
|
fDC:=CreateDC(PChar('WINSPOOL'),PChar(Printers[PrinterIndex]),nil,@PDev.DevMode);
|
||||||
|
|
||||||
{Workaround (hack) for Lexmark 1020 JetPrinter (Mono)}
|
{Workaround (hack) for Lexmark 1020 JetPrinter (Mono)}
|
||||||
if fDC=0 then fDC:=CreateDC(nil,PChar(PDev.Driver),nil,@PDev.DevMode);
|
if fDC=0 then
|
||||||
if fDC=0 then fDC:=CreateDC(pChar('WINSPOOL'),PChar(PDev.Driver),nil,@PDev.DevMode);
|
fDC:=CreateDC(nil,PChar(PDev.Driver),nil,@PDev.DevMode);
|
||||||
|
if fDC=0 then
|
||||||
|
fDC:=CreateDC(pChar('WINSPOOL'),PChar(PDev.Driver),nil,@PDev.DevMode);
|
||||||
|
|
||||||
|
|
||||||
except on E:Exception do
|
except on E:Exception do
|
||||||
raise EPrinter.Create(Format('CreateDC exception: %s (LastError : %s,DC=%d Driver=%s Device=%s Port=%s)',[E.Message,SysErrorMessage(GetLastError),fDC,Pdev.Driver,PDev.Device,PDev.Port]));
|
raise EPrinter.Create(Format('CreateDC exception: %s (LastError : %s,DC=%d Driver="%s" Device="%s" Port="%s")',[E.Message,SysErrorMessage(GetLastError),fDC,Pdev.Driver,Printers[PrinterIndex],PDev.Port]));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if fDC=0 then
|
if fDC=0 then
|
||||||
raise EPrinter.Create(Format('Invalid printer (Error : %s,DC=%d Driver=%s Device=%s Port=%s)',[SysErrorMessage(GetLastError),fDC,Pdev.Driver,PDev.Device,PDev.Port]));
|
raise EPrinter.Create(Format('Invalid printer (Error : %s,DC=%d Driver="%s" Device="%s" Port="%s")',[SysErrorMessage(GetLastError),fDC,Pdev.Driver,Printers[PrinterIndex],PDev.Port]));
|
||||||
if Assigned(Canvas) then
|
if Assigned(Canvas) then
|
||||||
Canvas.Handle:=fDC;
|
Canvas.Handle:=fDC;
|
||||||
fLastHandleType:=2;
|
fLastHandleType:=2;
|
||||||
@ -182,7 +184,6 @@ Var Flags : DWORD;
|
|||||||
i : Integer;
|
i : Integer;
|
||||||
DefaultPrinter : array[0..79] of Char;
|
DefaultPrinter : array[0..79] of Char;
|
||||||
PDev : TPrinterDevice;
|
PDev : TPrinterDevice;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
Level:=5; //Compatible with all Win32 versions
|
Level:=5; //Compatible with all Win32 versions
|
||||||
DefaultPrinter:='';
|
DefaultPrinter:='';
|
||||||
|
Loading…
Reference in New Issue
Block a user