From 6fece2d9f5d54514b441e7218c05eb212fcb8233 Mon Sep 17 00:00:00 2001 From: jesus Date: Tue, 20 Dec 2005 14:31:27 +0000 Subject: [PATCH] doGetPaperName implemented for windows, fixed selecting default printer git-svn-id: trunk@8348 - --- components/printers/sample/frmselprinter.lrs | 2 +- components/printers/sample/frmselprinter.pas | 7 +++- components/printers/sample/selectprinter.lpi | 14 ++++---- components/printers/win32/winprinters.inc | 16 +++++++++ components/printers/win32/winprinters_h.inc | 4 +++ components/printers/win32/winprndialogs.inc | 12 +++---- lcl/printers.pas | 35 +++++++++++++++----- 7 files changed, 67 insertions(+), 23 deletions(-) diff --git a/components/printers/sample/frmselprinter.lrs b/components/printers/sample/frmselprinter.lrs index 230bd587ee..53f3b7d782 100644 --- a/components/printers/sample/frmselprinter.lrs +++ b/components/printers/sample/frmselprinter.lrs @@ -1,4 +1,4 @@ -{ To jest automatycznie wygenerowany plik zasobów lazarusa } +{ This is an automatically generated lazarus resource file } LazarusResources.Add('TForm1','FORMDATA',[ 'TPF0'#6'TForm1'#5'Form1'#13'ActiveControl'#7#7'Button2'#7'Caption'#6#5'Form1' diff --git a/components/printers/sample/frmselprinter.pas b/components/printers/sample/frmselprinter.pas index af99bccb66..b3008e704f 100644 --- a/components/printers/sample/frmselprinter.pas +++ b/components/printers/sample/frmselprinter.pas @@ -85,6 +85,11 @@ begin SGrid.Clean; with Printer do begin + if Printers.Count=0 then + begin + AddInfo('printer', 'no printers are installed'); + exit; + end; AddInfo('Printer',Printers[PrinterIndex]); case Orientation of poPortrait : AddInfo('Orientation','Portrait'); @@ -129,7 +134,7 @@ end; procedure TForm1.Button3Click(Sender: TObject); begin - Printer.PrinterIndex := 0; + Printer.PrinterIndex := -1; UpdatePrinterInfo; end; diff --git a/components/printers/sample/selectprinter.lpi b/components/printers/sample/selectprinter.lpi index 54a84071d5..0c87348e47 100644 --- a/components/printers/sample/selectprinter.lpi +++ b/components/printers/sample/selectprinter.lpi @@ -16,24 +16,24 @@ - + - + - + - + - + @@ -41,7 +41,7 @@ - + @@ -49,7 +49,7 @@ - + diff --git a/components/printers/win32/winprinters.inc b/components/printers/win32/winprinters.inc index 22de0e5cfc..2b3b360b43 100644 --- a/components/printers/win32/winprinters.inc +++ b/components/printers/win32/winprinters.inc @@ -324,6 +324,22 @@ begin end; end; +function TWinPrinter.DoGetPaperName: string; +var i : Integer; + PDev : TPrinterDevice; +begin + Result:=inherited DoGetPaperName; + + if (Printers.Count>0) then + begin + PDev:=TPrinterDevice(Printers.Objects[PrinterIndex]); + + i:=PaperSize.SupportedPapers.IndexOfObject(TObject(ptrint(PDev.Devmode.dmPaperSize))); + if i<>-1 then + Result:=PaperSize.SupportedPapers.Strings[i]; + end; +end; + function TWinPrinter.DoGetDefaultPaperName: string; var i : Integer; PDev : TPrinterDevice; diff --git a/components/printers/win32/winprinters_h.inc b/components/printers/win32/winprinters_h.inc index 51edb9626e..94dd88c6c7 100644 --- a/components/printers/win32/winprinters_h.inc +++ b/components/printers/win32/winprinters_h.inc @@ -28,6 +28,9 @@ uses Classes, SysUtils,Printers,LCLType,{Forms,}Windows;//,dialogs; Type + + { TWinPrinter } + TWinPrinter = class(TPrinter) private //fDefaultPrinter : String; @@ -51,6 +54,7 @@ Type procedure DoResetPrintersList; override; procedure DoEnumPapers(Lst : TStrings); override; + function DoGetPaperName: string; override; function DoGetDefaultPaperName: string; override; procedure DoSetPaperName(aName : string); override; function DoGetPaperRect(aName : string; Var aPaperRc : TPaperRect) : Integer; override; diff --git a/components/printers/win32/winprndialogs.inc b/components/printers/win32/winprndialogs.inc index c01caf8d65..2bf31bac79 100644 --- a/components/printers/win32/winprndialogs.inc +++ b/components/printers/win32/winprndialogs.inc @@ -75,7 +75,7 @@ begin CopyMemory(@PDev.DevMode,DevMode,sizeof(Pdev.DevMode)); PDev.DevMode.dmSize := SizeOf(PDev.DevMode); PDev.DevMode.dmDriverExtra := 0; - PDev.DefaultPaper := DevMode^.dmPaperSize; + PDev.DevMode.dmPaperSize := DevMode^.dmPaperSize; finally GlobalUnlock(lpp.hDevMode); end; @@ -158,7 +158,7 @@ begin CopyMemory(@PDev.DevMode,DevMode,sizeof(Pdev.DevMode)); PDev.DevMode.dmSize := SizeOf(PDev.DevMode); PDev.DevMode.dmDriverExtra := 0; - PDev.DefaultPaper := DevMode^.dmPaperSize; + PDev.DevMode.dmPaperSize := Devmode^.dmPaperSize; TWinPrinter(Printer).Handle := hDC; finally GlobalUnlock(lpp.hDevMode); @@ -261,11 +261,11 @@ begin CopyMemory(@PDev.DevMode,DevMode,sizeof(Pdev.DevMode)); PDev.DevMode.dmSize := SizeOf(PDev.DevMode); PDev.DevMode.dmDriverExtra := 0; - if Printer.PaperSize.SupportedPapers.IndexOfObject(TObject(Integer(DevMode^.dmPaperSize))) <> -1 + if Printer.PaperSize.SupportedPapers.IndexOfObject(TObject(ptrint(DevMode^.dmPaperSize))) <> -1 then - PDev.DefaultPaper := DevMode^.dmPaperSize - else - PDev.DefaultPaper := Integer(Printer.PaperSize.SupportedPapers.Objects[0]); + PDev.DevMode.dmPaperSize := DevMode^.dmPaperSize + else + PDev.DevMode.dmPaperSize := PDev.DefaultPaper; if nCopies=1 then Copies := DevMode^.dmCopies else Copies := nCopies; diff --git a/lcl/printers.pas b/lcl/printers.pas index 8e05b8f8b0..f680edf89d 100644 --- a/lcl/printers.pas +++ b/lcl/printers.pas @@ -355,8 +355,25 @@ end; //Set the current printer procedure TPrinter.SetPrinter(aName: String); -var i : Integer; +var + i,oldIndex : Integer; begin + if aName='*' then begin + // select default printer + OldIndex := FPrinterIndex; + fPrinterIndex := -1; // avoid to remember last printer + Refresh; + if Printers.count>0 then begin + i:= doSetprinter(FPrinters[0]); // now first printer is default + if i<>0 then begin + // something went wrong, try to restore old printer + if OldIndex>=0 then + FPrinterIndex := doSetPrinter(FPrinters[OldIndex]); + raise EPrinter.Create('Unable to set default printer!'); + end else + FPrinterIndex := i; + end; + end else if (Printers.Count>0) then begin if (aName<>'') then @@ -511,16 +528,17 @@ begin CheckPrinting(False); if Printers.Count>0 then begin - aName:='*'; if AValue=-1 then - AValue:=0 {Default printer} + aName:='*' else - if AValue=0) and (AValueDefaultPaperName then fOwnedPrinter.DoSetPaperName(aName) end - else raise EPrinter.Create(Format('Paper "%s" not supported !',[aName])); + else + raise EPrinter.Create(Format('Paper "%s" not supported !',[aName])); end; //Return an TPaperRect corresponding at an paper name