diff --git a/components/printers/unix/cupsprndialogs.inc b/components/printers/unix/cupsprndialogs.inc index cd8b283f11..bffcf75e09 100644 --- a/components/printers/unix/cupsprndialogs.inc +++ b/components/printers/unix/cupsprndialogs.inc @@ -96,6 +96,7 @@ begin if FUnits=pmInches then begin + Dlg.frmPageSetup.UnitInches:= true; with Dlg.frmPageSetup.gpMargins do Caption:= Caption+' (inches)'; NDigits:= 3; @@ -106,6 +107,7 @@ begin end else begin + Dlg.frmPageSetup.UnitInches:= false; with Dlg.frmPageSetup.gpMargins do Caption:= Caption+' (mm)'; NDigits:= 0; diff --git a/components/printers/unix/framepagesetup.lfm b/components/printers/unix/framepagesetup.lfm index 2db1ebf226..ea9712f22a 100644 --- a/components/printers/unix/framepagesetup.lfm +++ b/components/printers/unix/framepagesetup.lfm @@ -175,6 +175,7 @@ object framePageSetup: TframePageSetup Increment = 1 MaxValue = 100 MinValue = 0 + OnChange = txtLeftChange TabOrder = 0 Value = 0 end @@ -192,6 +193,7 @@ object framePageSetup: TframePageSetup Increment = 1 MaxValue = 100 MinValue = 0 + OnChange = txtLeftChange TabOrder = 1 Value = 0 end @@ -210,6 +212,7 @@ object framePageSetup: TframePageSetup Increment = 1 MaxValue = 100 MinValue = 0 + OnChange = txtLeftChange TabOrder = 2 Value = 0 end @@ -227,6 +230,7 @@ object framePageSetup: TframePageSetup Increment = 1 MaxValue = 100 MinValue = 0 + OnChange = txtLeftChange TabOrder = 3 Value = 0 end diff --git a/components/printers/unix/framepagesetup.pas b/components/printers/unix/framepagesetup.pas index 700f77af18..23064eaaed 100644 --- a/components/printers/unix/framepagesetup.pas +++ b/components/printers/unix/framepagesetup.pas @@ -63,12 +63,14 @@ type {%H-}MousePos: TPoint; var Handled: Boolean); procedure pbPreviewPaint(Sender: TObject); procedure radPortraitClick(Sender: TObject); + procedure txtLeftChange(Sender: TObject); private FHeightTallest: Integer; FHardMargins: TRect; - FKw,FKh,FZoom: Double; + FFactorX, FFactorY, FZoom: Double; FOptions: TPageSetupOptions; public + UnitInches: boolean; procedure Initialize(AMode: TPageSetupMode); procedure UpdatePageSize; end; @@ -80,8 +82,6 @@ implementation { TframePageSetup } procedure TframePageSetup.pbPreviewPaint(Sender: TObject); -var - R: TRect; procedure DrawMargin(AIndex: Integer; ASize: Integer); begin with pbPreview do @@ -108,6 +108,9 @@ var end; end; end; +var + R: TRect; + NToInches: double; begin if Sender=nil then ; @@ -115,6 +118,11 @@ begin if not (psoMargins in FOptions) then exit; + if UnitInches then + NToInches:= 1 + else + NToInches:= 1/10/2.54; + with pbPreview do begin @@ -125,11 +133,11 @@ begin Canvas.Rectangle(R); // hard margins - Canvas.Pen.Color := RGBToColor(255,204,204); - DrawMargin(0, FHardMargins.Left ); - DrawMargin(1, FHardMargins.Top ); - DrawMargin(2, FHardMargins.Right ); - DrawMargin(3, FHardMargins.Bottom); + Canvas.Pen.Color := clHighlight; + DrawMargin(0, Round(txtLeft.Value * NToInches * Printer.XDPI * FFactorX * FZoom) ); //FHardMargins.Left + DrawMargin(1, Round(txtTop.Value * NToInches * Printer.YDPI * FFactorY * FZoom) ); + DrawMargin(2, Round(txtRight.Value * NToInches * Printer.XDPI * FFactorX * FZoom) ); + DrawMargin(3, Round(txtBottom.Value * NToInches * Printer.YDPI * FFactorY * FZoom) ); end; end; @@ -144,6 +152,11 @@ begin UpdatePageSize; end; +procedure TframePageSetup.txtLeftChange(Sender: TObject); +begin + pbPreview.Update; +end; + procedure TframePageSetup.cbPaperChange(Sender: TObject); begin if Printer.PaperSize.DefaultPapers then @@ -162,7 +175,7 @@ begin if not (psoMargins in FOptions) then exit; - TallH := Round(FheightTallest * FKh); + TallH := Round(FheightTallest * FFactorY); with PanPreview do if (Height<>C_BOTHSPACES) and (TallH>(Height-C_BOTHSPACES)) then @@ -206,16 +219,16 @@ begin with Printer.PaperSize.PaperRect.PhysicalRect do begin - PbPreview.Width := Round(Fkw * (Right - Left) * FZoom) + 2; - PbPreview.Height := Round(FKh * (Bottom - Top) * FZoom) + 2; + PbPreview.Width := Round(FFactorX * (Right - Left) * FZoom) + 2; + PbPreview.Height := Round(FFactorY * (Bottom - Top) * FZoom) + 2; end; with Printer.PaperSize.PaperRect do begin - FHardMargins.Left := Round(Fkw * (WorkRect.Left-PhysicalRect.Left) * FZoom); - FHardMargins.Right := Round(Fkw * (Physicalrect.Right-WorkRect.Right) * FZoom); - FHardMargins.Top := Round(FkH * (WorkRect.Top-PhysicalRect.Top) * FZoom); - FHardMargins.Bottom := Round(FkH * (PhysicalRect.Bottom-WorkRect.Bottom) * FZoom); + FHardMargins.Left := Round(FFactorX * (WorkRect.Left-PhysicalRect.Left) * FZoom); + FHardMargins.Right := Round(FFactorX * (Physicalrect.Right-WorkRect.Right) * FZoom); + FHardMargins.Top := Round(FFactorY * (WorkRect.Top-PhysicalRect.Top) * FZoom); + FHardMargins.Bottom := Round(FFactorY * (PhysicalRect.Bottom-WorkRect.Bottom) * FZoom); end; {$IFDEF DebugCUPS} @@ -273,8 +286,8 @@ begin // assume 100 pix = 8.5 inch (IOW, letter size width = 100 pixels) with ScreenInfo do begin - FKw := (100/8.5)/Printer.XDPI; - FKh := (100/8.5)*(PixelsPerInchY/PixelsPerInchX)/Printer.YDPI; + FFactorX := (100/8.5)/Printer.XDPI; + FFactorY := (100/8.5)*(PixelsPerInchY/PixelsPerInchX)/Printer.YDPI; end; // find the tallest paper diff --git a/components/printers/unix/udlgpagesetup.lfm b/components/printers/unix/udlgpagesetup.lfm index 908dda4912..f2e36c3fd6 100644 --- a/components/printers/unix/udlgpagesetup.lfm +++ b/components/printers/unix/udlgpagesetup.lfm @@ -121,6 +121,7 @@ object dlgPageSetup: TdlgPageSetup BorderSpacing.Right = 6 Caption = 'Printer...' Constraints.MinWidth = 90 + Enabled = False TabOrder = 2 end end