(* ImageEn Build 7.0.0.06.2637 @ 7-4-17 14:58:42.679 *) (* Copyright (c) 1998-2017 by Carlotta Calandra. All rights reserved. Copyright (c) 2011-2017 by Xequte Software. This software comes without express or implied warranty. In no case shall the author be liable for any damage or unwanted behavior of any computer hardware and/or software. Author grants you the right to include the component in your application, whether COMMERCIAL, SHAREWARE, or FREEWARE. ImageEn, IEvolution and ImageEn ActiveX may not be included in any commercial, shareware or freeware libraries or components. www.ImageEn.com *) (* File version 1009 *) unit ieprnform3; {$R-} {$Q-} {$I ie.inc} {$IFDEF IEINCLUDEMULTIVIEW} {$IFDEF IEINCLUDEPRINTDIALOGS} interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, hyiedefs, iemio, ExtCtrls, imageenview, ieview, iemview, imageenio, ComCtrls, StdCtrls, Buttons, imageenproc, Menus, ievect, ImgList, hyieutils, iexBitmaps, iesettings, iexLayers, iexRulers; type TfiePrnForm3 = class(TForm) Splitter1: TSplitter; Panel2: TPanel; PrinterSetupDialog1: TPrinterSetupDialog; ImageEnView1: TImageEnView; pnlLeft: TPanel; ImageEnMView1: TImageEnMView; PopupMenu1: TPopupMenu; Add1: TMenuItem; Delete1: TMenuItem; pnlPrintSelector: TPanel; cmbPrintSelector: TComboBox; btnPrint: TBitBtn; btnCancel: TBitBtn; btnSetup: TBitBtn; grpSize: TGroupBox; lblSize: TLabel; lblByX: TLabel; cmbPrintSize: TComboBox; edtWidth: TEdit; updWidth: TUpDown; edtHeight: TEdit; updHeight: TUpDown; grpMargins: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; UpDown1: TUpDown; UpDown2: TUpDown; UpDown3: TUpDown; UpDown4: TUpDown; grpOther: TGroupBox; lblPosition: TLabel; lblGamma: TLabel; cmbPosition: TComboBox; edtGamma: TEdit; updGamma: TUpDown; edtThumbnailColumns: TEdit; updThumbnailColumns: TUpDown; lblThumbnailsByX: TLabel; edtThumbnailRows: TEdit; updThumbnailRows: TUpDown; grpThumbnailsOther: TGroupBox; lblThumbnailStyle: TLabel; lblThumbnailSpacing: TLabel; cmbThumbnailStyle: TComboBox; edtThumbnailSpacing: TEdit; updThumbnailSpacing: TUpDown; tmrUpdatePreview: TTimer; btnPrevious: TButton; btnNext: TButton; edtPagesWide: TEdit; updPagesWide: TUpDown; lblPagesByX: TLabel; edtPagesHigh: TEdit; updPagesHigh: TUpDown; imlPositions: TImageList; procedure FormActivate(Sender: TObject); procedure cmbPrintSizeChange(Sender: TObject); procedure UpDown1Click(Sender: TObject; Button: TUDBtnType); procedure UpDown2Click(Sender: TObject; Button: TUDBtnType); procedure UpDown3Click(Sender: TObject; Button: TUDBtnType); procedure UpDown4Click(Sender: TObject; Button: TUDBtnType); procedure updGammaClick(Sender: TObject; Button: TUDBtnType); procedure FormResize(Sender: TObject); procedure DelayedPrintPreview(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ImageEnMView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Delete1Click(Sender: TObject); procedure Add1Click(Sender: TObject); procedure btnCancelClick(Sender: TObject); procedure btnNextClick(Sender: TObject); procedure btnPreviousClick(Sender: TObject); procedure btnSetupClick(Sender: TObject); procedure cmbPositionDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure PrintPreview(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure updHeightClick(Sender: TObject; Button: TUDBtnType); procedure updPagesHighClick(Sender: TObject; Button: TUDBtnType); procedure updPagesWideClick(Sender: TObject; Button: TUDBtnType); procedure updThumbnailColumnsClick(Sender: TObject; Button: TUDBtnType); procedure updThumbnailRowsClick(Sender: TObject; Button: TUDBtnType); procedure updThumbnailSpacingClick(Sender: TObject; Button: TUDBtnType); procedure updWidthClick(Sender: TObject; Button: TUDBtnType); private { Private declarations } fHaveActivated: Boolean; srcview: TImageEnMView; fIEV: TImageEnVect; fActivating: boolean; fDialogCaption: string; fThumbnailPageIndex : Integer; // the page of thumbnails that is presently being previewed fOriginalDlgWidth then fOriginalDlgWidth : Integer; // Remember the default size of this dialog fOriginalDlgHeight : Integer; // Remember the default size of this dialog procedure IncDecMargins(text: TEdit; Button: TUDBtnType); procedure IncDecValue(text: TEdit; Button: TUDBtnType); procedure ImageSelect; function GetImage(idx : Integer) : Boolean; procedure UpdatePrintSizeControls; procedure SetDialogCaption(value: string); procedure SetLanguage_units; function UnitMult: double; public { Public declarations } mio: TImageEnMIO; fTaskName: string; fDialogsMeasureUnit: TIEDialogsMeasureUnit; PrintAnnotations: boolean; fPrintPreviewParams: TIOPrintPreviewParams; procedure UpdateLanguage(); procedure LoadParameters; procedure SaveParameters; {$IFDEF UNIT_TESTING} procedure SetNextLanguage; {$ENDIF} // Form caption property DialogCaption: string read fDialogCaption write SetDialogCaption; end; implementation uses printers; {$R *.DFM} const // Items of cmbPrintSize _cmbPrintSize_Normal = 0; _cmbPrintSize_FitToPage = 1; _cmbPrintSize_StretchToPage = 2; _cmbPrintSize_FillPage = 3; _cmbPrintSize_SpecifiedSize = 4; _cmbPrintSize_MultiplePages = 5; _cmbPrintSize_Thumbnails = 6; // Items of cmbPrintSelector _cmbPrintSelector_PrintAll = 0; _cmbPrintSelector_PrintSelected = 1; {$IFDEF UNIT_TESTING} procedure tfiePrnForm3.SetNextLanguage; begin Self.Tag := Self.Tag + 1; if Self.tag >= ord( msUser ) then Self.Tag := 0; IEGlobalSettings().MsgLanguage := TMsgLanguage(Self.Tag); UpdateLanguage(); end; {$ENDIF} function tfiePrnForm3.UnitMult: double; begin if (fDialogsMeasureUnit = ieduCm) or (fDialogsMeasureUnit = ieduSelectableDefCm) then Result := CM_per_Inch else Result := 1; end; procedure tfiePrnForm3.SetLanguage_units; // Matteo Barrese: 15/11/12 begin if (fDialogsMeasureUnit = ieduInches) or (fDialogsMeasureUnit = ieduSelectableDefInches) then begin // inches grpMargins.Caption := ' ' + iemsg(IEMSG_MARGINS) + ' (' + iemsg(IEMSG_INCHES) + ') '; edtWidth .Hint := iemsg(IEMSG_WIDTH) + ' (' + iemsg(IEMSG_INCHES) + ')'; edtHeight .Hint := iemsg(IEMSG_HEIGHT) + ' (' + iemsg(IEMSG_INCHES) + ')'; end else begin // centimeters (Cm) grpMargins.Caption := ' ' + iemsg(IEMSG_MARGINS) + ' (' + IEGlobalSettings().MeasureUnits[ieuCENTIMETERS] + ') '; edtWidth .Hint := iemsg(IEMSG_WIDTH) + ' (' + IEGlobalSettings().MeasureUnits[ieuCENTIMETERS] + ')'; edtHeight .Hint := iemsg(IEMSG_HEIGHT) + ' (' + IEGlobalSettings().MeasureUnits[ieuCENTIMETERS] + ')'; end; end; procedure tfiePrnForm3.UpdateLanguage(); var bEnglish : Boolean; begin bEnglish := (IEGlobalSettings().MsgLanguage = msEnglish) or ((IEGlobalSettings().MsgLanguage = msSystem) and (syslocale.PriLangID = LANG_ENGLISH)); Caption := iemsg(IEMSG_PRINT); Edit1.Hint := iemsg(IEMSG_TOPMARGIN); Edit2.Hint := iemsg(IEMSG_LEFTMARGIN); Edit3.Hint := iemsg(IEMSG_RIGHTMARGIN); Edit4.hint := iemsg(IEMSG_BOTTOMMARGIN); cmbPrintSize.Hint := iemsg(IEMSG_LOCATIONSIZE); edtGamma.hint := iemsg(IEMSG_GAMMACORRECTION); Label1.Caption := iemsg(IEMSG_TOP) + ':'; Label2.Caption := iemsg(IEMSG_LEFT) + ':'; Label3.Caption := iemsg(IEMSG_RIGHT) + ':'; Label4.Caption := iemsg(IEMSG_BOTTOM) + ':'; SetLanguage_units; if not bEnglish then begin cmbPrintSize.Items[ _cmbPrintSize_Normal ] := iemsg( IEMSG_NORMAL ); cmbPrintSize.Items[ _cmbPrintSize_FitToPage ] := iemsg( IEMSG_FITTOPAGE ); cmbPrintSize.Items[ _cmbPrintSize_StretchToPage ] := iemsg( IEMSG_STRETCHTOPAGE ); cmbPrintSize.Items[ _cmbPrintSize_FillPage ] := iemsg( IEMSG_FILLPAGE ); cmbPrintSize.Items[ _cmbPrintSize_SpecifiedSize ] := iemsg( IEMSG_SPECIFIEDSIZE ); cmbPrintSize.Items[ _cmbPrintSize_MultiplePages ] := iemsg( IEMSG_MULTIPLEPAGES ); cmbPrintSize.Items[ _cmbPrintSize_Thumbnails ] := iemsg( IEMSG_THUMBNAILS ); end; cmbPrintSelector.Clear; cmbPrintSelector.Items.Add(iemsg(IEMSG_PRINTALL)); cmbPrintSelector.Items.Add(iemsg(IEMSG_PRINTSELECTED)); cmbPosition.Clear; cmbPosition.Items.Add(iemsg(IEMSG_TOPLEFT)); cmbPosition.Items.Add(iemsg(IEMSG_TOPCENTER)); cmbPosition.Items.Add(iemsg(IEMSG_TOPRIGHT)); cmbPosition.Items.Add(iemsg(IEMSG_CENTERLEFT)); cmbPosition.Items.Add(iemsg(IEMSG_CENTER)); cmbPosition.Items.Add(iemsg(IEMSG_CENTERRIGHT)); cmbPosition.Items.Add(iemsg(IEMSG_BOTTOMLEFT)); cmbPosition.Items.Add(iemsg(IEMSG_BOTTOMCENTER)); cmbPosition.Items.Add(iemsg(IEMSG_BOTTOMRIGHT)); btnPrint .Caption := iemsg(IEMSG_PRINT); btnSetup .Caption := iemsg(IEMSG_PRINTSETUP); btnCancel.Caption := iemsg(IEMSG_CANCEL); grpSize .Caption := ' ' + iemsg(IEMSG_SIZE) + ' '; grpOther .Caption := ' ' + iemsg(IEMSG_OTHER) + ' '; lblGamma.Caption := iemsg(IEMSG_GAMMACORRECTION) + ':'; lblPosition .Caption := iemsg(IEMSG_POSITION) + ':'; if bEnglish then lblSize.Caption := 'Print Size:' // English text too short else lblSize.Caption := iemsg(IEMSG_SIZE) + ':'; edtThumbnailColumns .Hint := iemsg(IEMSG_COLUMNS); edtThumbnailRows .Hint := iemsg(IEMSG_ROWS); edtPagesWide .Hint := iemsg(IEMsg_PagesAcross); edtPagesHigh .Hint := iemsg(IEMsg_PagesDown); cmbThumbnailStyle .Hint := iemsg(IEMSG_STYLE); lblThumbnailStyle .Caption := iemsg(IEMSG_STYLE) + ':'; edtThumbnailSpacing .Hint := iemsg(IEMSG_SPACING); lblThumbnailSpacing .Caption := iemsg(IEMSG_SPACING) + ':'; grpThumbnailsOther .Caption := ' ' + iemsg(IEMSG_OTHER) + ' '; btnPrevious .Caption := iemsg(IEMSG_PREVIOUS); btnNext .Caption := iemsg(IEMSG_NEXT); end; procedure tfiePrnForm3.LoadParameters; const Minimum_Width = 300; Minimum_Height = 200; var X, Y: Integer; begin // get parameters from fPrintPreviewParams Edit1.Text := FloatToStrF(fPrintPreviewParams.MarginTop, ffGeneral, 4, 4); Edit2.Text := FloatToStrF(fPrintPreviewParams.MarginLeft, ffGeneral, 4, 4); Edit3.Text := FloatToStrF(fPrintPreviewParams.MarginRight, ffGeneral, 4, 4); Edit4.Text := FloatToStrF(fPrintPreviewParams.MarginBottom, ffGeneral, 4, 4); cmbPosition.ItemIndex := ord(fPrintPreviewParams.Position); if fPrintPreviewParams.PrintThumbnails then cmbPrintSize.ItemIndex := _cmbPrintSize_Thumbnails else cmbPrintSize.ItemIndex := integer(fPrintPreviewParams.Size); UpdatePrintSizeControls; if fPrintPreviewParams.PrintSelected then cmbPrintSelector.ItemIndex := _cmbPrintSelector_PrintSelected else cmbPrintSelector.ItemIndex := _cmbPrintSelector_PrintAll; if ( fPrintPreviewParams.Width > 0 ) and ( fPrintPreviewParams.Size <> psMultiplePages ) then edtWidth.Text := FloatToStrF(fPrintPreviewParams.Width, ffGeneral, 4, 4); if ( fPrintPreviewParams.Height > 0 ) and ( fPrintPreviewParams.Size <> psMultiplePages ) then edtHeight.Text := FloatToStrF(fPrintPreviewParams.Height, ffGeneral, 4, 4); if ( fPrintPreviewParams.Width > 0 ) and ( fPrintPreviewParams.Size = psMultiplePages ) then edtPagesWide.Text := IntToStr( Trunc( fPrintPreviewParams.Width )); if ( fPrintPreviewParams.Height > 0 ) and ( fPrintPreviewParams.Size = psMultiplePages ) then edtPagesHigh.Text := IntToStr( Trunc( fPrintPreviewParams.Height )); edtGamma.Text := FloatToStrF(fPrintPreviewParams.Gamma, ffGeneral, 4, 4); edtThumbnailColumns.Text := IntToStr(fPrintPreviewParams.ThumbnailColumns); edtThumbnailRows.Text := IntToStr(fPrintPreviewParams.ThumbnailRows); cmbThumbnailStyle.ItemIndex := ord(fPrintPreviewParams.ThumbnailStyle); edtThumbnailSpacing.Text := FloatToStrF(fPrintPreviewParams.ThumbnailSpacing, ffGeneral, 4, 4); if (fPrintPreviewParams.DlgWidth >= Minimum_Width) and (fPrintPreviewParams.DlgHeight >= Minimum_Height) then begin ClientWidth := fPrintPreviewParams.DlgWidth; ClientHeight := fPrintPreviewParams.DlgHeight; // Check bounds if Width > Screen.Width then Width := Screen.Width; if Height > Screen.Height then Height := Screen.Height; // Center it X := (Screen.Width - Width) div 2; Y := (Screen.Height - Height) div 2; if X < Screen.DesktopLeft then X := Screen.DesktopLeft; if Y < Screen.DesktopTop then Y := Screen.DesktopTop; SetBounds(X, Y, Width, Height); end; { Not exposed: ThumbnailShowText } end; procedure tfiePrnForm3.SaveParameters; begin // Assign parameters to fPrintPreviewParams fPrintPreviewParams.MarginTop := IEStrToFloatDefS(Edit1.Text, 1); fPrintPreviewParams.MarginLeft := IEStrToFloatDefS(Edit2.Text, 1); fPrintPreviewParams.MarginRight := IEStrToFloatDefS(Edit3.Text, 1); fPrintPreviewParams.MarginBottom := IEStrToFloatDefS(Edit4.Text, 1); fPrintPreviewParams.Position := TIOPrintPreviewPosition(cmbPosition.ItemIndex); if cmbPrintSize.ItemIndex = _cmbPrintSize_Thumbnails then fPrintPreviewParams.PrintThumbnails := True else begin fPrintPreviewParams.PrintThumbnails := False; fPrintPreviewParams.Size := TIOPrintPreviewSize( cmbPrintSize.ItemIndex ); if fPrintPreviewParams.Size = psSpecifiedSize then begin fPrintPreviewParams.Width := IEStrToFloatDefS( edtWidth.Text, 6 ); fPrintPreviewParams.Height := IEStrToFloatDefS( edtHeight.Text, 4 ); end else if fPrintPreviewParams.Size = psMultiplePages then begin fPrintPreviewParams.Width := StrToIntDef( edtPagesWide.Text, 6 ); fPrintPreviewParams.Height := StrToIntDef( edtPagesHigh.Text, 4 ); end else begin fPrintPreviewParams.Width := -1; fPrintPreviewParams.Height := -1; end; end; fPrintPreviewParams.PrintSelected := cmbPrintSelector.ItemIndex = _cmbPrintSelector_PrintSelected; fPrintPreviewParams.Gamma := IEStrToFloatDefS(edtGamma.Text, 1); fPrintPreviewParams.ThumbnailColumns := StrToIntDef(edtThumbnailColumns.Text, 4); fPrintPreviewParams.ThumbnailRows := StrToIntDef(edtThumbnailRows.Text, 5); fPrintPreviewParams.ThumbnailStyle := TIOPrintPreviewThumbnailStyle(cmbThumbnailStyle.ItemIndex); fPrintPreviewParams.ThumbnailSpacing := IEStrToFloatDefS(edtThumbnailSpacing.Text, 0.1); { Not exposed: ThumbnailShowText } end; procedure TfiePrnForm3.FormActivate(Sender: TObject); var i, idx: integer; begin // Prevent double calls to FormActivate if fHaveActivated then exit; fHaveActivated := True; Screen.Cursor := crHourglass; try Application.ProcessMessages; // first draws all controls (to avoid "Swiss Cheese") ImageEnMView1.LockUpdate; fActivating := true; ImageEnMView1.AnnotationsVisible := PrintAnnotations; if IEGlobalSettings().UseButtonGlyphsInDialogs = False then begin btnPrint.Glyph := nil; btnSetup.Glyph := nil; btnCancel.Glyph := nil; cmbPosition.Style := csDropDownList; end; fOriginalDlgWidth := ClientWidth; fOriginalDlgHeight := ClientHeight; LoadParameters; ImageEnMView1.FillThumbnail := false; ImageEnMView1.SetModernStyling; ImageEnMView1.SideGap := 6; ImageEnMView1.Background := clBtnFace; ImageEnMView1.GradientEndColor := cl3DLight; ImageEnMView1.ThumbnailDisplayFilter := rfLanczos3; // load ImageEnMView1 srcview := mio.AttachedMView as TImageEnMView; for i := 0 to srcview.ImageCount - 1 do begin idx := ImageEnMView1.AppendImage; ImageEnMView1.SetIEBitmapEx(idx, srcview.GetTIEBitmap(i)); srcview.ReleaseBitmap(idx, false); if srcview.ImageTopText[i] <> '' then ImageEnMView1.ImageTopText[idx] := srcview.ImageTopText[i] else if srcview.ImageBottomText[i] <> '' then ImageEnMView1.ImageTopText[idx] := srcview.ImageBottomText[i] else ImageEnMView1.ImageTopText[idx] := 'Image ' + IntToStr(i + 1); if PrintAnnotations then ImageEnMView1.MIO.Params[idx].Assign( srcview.MIO.Params[i] ); end; ImageEnMView1.SelectedImage := 0; // Get our selection from the source if srcview.MultiSelectedImagesCount > 0 then ImageEnMView1.CopySelection(srcview); fActivating := false; ImageSelect; SetLanguage_units; finally ImageEnMView1.UnlockUpdate; Screen.Cursor := crDefault; end; end; // Preview or print procedure tfiePrnForm3.PrintPreview(Sender: TObject); const Thumbnail_Box_Color = clGray; var VerticalPos: TIEVerticalPos; HorizontalPos: TIEHorizontalPos; Size: TIESize; MarginLeft, MarginTop, MarginRight, MarginBottom, SpecWidth, SpecHeight, GammaCorrection: double; i, idx: Integer; lc: TCursor; bPrintThumbnails : Boolean; bPrintAll : Boolean; iThumbColumns : Integer; iThumbRows : Integer; ThumbSpacing : Double; ThumbStyle : TIOPrintPreviewThumbnailStyle; bThumbShowBox : Boolean; bThumbShadow : Boolean; bThumbShowText : Boolean; iImageCount : Integer; iPageCount : Integer; iThumbsPerPage : Integer; bFirstImage: Boolean; begin if fActivating then exit; if (ImageEnMView1.ImageCount = 0) or (Width < 100) or (Height < 100) then exit; // to disallow AV tmrUpdatePreview.Enabled := False; VerticalPos := ievpCenter; HorizontalPos := iehpCenter; if TIOPrintPreviewPosition(cmbPosition.ItemIndex) in [ppTopLeft, ppTop, ppTopRight] then VerticalPos := ievpTop; if TIOPrintPreviewPosition(cmbPosition.ItemIndex) in [ppBottomLeft, ppBottom, ppBottomRight] then VerticalPos := ievpBottom; if TIOPrintPreviewPosition(cmbPosition.ItemIndex) in [ppTopLeft, ppLeft, ppBottomLeft] then HorizontalPos := iehpLeft; if TIOPrintPreviewPosition(cmbPosition.ItemIndex) in [ppTopRight, ppRight, ppBottomRight] then HorizontalPos := iehpRight; bPrintThumbnails := False; Size := iesFitToPage; case cmbPrintSize.ItemIndex of _cmbPrintSize_Normal : Size := iesNormal; _cmbPrintSize_FitToPage : Size := iesFitToPage; _cmbPrintSize_StretchToPage : Size := iesFitToPageStretch; _cmbPrintSize_FillPage : Size := iesFillPage; _cmbPrintSize_SpecifiedSize : Size := iesSpecifiedSize; _cmbPrintSize_MultiplePages : Size := iesMultiplePages; _cmbPrintSize_Thumbnails : bPrintThumbnails := True; end; MarginLeft := IEStrToFloatDefS(Edit2.Text, 0) / UnitMult; MarginTop := IEStrToFloatDefS(Edit1.Text, 0) / UnitMult; MarginRight := IEStrToFloatDefS(Edit3.Text, 0) / UnitMult; MarginBottom := IEStrToFloatDefS(Edit4.text, 0) / UnitMult; if Size = iesMultiplePages then begin SpecWidth := IEStrToFloatDefS( edtPagesWide.Text, 1 ); SpecHeight := IEStrToFloatDefS( edtPagesHigh.Text, 1 ); end else begin SpecWidth := IEStrToFloatDefS(edtWidth.Text, 1) / UnitMult; SpecHeight := IEStrToFloatDefS(edtHeight.Text, 1) / UnitMult; end; GammaCorrection := IEStrToFloatDefS(edtGamma.Text, 1); iThumbColumns := StrToIntDef(edtThumbnailColumns.Text, 4); iThumbRows := StrToIntDef(edtThumbnailRows.Text, 5); ThumbSpacing := IEStrToFloatDefS(edtThumbnailSpacing.Text, 1) / UnitMult; ThumbStyle := TIOPrintPreviewThumbnailStyle(cmbThumbnailStyle.ItemIndex); bThumbShowBox := ThumbStyle = ptBorder; bThumbShadow := ThumbStyle = ptSoftShadow; bThumbShowText := fPrintPreviewParams.ThumbnailShowText; lc := Screen.Cursor; Screen.Cursor := crHourGlass; bPrintAll := cmbPrintSelector.ItemIndex = _cmbPrintSelector_PrintAll; if Sender = btnPrint then begin // PRINTING Printer.Title := fTaskName; Printer.BeginDoc; if bPrintThumbnails then begin // Thumbnails // Use srcview so we get the best quality output if bPrintAll = False then srcview.CopySelection(ImageEnMView1); srcview.mio.PrintImages(iThumbColumns, iThumbRows, ThumbSpacing, ThumbSpacing, not bPrintAll, MarginLeft, MarginTop, MarginRight, MarginBottom, bThumbShowBox, bThumbShowText, bThumbShadow, Thumbnail_Box_Color); end else if bPrintAll then begin // print all bFirstImage := True; for i := 0 to srcview.ImageCount - 1 do begin if GetImage(i) then begin if bFirstImage = False then Printer.NewPage; bFirstImage := False; fIEV.io.Params.DpiX := mio.Params[i].DpiX; fIEV.io.Params.DpiY := mio.Params[i].DpiY; fIEV.io.PrintingFilterOnSubsampling := mio.PrintingFilterOnSubsampling; fIEV.io.PrintImage(Printer.Canvas, MarginLeft, MarginTop, MarginRight, MarginBottom, VerticalPos, HorizontalPos, Size, SpecWidth, SpecHeight, GammaCorrection); end; end; end else begin // print selected bFirstImage := True; for i := 0 to ImageEnMView1.MultiSelectedImagesCount - 1 do begin idx := ImageEnMView1.MultiSelectedImages[i]; if GetImage(idx) then begin if bFirstImage = False then Printer.NewPage; bFirstImage := False; fIEV.io.Params.DpiX := mio.Params[idx].DpiX; fIEV.io.Params.DpiY := mio.Params[idx].DpiY; fIEV.io.PrintingFilterOnSubsampling := mio.PrintingFilterOnSubsampling; fIEV.io.PrintImage(Printer.Canvas, MarginLeft, MarginTop, MarginRight, MarginBottom, VerticalPos, HorizontalPos, Size, SpecWidth, SpecHeight, GammaCorrection); end; end; end; Printer.EndDoc; ImageSelect; end else begin // PREVIEWING if bPrintAll then iImageCount := srcview.ImageCount else iImageCount := ImageEnMView1.MultiSelectedImagesCount; if bPrintThumbnails then begin // Thumbnails iThumbsPerPage := StrToIntDef(edtThumbnailColumns.Text, 4) * StrToIntDef(edtThumbnailRows.Text, 5); iPageCount := iImageCount div iThumbsPerPage; if iImageCount mod iThumbsPerPage <> 0 then inc(iPageCount); if fThumbnailPageIndex < 0 then fThumbnailPageIndex := 0; if fThumbnailPageIndex > iPageCount - 1 then fThumbnailPageIndex := iPageCount - 1; btnPrevious.Enabled := fThumbnailPageIndex > 0; btnNext .Enabled := fThumbnailPageIndex < iPageCount - 1; Caption := fDialogCaption + ' (' + format(iemsg(IEMSG_Page_X_of_X), [fThumbnailPageIndex + 1, iPageCount]) + ')'; // Use ImageEnMView1 rather than srcview so it will be faster ImageEnMView1.MIO.PreviewPrintImages(ImageEnView1.Bitmap, ImageEnView1.Width, ImageEnView1.Height, Printer, iThumbColumns, iThumbRows, ThumbSpacing, ThumbSpacing, not bPrintAll, MarginLeft, MarginTop, MarginRight, MarginBottom, bThumbShowBox, bThumbShowText, bThumbShadow, Thumbnail_Box_Color, fThumbnailPageIndex); end else begin // Image if fIEV.IsEmpty2 then ImageEnView1.Blank else begin Caption := fDialogCaption + ' (' + format(iemsg(IEMSG_X_Pages), [iImageCount]) + ')'; fIEV.io.Params.DpiX := mio.Params[ImageEnMView1.SelectedImage].DpiX; fIEV.io.Params.DpiY := mio.Params[ImageEnMView1.SelectedImage].DpiY; fIEV.io.PrintingFilterOnSubsampling := mio.PrintingFilterOnSubsampling; fIEV.io.PreviewPrintImage(ImageEnView1.Bitmap, ImageEnView1.Width, ImageEnView1.Height, Printer, MarginLeft, MarginTop, MarginRight, MarginBottom, VerticalPos, HorizontalPos, Size, SpecWidth, SpecHeight, GammaCorrection); end; end; ImageEnView1.Update; ImageEnView1.Fit; end; Screen.Cursor := lc; if Sender = btnPrint then ModalResult := mrOK; end; procedure TfiePrnForm3.IncDecMargins(text: TEdit; Button: TUDBtnType); begin case Button of btNext: text.Text := FloatToStrF(dmax(IEStrToFloatDefS(text.Text, 0) + IEGlobalSettings().PrintDialogMarginsIncrement, IEGlobalSettings().PrintDialogMarginsMinValue), ffGeneral, 4, 4); btPrev: text.Text := FloatToStrF(dmax(IEStrToFloatDefS(text.Text, 0) - IEGlobalSettings().PrintDialogMarginsIncrement, IEGlobalSettings().PrintDialogMarginsMinValue), ffGeneral, 4, 4); end; end; procedure TfiePrnForm3.IncDecValue(text: TEdit; Button: TUDBtnType); begin case Button of btNext: text.Text := IntToStr( StrToIntDef(text.Text, 0) + 1 ); btPrev: text.Text := IntToStr( imax(1, StrToIntDef(text.Text, 0) - 1 )); end; end; procedure TfiePrnForm3.cmbPrintSizeChange(Sender: TObject); begin UpdatePrintSizeControls; DelayedPrintPreview(Sender); end; procedure TfiePrnForm3.UpdatePrintSizeControls; const Button_Margin = 8; var bSpecifiedSize : Boolean; bMultiplePages : Boolean; bThumbnails : Boolean; begin bSpecifiedSize := cmbPrintSize.ItemIndex = _cmbPrintSize_SpecifiedSize; edtWidth .Enabled := bSpecifiedSize; updWidth .Enabled := bSpecifiedSize; lblByX .Enabled := bSpecifiedSize; edtHeight .Enabled := bSpecifiedSize; updHeight .Enabled := bSpecifiedSize; bThumbnails := cmbPrintSize.ItemIndex = _cmbPrintSize_Thumbnails; edtThumbnailColumns .Visible := bThumbnails; updThumbnailColumns .Visible := bThumbnails; lblThumbnailsByX .Visible := bThumbnails; edtThumbnailRows .Visible := bThumbnails; updThumbnailRows .Visible := bThumbnails; bMultiplePages := cmbPrintSize.ItemIndex = _cmbPrintSize_MultiplePages; edtPagesWide .Visible := bMultiplePages; edtPagesHigh .Visible := bMultiplePages; updPagesWide .Visible := bMultiplePages; updPagesHigh .Visible := bMultiplePages; lblPagesByX .Visible := bMultiplePages; edtWidth .Visible := not ( bMultiplePages or bThumbnails ); updWidth .Visible := not ( bMultiplePages or bThumbnails ); lblByX .Visible := not ( bMultiplePages or bThumbnails ); edtHeight .Visible := not ( bMultiplePages or bThumbnails ); updHeight .Visible := not ( bMultiplePages or bThumbnails ); grpOther .Visible := not bThumbnails; grpThumbnailsOther .Visible := bThumbnails; btnPrevious .Visible := bThumbnails; btnNext .Visible := bThumbnails; btnPrevious .Top := ImageEnView1.Height - btnPrevious.Height - Button_Margin; btnNext .Top := btnPrevious.Top; btnPrevious .Left := Button_Margin; btnNext .Left := ImageEnView1.Width - btnPrevious.Width - Button_Margin; end; procedure TfiePrnForm3.UpDown1Click(Sender: TObject; Button: TUDBtnType); begin IncDecMargins(Edit1, Button); end; procedure TfiePrnForm3.UpDown2Click(Sender: TObject; Button: TUDBtnType); begin IncDecMargins(Edit2, Button); end; procedure TfiePrnForm3.UpDown3Click(Sender: TObject; Button: TUDBtnType); begin IncDecMargins(Edit3, Button); end; procedure TfiePrnForm3.UpDown4Click(Sender: TObject; Button: TUDBtnType); begin IncDecMargins(Edit4, Button); end; procedure TfiePrnForm3.updGammaClick(Sender: TObject; Button: TUDBtnType); begin case button of btNext: edtGamma.Text := FloatToStrF(dmax(IEStrToFloatDefS(edtGamma.Text, 0) + 0.1, 0), ffGeneral, 4, 4); btPrev: edtGamma.Text := FloatToStrF(dmax(IEStrToFloatDefS(edtGamma.Text, 0) - 0.1, 0), ffGeneral, 4, 4); end; end; procedure TfiePrnForm3.FormResize(Sender: TObject); begin // Fix repaint issue on dragging of splitter pnlPrintSelector.Invalidate; UpdatePrintSizeControls; DelayedPrintPreview(self); end; function TfiePrnForm3.GetImage(idx : Integer) : Boolean; var bRetrieved: Boolean; bAllFiles: Boolean; begin Result := True; bAllFiles := srcview.ClassName <> 'TImageEnFolderMView'; // Don't break existing method of TImageEnMView if (bAllFiles = False) and (IsKnownFormat(srcview.ImageFilename[idx]) = False) then begin fIEV.Blank; Result := False; end; // copy image bRetrieved := False; if (srcview.StoreType <> ietNormal) and FileExists(srcview.ImageFilename[idx]) then begin fIEV.io.LoadFromFile(srcview.ImageFilename[idx]); bRetrieved := not fIEV.io.Aborting; end; if not bRetrieved then srcview.CopyToIEBitmap(idx, fIEV.IEBitmap); // copy annotations if PrintAnnotations then begin {$ifdef IEINCLUDEIMAGINGANNOT} if srcview.MIO.Params[idx].ImagingAnnot.ObjectsCount > 0 then begin srcview.MIO.Params[idx].ImagingAnnot.CopyToTImageEnVect( fIEV ); fIEV.IEBitmap.PixelFormat := ie24RGB; fIEV.CopyObjectsToBack(false); fIEV.RemoveAllObjects; end else {$endif} if srcview.MIO.Params[idx].ImageEnAnnot.IsEmpty = False then begin if srcview.MIO.Params[idx].ImageEnAnnot.HasVectorialObjects then begin // vect objects srcview.MIO.Params[idx].ImageEnAnnot.CopyToTImageEnVect( fIEV ); fIEV.IEBitmap.PixelFormat := ie24RGB; fIEV.CopyObjectsToBack(false); fIEV.RemoveAllObjects; end else begin // ieview layers srcview.MIO.Params[idx].ImageEnAnnot.CopyToTImageEnView( fIEV ); fIEV.IEBitmap.PixelFormat := ie24RGB; fIEV.LayersMergeAll( True ); end; end; end; fIEV.Update; end; procedure TfiePrnForm3.ImageSelect; var idx: integer; begin idx := ImageEnMView1.SelectedImage; if idx > -1 then GetImage(idx); DelayedPrintPreview(self); end; procedure TfiePrnForm3.ImageEnMView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ImageSelect; end; procedure TfiePrnForm3.FormDestroy(Sender: TObject); begin FreeAndNil( fIEV ); end; procedure TfiePrnForm3.FormCreate(Sender: TObject); begin fHaveActivated := False; fIEV := TImageEnVect.Create(nil); fIEV.Blank; IEInitializeComboBox( cmbPosition ); // Move controls to display positions edtThumbnailColumns .Top := edtWidth .Top; updThumbnailColumns .Top := updWidth .Top; lblThumbnailsByX .Top := lblByX .Top; edtThumbnailRows .Top := edtHeight .Top; updThumbnailRows .Top := updHeight .Top; edtPagesWide .Top := edtWidth .Top; updPagesWide .Top := updWidth .Top; edtPagesHigh .Top := edtHeight .Top; updPagesHigh .Top := updHeight .Top; lblPagesByX .Top := lblByX .Top; grpThumbnailsOther .Left := grpOther .Left; grpThumbnailsOther .Top := grpOther .Top; end; const Zoom_Amount = 20; procedure TfiePrnForm3.Delete1Click(Sender: TObject); begin ImageEnMView1.ThumbWidth := ImageEnMView1.ThumbWidth - Zoom_Amount; ImageEnMView1.ThumbHeight := ImageEnMView1.ThumbHeight - Zoom_Amount; end; procedure TfiePrnForm3.Add1Click(Sender: TObject); begin ImageEnMView1.ThumbWidth := ImageEnMView1.ThumbWidth + Zoom_Amount; ImageEnMView1.ThumbHeight := ImageEnMView1.ThumbHeight + Zoom_Amount; end; procedure TfiePrnForm3.btnCancelClick(Sender: TObject); begin ModalResult := mrCancel; end; procedure TfiePrnForm3.btnNextClick(Sender: TObject); begin Inc(fThumbnailPageIndex); DelayedPrintPreview(nil); end; procedure TfiePrnForm3.btnPreviousClick(Sender: TObject); begin Dec(fThumbnailPageIndex); DelayedPrintPreview(nil); end; procedure TfiePrnForm3.btnSetupClick(Sender: TObject); begin PrinterSetupDialog1.Execute; DelayedPrintPreview(self); end; procedure TfiePrnForm3.cmbPositionDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var iGlyph : Integer; sText : string; begin iGlyph := Index; sText := cmbPosition.Items[Index]; IEDrawComboListBoxItem( TCombobox(Control).Canvas, Rect, Control.Enabled, sText, imlPositions, iGlyph); end; procedure TfiePrnForm3.DelayedPrintPreview(Sender: TObject); begin // Reset Preview Timer tmrUpdatePreview.Enabled := False; tmrUpdatePreview.Enabled := True; end; procedure TfiePrnForm3.FormClose(Sender: TObject; var Action: TCloseAction); begin // Save parameters if they print or close, but do not cancel If ModalResult <> mrCancel then SaveParameters; // But always save dialog size fPrintPreviewParams.DlgWidth := -1; fPrintPreviewParams.DlgHeight := -1; if ClientWidth <> fOriginalDlgWidth then fPrintPreviewParams.DlgWidth := ClientWidth; if ClientHeight <> fOriginalDlgHeight then fPrintPreviewParams.DlgHeight := ClientHeight; end; procedure TfiePrnForm3.updHeightClick(Sender: TObject; Button: TUDBtnType); begin IncDecMargins(edtHeight, Button); end; procedure TfiePrnForm3.updThumbnailColumnsClick(Sender: TObject; Button: TUDBtnType); begin IncDecValue(edtThumbnailColumns, Button); end; procedure TfiePrnForm3.updThumbnailRowsClick(Sender: TObject; Button: TUDBtnType); begin IncDecValue(edtThumbnailRows, Button); end; procedure TfiePrnForm3.updThumbnailSpacingClick(Sender: TObject; Button: TUDBtnType); begin IncDecMargins(edtThumbnailSpacing, Button); end; procedure TfiePrnForm3.updWidthClick(Sender: TObject; Button: TUDBtnType); begin IncDecMargins(edtWidth, Button); end; procedure TfiePrnForm3.SetDialogCaption(value: string); begin fDialogCaption := Value; Caption := Value; end; procedure TfiePrnForm3.updPagesHighClick(Sender: TObject; Button: TUDBtnType); begin IncDecValue(edtPagesHigh, Button); end; procedure TfiePrnForm3.updPagesWideClick(Sender: TObject; Button: TUDBtnType); begin IncDecValue(edtPagesWide, Button); end; {$ELSE} // {$ifdef IEINCLUDEPRINTDIALOGS} interface implementation {$ENDIF} {$ELSE} // {$ifdef IEINCLUDEMULTIVIEW} interface implementation {$ENDIF} end.