improved Printer Setup dialog win32 from Olivier und Salvatore

git-svn-id: trunk@7052 -
This commit is contained in:
mattias 2005-04-03 09:54:56 +00:00
parent 434dff3b94
commit 73e0927f4b
3 changed files with 74 additions and 52 deletions

View File

@ -1,8 +1,7 @@
{**************************************************************
Implementation for winprinter
***************************************************************}
Uses WinUtilPrn, InterfaceBase, Win32Int;
Uses WinUtilPrn, InterfaceBase, Win32Int, LCLIntf;
Const
Win32Orientations: array [TPrinterOrientation] of Integer = (
@ -41,29 +40,7 @@ begin
inherited Destroy;
end;
function TWinPrinter.PrinterSetup: Boolean;
Var NewDevMode : TDeviceMode;
PDev : TPrinterDevice;
begin
if Printers.Count>0 then
begin
if fPrinterHandle=0 then
SetPrinter(Printers.Strings[PrinterIndex]);
if fPrinterHandle=0 then
raise EPrinter.Create('Printer handle not defined');
PDev:=TPrinterDevice(Printers.Objects[PrinterIndex]);
FillChar(NewDevMode,SizeOf(NewDevMode),0);
Result:=(AdvancedDocumentProperties(0,fPrinterHandle,PChar(PDev.Name),@PDev.DevMode,@NewDevMode)<>0);
if Result then
PDev.DevMode:=NewDevMode;
end;
end;
function TWinPrinter.PrintDialog: Boolean;
function TWinPrinter.BaseDialogs(aFlag : DWORD):boolean;
var lpp : tagPD;
PDev : TPrinterDevice;
DevMode : PDeviceMode;
@ -72,6 +49,7 @@ var lpp : tagPD;
DevNames : PDevNames;
St : PChar;
begin
Result:=False;
if Printers.Count>0 then
begin
FillChar(lpp,SizeOf(lpp),0);
@ -80,7 +58,7 @@ begin
begin
lStructSize:=SizeOf(lpp);
hInstance:=LCLType.HInstance;
Flags:=PD_COLLATE or PD_USEDEVMODECOPIES; //PD_PRINTSETUP ;
Flags:=aFlag;
hWndOwner:=TWin32WidgetSet(InterfaceObject).AppHandle;
PDev:=TPrinterDevice(Printers.Objects[PrinterIndex]);
@ -112,6 +90,8 @@ begin
end;
end;
Result:=True;
if lpp.hDevMode<>0 then
begin
DevMode:=PDeviceMode(GlobalLock(lpp.hDevMode));
@ -136,6 +116,36 @@ begin
end;
end;
function TWinPrinter.PrinterSetup: Boolean;
begin
Result:=BaseDialogs(PD_PRINTSETUP);
end;
function TWinPrinter.PrintDialog: Boolean;
begin
Result:=BaseDialogs(PD_COLLATE or PD_USEDEVMODECOPIES);
end;
function TWinPrinter.GetXDPI: Integer;
begin
Result:=72;
if (Printers.Count>0) then
begin
SetDC;
Result:=GetDeviceCaps(fDC, LOGPIXELSX);
end;
end;
function TWinPrinter.GetYDPI: Integer;
begin
Result:=72;
if (Printers.Count>0) then
begin
SetDC;
Result:=GetDeviceCaps(fDC,LOGPIXELSY);
end;
end;
procedure TWinPrinter.SetIC;
var PDev : TPrinterDevice;
begin
@ -187,7 +197,9 @@ begin
if fPrinterHandle=0 then
raise EPrinter.Create('Printer handle not defined');
ClearDC;
SetDC;
Canvas.Handle:=fDC;
Canvas.Refresh;
FillChar(Inf,SizeOf(Inf),0);
@ -522,3 +534,6 @@ INITIALIZATION
{end.}

View File

@ -37,6 +37,9 @@ Type
procedure SetIC;
procedure SetDC;
procedure ClearDC;
function BaseDialogs(aFlag : DWORD):boolean;
protected
procedure DoBeginDoc; override;
procedure DoNewPage; override;
@ -57,6 +60,9 @@ Type
procedure DoSetCopies(aValue : Integer); override;
function DoGetOrientation: TPrinterOrientation; override;
procedure DoSetOrientation(aValue : TPrinterOrientation); override;
function GetXDPI: Integer; override;
function GetYDPI: Integer; override;
public
constructor Create; override;
destructor Destroy; override;

View File

@ -247,3 +247,4 @@
PD_NONETWORKBUTTON = $00200000;