BSOne.SFC/EM.Lib/ImageEn_SRC/Source/ieprnform3.pas

1027 lines
34 KiB
Plaintext

(* 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.