(* 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: iexActionsMulti.pas Description: TActions for common TImageEnMView functions File version: 1003 *) unit iexActionsMulti; {$I ie.inc} {$IFDEF IEINCLUDEACTIONS} {$DEFINE INCLUDE_MULTIVIEWACTIONS} {$ENDIF} {$IFDEF IEINCLUDEMULTIVIEW} {$DEFINE INCLUDE_MULTIVIEWACTIONS} {$ELSE} {$UNDEF INCLUDE_MULTIVIEWACTIONS} {$ENDIF} {$IFDEF INCLUDE_MULTIVIEWACTIONS} interface Uses ActnList, Classes, ieMIO, imageenproc, hyiedefs, {$ifdef IEHASUITYPES} System.UITypes, {$endif} {$IFDEF IEINCLUDEIEXACQUIRE} iexAcquire, {$ENDIF} IEMView, imageenio, hyieutils, iexBitmaps; Type {!! TIEAutoSaveErrorEvent Declaration type TIEImageSaveErrorEvent = procedure(Sender: TObject; Filename: string; ErrorMsg: string) of object; Description If AutoSaveChanges has been enabled for a relevant TImageEnMViewAction then this event will be called when changes cannot be saved !!} TIEAutoSaveErrorEvent = procedure(Sender: TObject; Filename: string; ErrorMsg: string) of object; TImageEnMViewAction = class(TAction) private protected function ActiveImageEnMView : TImageEnMView; function HaveActiveImageEnMView : boolean; function ActiveImageEnProc : TImageEnProc; function HaveActiveImageEnProc : boolean; function ActiveImageEnMIO : TImageEnMIO; function HaveActiveImageEnMIO : boolean; function HaveSelection : boolean; procedure CheckSelection; function CurrentImageIndex : integer; public fImageEnMView : TImageEnMView; fRequireSelection : Boolean; fRequireImages : Boolean; constructor Create(AOwner: TComponent); override; function HandlesTarget(Target: TObject): Boolean; Override; procedure UpdateTarget(Target: TObject); override; function BaseEnabled : Boolean; published property ImageEnMView: TImageEnMView read fImageEnMView write fImageEnMView; end; TImageEnMViewClear = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewDeleteImage = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewDeselect = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewSelectAll = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewPlaying = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewPlayLoop = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewDisplayModeSingle = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewEnableAdjustOrientation = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewProcAction = class(TImageEnMViewAction) private fAutoSaveChanges : Boolean; fOnAutoSaveError : TIEAutoSaveErrorEvent; procedure DoAutoSaveChanges(iOverrideJpegQuality : Integer); procedure DoLosslessTranform(Transform: TIEJpegTransform); function CanUseLosslessTranform : boolean; function CurrentFilename : string; protected public constructor Create(AOwner: TComponent); override; function CanAutoSaveChanges : boolean; published property AutoSaveChanges : Boolean read fAutoSaveChanges write fAutoSaveChanges default False; property OnAutoSaveError : TIEAutoSaveErrorEvent read fOnAutoSaveError write fOnAutoSaveError; end; {$IFDEF IEINCLUDEDIALOGIP} TImageEnMViewDoPreviews = class(TImageEnMViewProcAction, IIELanguageUpdatable) private fEffects : TPreviewEffects; fOverrideJpegQuality : Integer; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property Effects : TPreviewEffects read fEffects write fEffects default [peAll]; property OverrideJpegQuality : Integer read fOverrideJpegQuality write fOverrideJpegQuality default 0; end; {$ENDIF} {$IFDEF IEINCLUDEDIALOGIP} TImageEnMViewDoEffectPreviews = class(TImageEnMViewProcAction, IIELanguageUpdatable) private fOverrideJpegQuality : Integer; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property OverrideJpegQuality : Integer read fOverrideJpegQuality write fOverrideJpegQuality default 0; end; {$ENDIF} {$IFDEF IEINCLUDEDIALOGIP} TImageEnMViewDoAdjustPreviews = class(TImageEnMViewProcAction, IIELanguageUpdatable) private fOverrideJpegQuality : Integer; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property OverrideJpegQuality : Integer read fOverrideJpegQuality write fOverrideJpegQuality default 0; end; {$ENDIF} {$IFDEF IEINCLUDEDIALOGIP} TImageEnMViewDoEditPreviews = class(TImageEnMViewProcAction, IIELanguageUpdatable) private fOverrideJpegQuality : Integer; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property OverrideJpegQuality : Integer read fOverrideJpegQuality write fOverrideJpegQuality default 0; end; {$ENDIF} {$IFDEF IEINCLUDEDIALOGIP} TImageEnMViewPromptToRotate = class(TImageEnMViewProcAction, IIELanguageUpdatable) private fAntiAliasMode : TIEAntialiasMode; fOverrideJpegQuality : Integer; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property AntiAliasMode : TIEAntialiasMode read fAntiAliasMode write fAntiAliasMode default ierFast; property OverrideJpegQuality : Integer read fOverrideJpegQuality write fOverrideJpegQuality default 0; end; {$ENDIF} {$IFDEF IEINCLUDEDIALOGIP} TImageEnMViewPromptToResize = class(TImageEnMViewProcAction, IIELanguageUpdatable) private fResampleFilter : TResampleFilter; fOverrideJpegQuality : Integer; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property ResampleFilter : TResampleFilter read fResampleFilter write fResampleFilter default rfFastLinear; property OverrideJpegQuality : Integer read fOverrideJpegQuality write fOverrideJpegQuality default 0; end; {$ENDIF} TImageEnMViewFlipHorizontal = class(TImageEnMViewProcAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewFlipVertical = class(TImageEnMViewProcAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewRotateRight = class(TImageEnMViewProcAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewRotate180 = class(TImageEnMViewProcAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewRotateLeft = class(TImageEnMViewProcAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewCutToClipboard = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewCopyToClipboard = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewPasteFromClipboard = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; {$IFDEF IEINCLUDEOPENSAVEDIALOGS} TImageEnMViewPromptToOpen = class(TImageEnMViewAction, IIELanguageUpdatable) private fMultiSelect : Boolean; fDialogTitle : WideString; fDefaultFilter : TIOFileType; fLimitToFileType : TIOFileType; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property MultiSelect : Boolean read fMultiSelect write fMultiSelect default false; property DialogTitle : WideString read fDialogTitle write fDialogTitle; property DefaultFilter : TIOFileType read fDefaultFilter write fDefaultFilter default -1; property LimitToFileType : TIOFileType read fLimitToFileType write fLimitToFileType default -1; end; {$ENDIF} {$IFDEF IEINCLUDEOPENSAVEDIALOGS} TImageEnMViewPromptToAdd = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; {$ENDIF} {$IFDEF IEINCLUDEOPENSAVEDIALOGS} TImageEnMViewSave = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; {$ENDIF} {$IFDEF IEINCLUDEOPENSAVEDIALOGS} TImageEnMViewPromptToSave = class(TImageEnMViewAction, IIELanguageUpdatable) private fDialogTitle : WideString; fDefaultFilter : TIOFileType; fLimitToFileType : TIOFileType; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property DialogTitle : WideString read fDialogTitle write fDialogTitle; property DefaultFilter : TIOFileType read fDefaultFilter write fDefaultFilter default -1; property LimitToFileType : TIOFileType read fLimitToFileType write fLimitToFileType default -1; end; {$ENDIF} {$IFDEF IEINCLUDEDIALOGIO} TImageEnMViewDoIOPreviews = class(TImageEnMViewAction, IIELanguageUpdatable) private fPreviewParams : TPreviewParams; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property PreviewParams : TPreviewParams read fPreviewParams write fPreviewParams default [ppAll]; end; {$ENDIF} {$IFDEF IEINCLUDEDIALOGIO} TImageEnMViewDoIOPreviewsSelected = class(TImageEnMViewAction, IIELanguageUpdatable) private fPreviewParams : TPreviewParams; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property PreviewParams : TPreviewParams read fPreviewParams write fPreviewParams default [ppAll]; end; {$ENDIF} {$IFDEF IEINCLUDEPRINTDIALOGS} TImageEnMViewDoPrintPreviewDialog = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; {$ENDIF} {$IFDEF IEINCLUDEPRINTDIALOGS} TImageEnMViewPrintImageNormal = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; {$ENDIF} {$IFDEF IEINCLUDEPRINTDIALOGS} TImageEnMViewPrintImageFitToPage = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; {$ENDIF} {$IFDEF IEINCLUDEPRINTDIALOGS} TImageEnMViewPrintSelectedThumbnails = class(TImageEnMViewAction, IIELanguageUpdatable) private fColumnCount : integer; fRowCount : integer; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property ColumnCount : integer read fColumnCount write fColumnCount default 4; property RowCount : integer read fRowCount write fRowCount default 6; end; {$ENDIF} {$IFDEF IEINCLUDEPRINTDIALOGS} TImageEnMViewPrintAllThumbnails = class(TImageEnMViewAction, IIELanguageUpdatable) private fColumnCount : integer; fRowCount : integer; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property ColumnCount : integer read fColumnCount write fColumnCount default 4; property RowCount : integer read fRowCount write fRowCount default 6; end; {$ENDIF} {$IFDEF IEINCLUDEIEXACQUIRE} TImageEnMViewSelectAcquireSource = class(TImageEnMViewAction, IIELanguageUpdatable) private fApis : TIEAcquireApis; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published property Apis : TIEAcquireApis read fApis write fApis default [ieaTwain, ieaWIA]; end; {$ENDIF} {$IFDEF IEINCLUDEIEXACQUIRE} TImageEnMViewAcquire = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateLanguage(); published end; {$ENDIF} TImageEnMViewSeekFirst = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewSeekPrior = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewSeekNext = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewSeekLast = class(TImageEnMViewAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published end; TImageEnMViewStyleShowThumbs = class(TImageEnMViewAction, IIELanguageUpdatable) private fTopText : TIEImageEnMViewDefaultText; fInfoText : TIEImageEnMViewDefaultText; fBottomText : TIEImageEnMViewDefaultText; fFixGaps : Boolean; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published property TopText : TIEImageEnMViewDefaultText read fTopText write fTopText default iedtNone; property InfoText : TIEImageEnMViewDefaultText read fInfoText write fInfoText default iedtNone; property BottomText : TIEImageEnMViewDefaultText read fBottomText write fBottomText default iedtFileName; property FixGaps : Boolean read fFixGaps write fFixGaps default True; end; TImageEnMViewStyleShowLargeThumbs = class(TImageEnMViewAction, IIELanguageUpdatable) private fTopText : TIEImageEnMViewDefaultText; fInfoText : TIEImageEnMViewDefaultText; fBottomText : TIEImageEnMViewDefaultText; fFixGaps : Boolean; fThumbnailZoom : Double; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published property TopText : TIEImageEnMViewDefaultText read fTopText write fTopText default iedtNone; property InfoText : TIEImageEnMViewDefaultText read fInfoText write fInfoText default iedtNone; property BottomText : TIEImageEnMViewDefaultText read fBottomText write fBottomText default iedtFileName; property ThumbnailZoom : Double read fThumbnailZoom write fThumbnailZoom; property FixGaps : Boolean read fFixGaps write fFixGaps default True; end; TImageEnMViewStyleShowDetails = class(TImageEnMViewAction, IIELanguageUpdatable) private fTopText : TIEImageEnMViewDefaultText; fInfoText : TIEImageEnMViewDefaultText; fBottomText : TIEImageEnMViewDefaultText; fFixGaps : Boolean; fThumbnailZoom : Double; fBoldFilename : Boolean; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published property TopText : TIEImageEnMViewDefaultText read fTopText write fTopText default iedtFileName; property InfoText : TIEImageEnMViewDefaultText read fInfoText write fInfoText default iedtFileType; property BottomText : TIEImageEnMViewDefaultText read fBottomText write fBottomText default iedtImageDimAndSize; property FixGaps : Boolean read fFixGaps write fFixGaps default True; property ThumbnailZoom : Double read fThumbnailZoom write fThumbnailZoom; property BoldFilename : Boolean read fBoldFilename write fBoldFilename default True; end; TImageEnMViewStyleShowColumns = class(TImageEnMViewAction, IIELanguageUpdatable) private fTopText : TIEImageEnMViewDefaultText; fInfoText : TIEImageEnMViewDefaultText; fBottomText : TIEImageEnMViewDefaultText; fFixGaps : Boolean; fThumbnailSize : Integer; fShowIconsOnly: Boolean; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published property TopText : TIEImageEnMViewDefaultText read fTopText write fTopText default iedtFileName; property InfoText : TIEImageEnMViewDefaultText read fInfoText write fInfoText default iedtFileType; property BottomText : TIEImageEnMViewDefaultText read fBottomText write fBottomText default iedtImageDimAndSize; property FixGaps : Boolean read fFixGaps write fFixGaps default True; property ThumbnailSize : Integer read fThumbnailSize write fThumbnailSize default 24; property ShowIconsOnly : Boolean read fShowIconsOnly write fShowIconsOnly default True; end; TImageEnMViewStyleShowFileList = class(TImageEnMViewAction, IIELanguageUpdatable) private fBottomText : TIEImageEnMViewDefaultText; fFixGaps : Boolean; fThumbnailSize : Integer; fShowIconsOnly: Boolean; protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published property Text : TIEImageEnMViewDefaultText read fBottomText write fBottomText default iedtFileName; property FixGaps : Boolean read fFixGaps write fFixGaps default True; property ThumbnailSize : Integer read fThumbnailSize write fThumbnailSize default 24; property ShowIconsOnly : Boolean read fShowIconsOnly write fShowIconsOnly default True; end; TImageEnMViewSortAction = class(TImageEnMViewAction) private protected fSortBy : TIEImageEnMViewSortBy; public procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; published end; TImageEnMViewSortByFilename = class(TImageEnMViewSortAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure UpdateLanguage(); published end; TImageEnMViewSortByFileType = class(TImageEnMViewSortAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure UpdateLanguage(); published end; TImageEnMViewSortByFileSize = class(TImageEnMViewSortAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure UpdateLanguage(); published end; TImageEnMViewSortByCreateDate = class(TImageEnMViewSortAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure UpdateLanguage(); published end; TImageEnMViewSortByEditDate = class(TImageEnMViewSortAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure UpdateLanguage(); published end; TImageEnMViewSortByImageSize = class(TImageEnMViewSortAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure UpdateLanguage(); published end; TImageEnMViewSortByOther = class(TImageEnMViewSortAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure UpdateLanguage(); published property SortBy : TIEImageEnMViewSortBy read fSortBy write fSortBy; end; TImageEnMViewSortAscending = class(TImageEnMViewSortAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure UpdateLanguage(); published end; TImageEnMViewSortDescending = class(TImageEnMViewSortAction, IIELanguageUpdatable) private protected public constructor Create(AOwner: TComponent); override; procedure UpdateLanguage(); published end; TImageEnMViewShowColumn = class(TImageEnMViewAction, IIELanguageUpdatable) private fColumn: TIEImageEnMViewDefaultText; procedure SetColumn(v: TIEImageEnMViewDefaultText); protected public constructor Create(AOwner: TComponent); override; procedure ExecuteTarget(Target: TObject); override; procedure UpdateTarget(Target: TObject); override; procedure UpdateLanguage(); published property Column : TIEImageEnMViewDefaultText read fColumn write SetColumn; end; const CTRL_A_SHORTCUT = 16449; CTRL_C_SHORTCUT = 16451; CTRL_O_SHORTCUT = 16463; CTRL_P_SHORTCUT = 16464; CTRL_S_SHORTCUT = 16467; CTRL_V_SHORTCUT = 16470; CTRL_X_SHORTCUT = 16472; CTRL_Y_SHORTCUT = 16473; CTRL_Z_SHORTCUT = 16474; CTRL_ALT_S_SHORTCUT = 49235; CTRL_DELETE_SHORTCUT = 16430; implementation uses {$IFDEF IEINCLUDEPRINTDIALOGS} Printers, {$ENDIF} Forms, SysUtils, iewords, iesettings, Graphics, iexFolderMView; constructor TImageEnMViewAction.Create(AOwner: TComponent); begin inherited Create(AOwner); fRequireImages := True; fRequireSelection := True; Caption := 'ImageEn Action'; DisableIfNoHandler := false; end; function TImageEnMViewAction.CurrentImageIndex: integer; begin Result := -1; if HaveActiveImageEnMView then begin if ActiveImageEnMView.DisplayMode = mdSingle then Result := ActiveImageEnMView.VisibleFrame else Result := ActiveImageEnMView.SelectedImage; end; end; function TImageEnMViewAction.HandlesTarget(Target: TObject): Boolean; begin Result := True; end; function TImageEnMViewAction.HaveActiveImageEnMIO: boolean; begin Result := HaveActiveImageEnMView; // It will always create a IO if it is required end; function TImageEnMViewAction.HaveActiveImageEnProc: boolean; begin Result := HaveActiveImageEnMView; // It will always create a Proc if it is required end; function TImageEnMViewAction.HaveActiveImageEnMView: boolean; begin Result := ActiveImageEnMView <> nil; end; function TImageEnMViewAction.HaveSelection: boolean; begin Result := HaveActiveImageEnMView and (ActiveImageEnMView.SelectedImage > -1); end; procedure TImageEnMViewAction.CheckSelection; begin // if we are in mdSingle mode then ensure the "Current Image" is the displayed mode if HaveActiveImageEnMView then if ActiveImageEnMView.DisplayMode = mdSingle then ActiveImageEnMView.SelectedImage := ActiveImageEnMView.VisibleFrame; end; function TImageEnMViewAction.BaseEnabled: boolean; begin Result := HaveActiveImageEnMView; if Result and fRequireImages then begin Result := ActiveImageEnMView.ImageCount > 0; // fRequireSelection assumes fRequireImages if Result and fRequireSelection then Result := HaveSelection; end; end; procedure TImageEnMViewAction.UpdateTarget(Target: TObject); begin Enabled := BaseEnabled; end; function TImageEnMViewAction.ActiveImageEnMIO: TImageEnMIO; begin Result := nil; if HaveActiveImageEnMView then Result := ActiveImageEnMView.MIO; end; function TImageEnMViewAction.ActiveImageEnProc: TImageEnProc; begin Result := nil; if HaveActiveImageEnMView then Result := ActiveImageEnMView.Proc; end; // Return the speciifed or selected ImageEnMView function TImageEnMViewAction.ActiveImageEnMView: TImageEnMView; begin Result := fImageEnMView; if (Result = nil) and Assigned(Screen.ActiveControl) and (Screen.ActiveControl is TImageEnMView) then Result := TImageEnMView(Screen.ActiveControl); end; { TImageEnMViewClear } constructor TImageEnMViewClear.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; ImageIndex := 25; UpdateLanguage(); end; procedure TImageEnMViewClear.UpdateLanguage(); begin Caption := iemsg(IEMsg_Clear); Hint := iemsg(IEMsg_ClearAllImages); end; procedure TImageEnMViewClear.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then ActiveImageEnMView.Clear; end; { TImageEnMViewDeleteImage } constructor TImageEnMViewDeleteImage.Create(AOwner: TComponent); begin inherited; ShortCut := CTRL_DELETE_SHORTCUT; ImageIndex := 5; UpdateLanguage(); end; procedure TImageEnMViewDeleteImage.UpdateLanguage(); begin Caption := iemsg(IEMsg_Delete); Hint := iemsg(IEMsg_RemoveTheSelectedImage); end; procedure TImageEnMViewDeleteImage.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then ActiveImageEnMView.DeleteSelectedImages; end; { TImageEnMViewSelectAll } constructor TImageEnMViewSelectAll.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; ShortCut := CTRL_A_SHORTCUT; ImageIndex := 11; UpdateLanguage(); end; procedure TImageEnMViewSelectAll.UpdateLanguage(); begin Caption := iemsg(IEMsg_SelectAll); Hint := iemsg(IEMsg_SelectAllImagesInThegrid); end; procedure TImageEnMViewSelectAll.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then ActiveImageEnMView.SelectAll; end; procedure TImageEnMViewSelectAll.UpdateTarget(Target: TObject); var bEnabled: boolean; begin bEnabled := BaseEnabled; if bEnabled then bEnabled := ActiveImageEnMView.EnableMultiSelect and (ActiveImageEnMView.DisplayMode = mdGrid); Enabled := bEnabled; end; { TImageEnMViewDeselect } constructor TImageEnMViewDeselect.Create(AOwner: TComponent); begin inherited; ImageIndex := 12; UpdateLanguage(); end; procedure TImageEnMViewDeselect.UpdateLanguage(); begin Caption := iemsg(IEMsg_Deselect); Hint := iemsg(IEMsg_ClearYourSelection); end; procedure TImageEnMViewDeselect.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then ActiveImageEnMView.DeSelect; end; procedure TImageEnMViewDeselect.UpdateTarget(Target: TObject); var bEnabled: boolean; begin bEnabled := BaseEnabled; if bEnabled then bEnabled := ActiveImageEnMView.DisplayMode = mdGrid; Enabled := bEnabled; end; { TImageEnMViewPlaying } constructor TImageEnMViewPlaying.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; ImageIndex := 35; UpdateLanguage(); end; procedure TImageEnMViewPlaying.UpdateLanguage(); begin Caption := iemsg(IEMsg_Animate); Hint := iemsg(IEMsg_PlaybackTheseFramesInSequence); end; procedure TImageEnMViewPlaying.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then ActiveImageEnMView.Playing := not ActiveImageEnMView.Playing; end; procedure TImageEnMViewPlaying.UpdateTarget(Target: TObject); var bCanAnimate: Boolean; begin bCanAnimate := False; if BaseEnabled then bCanAnimate := ActiveImageEnMView.ImageCount > 1; Enabled := bCanAnimate; if HaveActiveImageEnMView and bCanAnimate then Checked := ActiveImageEnMView.Playing else Checked := False; end; { TImageEnMViewPlayLoop } constructor TImageEnMViewPlayLoop.Create(AOwner: TComponent); begin inherited; fRequireImages := False; ImageIndex := 36; UpdateLanguage(); end; procedure TImageEnMViewPlayLoop.UpdateLanguage(); begin Caption := iemsg(IEMsg_LoopPlayback); Hint := iemsg(IEMsg_RestartPlaybackAfterItCompletes); end; procedure TImageEnMViewPlayLoop.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then ActiveImageEnMView.PlayLoop := not ActiveImageEnMView.PlayLoop; end; procedure TImageEnMViewPlayLoop.UpdateTarget(Target: TObject); var bCanAnimate: Boolean; begin bCanAnimate := False; if BaseEnabled then bCanAnimate := ActiveImageEnMView.ImageCount > 1; Enabled := bCanAnimate; if HaveActiveImageEnMView and bCanAnimate then Checked := ActiveImageEnMView.PlayLoop else Checked := False; end; { TImageEnMViewDisplayModeSingle } constructor TImageEnMViewDisplayModeSingle.Create(AOwner: TComponent); begin inherited; fRequireImages := False; ImageIndex := 60; UpdateLanguage(); end; procedure TImageEnMViewDisplayModeSingle.UpdateLanguage(); begin Caption := iemsg(IEMsg_SingleFrameOnly); Hint := iemsg(IEMsg_DisplayOnlyTheActiveFrame); end; procedure TImageEnMViewDisplayModeSingle.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then begin if ActiveImageEnMView.DisplayMode = mdGrid then begin ActiveImageEnMView.VisibleFrame := ActiveImageEnMView.SelectedImage; ActiveImageEnMView.DisplayMode := mdSingle end else begin ActiveImageEnMView.SelectedImage := ActiveImageEnMView.VisibleFrame; ActiveImageEnMView.DisplayMode := mdGrid; end; end; end; procedure TImageEnMViewDisplayModeSingle.UpdateTarget(Target: TObject); begin Enabled := BaseEnabled; if Enabled then Checked := ActiveImageEnMView.DisplayMode = mdSingle else Checked := False; end; { TImageEnMViewEnableAdjustOrientation } constructor TImageEnMViewEnableAdjustOrientation.Create(AOwner: TComponent); begin inherited; fRequireImages := False; ImageIndex := 88; UpdateLanguage(); end; procedure TImageEnMViewEnableAdjustOrientation.UpdateLanguage(); begin Caption := iemsg(IEMsg_AutoRotateDisplay); Hint := iemsg(IEMsg_AutomaticallyDisplayImagesWithTheCorrectOrientation); end; procedure TImageEnMViewEnableAdjustOrientation.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then ActiveImageEnMView.EnableAdjustOrientation := not ActiveImageEnMView.EnableAdjustOrientation; end; procedure TImageEnMViewEnableAdjustOrientation.UpdateTarget(Target: TObject); begin Enabled := BaseEnabled; if Enabled then Checked := ActiveImageEnMView.EnableAdjustOrientation else Checked := False; end; { TImageEnMViewProcAction } function TImageEnMViewProcAction.CanAutoSaveChanges: boolean; var sFilename: string; begin Result := False; if HaveActiveImageEnMView then begin sFilename := CurrentFilename; Result := (sFilename <> '') and (pos(iemview.IEM_Path_Index_Delimiter, sFilename) = 0); // not one frame of a multiframe file end; end; function TImageEnMViewProcAction.CanUseLosslessTranform: boolean; var ex: string; begin ex := string(IEExtractFileExtW(CurrentFileName)); Result := (ex = '.jpg') or (ex = '.jpeg') or (ex = '.jpe') or (ex='.jif'); end; constructor TImageEnMViewProcAction.Create(AOwner: TComponent); begin inherited; fAutoSaveChanges := False; end; function TImageEnMViewProcAction.CurrentFilename: string; begin Result := ''; if HaveActiveImageEnMView and (CurrentImageIndex >= 0) then Result := ActiveImageEnMView.ImageFilename[CurrentImageIndex]; end; procedure TImageEnMViewProcAction.DoAutoSaveChanges(iOverrideJpegQuality : Integer); var ABitmap : TIEBitmap; iImageIndex: Integer; sFilename: string; begin if CanAutoSaveChanges then try iImageIndex := CurrentImageIndex; sFilename := CurrentFilename; if pos(IEM_Path_Index_Delimiter, sFilename) > 0 then // is one frame of a multiframe file raise EIEException.create('File is part of a multi-frame image set'); try ABitmap := ActiveImageEnMView.GetTIEBitmap(iImageIndex); if iOverrideJpegQuality > 0 then ActiveImageEnMIO.Params[iImageIndex].JPEG_Quality := iOverrideJpegQuality; ABitmap.write(sFilename, ActiveImageEnMIO.Params[iImageIndex]); finally ActiveImageEnMView.ReleaseBitmap(0); end; except on E:Exception do begin if assigned(fOnAutoSaveError) then fOnAutoSaveError(ActiveImageEnMView, CurrentFilename, E.Message); end; end; end; procedure TImageEnMViewProcAction.DoLosslessTranform(Transform: TIEJpegTransform); var sFilename: string; begin if CanAutoSaveChanges then try sFilename := CurrentFilename; if pos(IEM_Path_Index_Delimiter, sFilename) > 0 then // is one frame of a multiframe file raise EIEException.create('File is part of a multi-frame image set'); if JpegLosslessTransform2(sFileName, Transform, False, jcCopyAll, Rect(0, 0, 0, 0), True) = False then raise EIEException.create('Unexpected error while performing lossless transformation'); except on E:Exception do begin if assigned(fOnAutoSaveError) then fOnAutoSaveError(ActiveImageEnMView, CurrentFilename, E.Message); end; end; end; { TImageEnMViewDoAdjustPreviews } {$IFDEF IEINCLUDEDIALOGIP} constructor TImageEnMViewDoAdjustPreviews.Create(AOwner: TComponent); begin inherited; ImageIndex := 28; fOverrideJpegQuality := 0; UpdateLanguage(); end; procedure TImageEnMViewDoAdjustPreviews.UpdateLanguage(); begin Caption := iemsg(IEMsg_AdjustColors) + Menu_Ellipses; Hint := iemsg(IEMsg_PerformColorEnhancementFunctionsOnTheSelectedImage); end; procedure TImageEnMViewDoAdjustPreviews.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then begin if ActiveImageEnProc.DoPreviews( ppeColorAdjustments ) and fAutoSaveChanges then DoAutoSaveChanges(fOverrideJpegQuality); end; end; {$ENDIF} { TImageEnMViewDoPreviews } {$IFDEF IEINCLUDEDIALOGIP} constructor TImageEnMViewDoPreviews.Create(AOwner: TComponent); begin inherited; fOverrideJpegQuality := 0; ImageIndex := 110; fEffects := [peAll]; UpdateLanguage(); end; procedure TImageEnMViewDoPreviews.UpdateLanguage(); begin Caption := iemsg( IEMsg_PreviewEffects ) + Menu_Ellipses; Hint := iemsg( IEMsg_PreviewEffectsToEditAndEnhanceTheImage ); end; procedure TImageEnMViewDoPreviews.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then begin if ActiveImageEnProc.DoPreviews( fEffects ) and fAutoSaveChanges then DoAutoSaveChanges(fOverrideJpegQuality); end; end; {$ENDIF} { TImageEnMViewDoEffectPreviews } {$IFDEF IEINCLUDEDIALOGIP} constructor TImageEnMViewDoEffectPreviews.Create(AOwner: TComponent); begin inherited; fOverrideJpegQuality := 0; ImageIndex := 29; UpdateLanguage(); end; procedure TImageEnMViewDoEffectPreviews.UpdateLanguage(); begin Caption := iemsg(IEMsg_ImageEffects) + Menu_Ellipses; Hint := iemsg(IEMsg_PerformEffectsOnTheSelectedImage); end; procedure TImageEnMViewDoEffectPreviews.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then begin if ActiveImageEnProc.DoPreviews( ppeSpecialEffects ) and fAutoSaveChanges then DoAutoSaveChanges(fOverrideJpegQuality); end; end; {$ENDIF} { TImageEnMViewDoEditPreviews } {$IFDEF IEINCLUDEDIALOGIP} constructor TImageEnMViewDoEditPreviews.Create(AOwner: TComponent); begin inherited; ImageIndex := 111; fOverrideJpegQuality := 0; UpdateLanguage(); end; procedure TImageEnMViewDoEditPreviews.UpdateLanguage(); begin Caption := iemsg( IEMsg_EditImage ) + Menu_Ellipses; Hint := iemsg( IEMsg_PerformEditingFunctionsOnTheImage ); end; procedure TImageEnMViewDoEditPreviews.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then begin if ActiveImageEnProc.DoPreviews( ppeEditingFunctions ) and fAutoSaveChanges then DoAutoSaveChanges(fOverrideJpegQuality); end; end; {$ENDIF} { TImageEnMViewPromptToRotate } {$IFDEF IEINCLUDEDIALOGIP} constructor TImageEnMViewPromptToRotate.Create(AOwner: TComponent); begin inherited; fOverrideJpegQuality := 0; ImageIndex := 97; fAntiAliasMode := ierFast; UpdateLanguage(); end; procedure TImageEnMViewPromptToRotate.UpdateLanguage(); begin Caption := iemsg(IEMsg_CustomRotate) + Menu_Ellipses; Hint := iemsg(IEMsg_RotateImageByACustomAngle); end; procedure TImageEnMViewPromptToRotate.ExecuteTarget(Target: TObject); var WasAntiAlias : TIEAntialiasMode; begin if HaveActiveImageEnProc then begin WasAntiAlias := IEGlobalSettings().DefaultRotateAntiAlias; try IEGlobalSettings().DefaultRotateAntiAlias := fAntiAliasMode; if ActiveImageEnProc.DoPreviews([peRotate]) and fAutoSaveChanges then DoAutoSaveChanges(fOverrideJpegQuality); finally IEGlobalSettings().DefaultRotateAntiAlias := WasAntiAlias; end; end; end; {$ENDIF} { TImageEnMViewPromptToResize } {$IFDEF IEINCLUDEDIALOGIP} constructor TImageEnMViewPromptToResize.Create(AOwner: TComponent); begin inherited; ImageIndex := 98; fResampleFilter := rfFastLinear; fOverrideJpegQuality := 0; UpdateLanguage(); end; procedure TImageEnMViewPromptToResize.UpdateLanguage(); begin Caption := iemsg(IEMsg_ResizeImage) + '...'; Hint := iemsg(IEMsg_SpecifyANewSizeForTheImage); end; procedure TImageEnMViewPromptToResize.ExecuteTarget(Target: TObject); var WasResampleFilter : TResampleFilter; begin if HaveActiveImageEnProc then begin WasResampleFilter := IEGlobalSettings().DefaultResampleFilter; try IEGlobalSettings().DefaultResampleFilter := fResampleFilter; if ActiveImageEnProc.DoPreviews([peResize]) and fAutoSaveChanges then DoAutoSaveChanges(fOverrideJpegQuality); finally IEGlobalSettings().DefaultResampleFilter := WasResampleFilter; end; end; end; {$ENDIF} { TImageEnMViewFlipHorizontal } constructor TImageEnMViewFlipHorizontal.Create(AOwner: TComponent); begin inherited; ImageIndex := 16; UpdateLanguage(); end; procedure TImageEnMViewFlipHorizontal.UpdateLanguage(); begin Caption := iemsg(IEMsg_FlipHorizontal); Hint := iemsg(IEMsg_FlipTheselectedImageFromTopToBottom); end; procedure TImageEnMViewFlipHorizontal.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then ActiveImageEnProc.Flip(fdHorizontal); if fAutoSaveChanges then begin if CanUseLosslessTranform then DoLosslessTranform(jtHorizFlip) else DoAutoSaveChanges(-1); end; end; { TImageEnMViewFlipVertical } constructor TImageEnMViewFlipVertical.Create(AOwner: TComponent); begin inherited; ImageIndex := 17; UpdateLanguage(); end; procedure TImageEnMViewFlipVertical.UpdateLanguage(); begin Caption := iemsg(IEMsg_FlipVertical); Hint := iemsg(IEMsg_FlipTheselectedImageFromLeftToRight); end; procedure TImageEnMViewFlipVertical.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then ActiveImageEnProc.Flip(fdVertical); if fAutoSaveChanges then begin if CanUseLosslessTranform then DoLosslessTranform(jtVertFlip) else DoAutoSaveChanges(-1); end; end; { TImageEnMViewRotateRight } constructor TImageEnMViewRotateRight.Create(AOwner: TComponent); begin inherited; ImageIndex := 15; UpdateLanguage(); end; procedure TImageEnMViewRotateRight.UpdateLanguage(); begin Caption := iemsg(IEMsg_RotateRight); Hint := iemsg(IEMsg_RotateTheSelectedImage90Clockwise); end; procedure TImageEnMViewRotateRight.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then ActiveImageEnProc.Rotate(270, ierFast); // Antialias is not used for 90 deg. rotate anyway if fAutoSaveChanges then begin if CanUseLosslessTranform then DoLosslessTranform(jtRotate90) else DoAutoSaveChanges(-1); end; end; { TImageEnMViewRotate180 } constructor TImageEnMViewRotate180.Create(AOwner: TComponent); begin inherited; ImageIndex := 14; UpdateLanguage(); end; procedure TImageEnMViewRotate180.UpdateLanguage(); begin Caption := iemsg(IEMsg_Rotate180); Hint := iemsg(IEMsg_RotateTheSelectedImage180Clockwise); end; procedure TImageEnMViewRotate180.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then ActiveImageEnProc.Rotate(180, ierFast); // Antialias is not used for 90 deg. rotate anyway if fAutoSaveChanges then begin if CanUseLosslessTranform then DoLosslessTranform(jtRotate180) else DoAutoSaveChanges(-1); end; end; { TImageEnMViewRotateLeft } constructor TImageEnMViewRotateLeft.Create(AOwner: TComponent); begin inherited; ImageIndex := 13; UpdateLanguage(); end; procedure TImageEnMViewRotateLeft.UpdateLanguage(); begin Caption := iemsg(IEMsg_RotateLeft); Hint := iemsg(IEMsg_RotateTheselectedImage90Counterclockwise); end; procedure TImageEnMViewRotateLeft.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then ActiveImageEnProc.Rotate(90, ierFast); // Antialias is not used for 90 deg. rotate anyway if fAutoSaveChanges then begin if CanUseLosslessTranform then DoLosslessTranform(jtRotate270) else DoAutoSaveChanges(-1); end; end; { TImageEnMViewCutToClipboard } constructor TImageEnMViewCutToClipboard.Create(AOwner: TComponent); begin inherited; ShortCut := CTRL_X_SHORTCUT; ImageIndex := 0; UpdateLanguage(); end; procedure TImageEnMViewCutToClipboard.UpdateLanguage(); begin Caption := iemsg(IEMsg_Cut); Hint := iemsg(IEMsg_CopyTheCurrentImageToTheClipboardAndRemoveIt); end; procedure TImageEnMViewCutToClipboard.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then begin ActiveImageEnProc.CopyToClipboard; if ActiveImageEnMView.SelectedImage > -1 then ActiveImageEnMView.DeleteImage(ActiveImageEnMView.SelectedImage); // Only the current image end; end; { TImageEnMViewCopyToClipboard } constructor TImageEnMViewCopyToClipboard.Create(AOwner: TComponent); begin inherited; ShortCut := CTRL_C_SHORTCUT; ImageIndex := 1; UpdateLanguage(); end; procedure TImageEnMViewCopyToClipboard.UpdateLanguage(); begin Caption := iemsg(IEMsg_Copy); Hint := iemsg(IEMsg_CopyTheCurrentImageToTheClipboard); end; procedure TImageEnMViewCopyToClipboard.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnProc then ActiveImageEnProc.CopyToClipboard; end; { TImageEnMViewPasteFromClipboard } constructor TImageEnMViewPasteFromClipboard.Create(AOwner: TComponent); begin inherited; fRequireImages := False; ShortCut := CTRL_V_SHORTCUT; ImageIndex := 2; UpdateLanguage(); end; procedure TImageEnMViewPasteFromClipboard.UpdateLanguage(); begin Caption := iemsg(IEMsg_Paste); Hint := iemsg(IEMsg_PasteAnImageFromTheClipboard); end; procedure TImageEnMViewPasteFromClipboard.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnProc then if ActiveImageEnProc.CanPasteFromClipboard( iecpFullImage ) then begin ActiveImageEnMView.AppendImage(100, 100); ActiveImageEnProc.PasteFromClipboard( iecpFullImage ); end; end; procedure TImageEnMViewPasteFromClipboard.UpdateTarget(Target: TObject); var bEnabled: boolean; begin bEnabled := BaseEnabled; if bEnabled and HaveActiveImageEnProc then bEnabled := ActiveImageEnProc.CanPasteFromClipboard( iecpFullImage ); Enabled := bEnabled; end; { TImageEnMViewPromptToOpen } {$IFDEF IEINCLUDEOPENSAVEDIALOGS} constructor TImageEnMViewPromptToOpen.Create(AOwner: TComponent); begin inherited; fRequireImages := False; ShortCut := CTRL_O_SHORTCUT; ImageIndex := 7; fDefaultFilter := -1; fLimitToFileType := -1; fMultiSelect := False; UpdateLanguage(); end; procedure TImageEnMViewPromptToOpen.UpdateLanguage(); begin Caption := iemsg(IEMsg_Open); Hint := iemsg(IEMsg_LoadAnImageFromFile); end; procedure TImageEnMViewPromptToOpen.ExecuteTarget(Target: TObject); var sFilename: string; begin if HaveActiveImageEnMIO then begin sFilename := ActiveImageEnMIO.ExecuteOpenDialog('', '', false, 0, '', fMultiSelect, fDialogTitle, '', fDefaultFilter, fLimitToFileType); if sFilename <> '' then ActiveImageEnMIO.LoadFromFile(sFilename); end; end; {$ENDIF} { TImageEnMViewPromptToAdd } {$IFDEF IEINCLUDEOPENSAVEDIALOGS} constructor TImageEnMViewPromptToAdd.Create(AOwner: TComponent); begin inherited; fRequireImages := False; ImageIndex := 61; UpdateLanguage(); end; procedure TImageEnMViewPromptToAdd.UpdateLanguage(); begin Caption := iemsg(IEMsg_AddFromFile) + Menu_Ellipses; Hint := iemsg(IEMsg_AddAnImageToThegridFromFile); end; procedure TImageEnMViewPromptToAdd.ExecuteTarget(Target: TObject); var sFilename: string; begin if HaveActiveImageEnMIO then begin sFilename := ActiveImageEnMIO.ExecuteOpenDialog('', '', false); if sFilename <> '' then ActiveImageEnMView.AppendImage(sFilename); end; end; {$ENDIF} { TImageEnMViewSave } {$IFDEF IEINCLUDEOPENSAVEDIALOGS} constructor TImageEnMViewSave.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; ShortCut := CTRL_S_SHORTCUT; ImageIndex := 8; UpdateLanguage(); end; procedure TImageEnMViewSave.UpdateLanguage(); begin Caption := iemsg(IEMsg_Save); Hint := iemsg(IEMsg_SaveChangesToThisImageToFile); end; procedure TImageEnMViewSave.ExecuteTarget(Target: TObject); var sFilename: string; begin if HaveActiveImageEnMIO then begin sFilename := ActiveImageEnMIO.LastFilename; if sFilename = '' then sFilename := ActiveImageEnMIO.ExecuteSaveDialog('', '', false); if sFilename <> '' then ActiveImageEnMIO.SaveToFile(sFilename); end; end; {$ENDIF} { TImageEnMViewPromptToSave } {$IFDEF IEINCLUDEOPENSAVEDIALOGS} constructor TImageEnMViewPromptToSave.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; ShortCut := CTRL_ALT_S_SHORTCUT; ImageIndex := 9; fDefaultFilter := -1; fLimitToFileType := -1; UpdateLanguage(); end; procedure TImageEnMViewPromptToSave.UpdateLanguage(); begin Caption := iemsg(IEMsg_SaveAs) + Menu_Ellipses; Hint := iemsg(IEMsg_SaveThisImageToANewFilename); end; procedure TImageEnMViewPromptToSave.ExecuteTarget(Target: TObject); var sFilename: string; begin if HaveActiveImageEnMIO then begin sFilename := ActiveImageEnMIO.ExecuteSaveDialog('', '', false, 0, '', fDialogTitle, '', fDefaultFilter, fLimitToFileType); if sFilename <> '' then ActiveImageEnMIO.SaveToFile(sFilename); end; end; {$ENDIF} { TImageEnMViewDoIOPreviews } {$IFDEF IEINCLUDEDIALOGIO} constructor TImageEnMViewDoIOPreviews.Create(AOwner: TComponent); begin inherited; fPreviewParams := [ppAll]; fRequireSelection := False; ImageIndex := 10; UpdateLanguage(); end; procedure TImageEnMViewDoIOPreviews.UpdateLanguage(); begin Caption := iemsg(IEMsg_SaveProperties) + Menu_Ellipses; Hint := iemsg(IEMsg_SpecifyAdvancedPropertiesForAllImages); end; procedure TImageEnMViewDoIOPreviews.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMIO then ActiveImageEnMIO.DoPreviews(-1, fPreviewParams); end; {$ENDIF} { TImageEnMViewDoIOPreviews } {$IFDEF IEINCLUDEDIALOGIO} constructor TImageEnMViewDoIOPreviewsSelected.Create(AOwner: TComponent); begin inherited; fPreviewParams := [ppAll]; ImageIndex := 62; UpdateLanguage(); end; procedure TImageEnMViewDoIOPreviewsSelected.UpdateLanguage(); begin Caption := iemsg(IEMsg_ImageSaveProperties) + Menu_Ellipses; Hint := iemsg(IEMsg_SpecifyAdvancedPropertiesForTheSelectedImage); end; procedure TImageEnMViewDoIOPreviewsSelected.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMIO then ActiveImageEnMIO.DoPreviews(IEM_SELECTED_IMAGES, fPreviewParams); end; {$ENDIF} { TImageEnMViewDoPrintPreviewDialog } {$IFDEF IEINCLUDEPRINTDIALOGS} constructor TImageEnMViewDoPrintPreviewDialog.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; ShortCut := CTRL_P_SHORTCUT; ImageIndex := 27; UpdateLanguage(); end; procedure TImageEnMViewDoPrintPreviewDialog.UpdateLanguage(); begin Caption := iemsg(IEMsg_PrintPreview) + Menu_Ellipses; Hint := iemsg(IEMsg_DisplayAPreviewOfYourPrinting); end; procedure TImageEnMViewDoPrintPreviewDialog.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnMIO then ActiveImageEnMIO.DoPrintPreviewDialog; end; {$ENDIF} { TImageEnMViewPrintImageNormal } {$IFDEF IEINCLUDEPRINTDIALOGS} constructor TImageEnMViewPrintImageNormal.Create(AOwner: TComponent); begin inherited; ImageIndex := 26; UpdateLanguage(); end; procedure TImageEnMViewPrintImageNormal.UpdateLanguage(); begin Caption := iemsg(IEMsg_Print); Hint := iemsg(IEMsg_PrintTheSelectedImageAtItsOriginalSize); end; procedure TImageEnMViewPrintImageNormal.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnMIO then begin Printer.BeginDoc; ActiveImageEnMIO.PrintImage(IEM_SELECTED_IMAGES, Printer.Canvas, 0, 0, 0, 0, ievpCenter, iehpCenter, iesNormal); Printer.EndDoc; end; end; {$ENDIF} { TImageEnMViewPrintImageFitToPage } {$IFDEF IEINCLUDEPRINTDIALOGS} constructor TImageEnMViewPrintImageFitToPage.Create(AOwner: TComponent); begin inherited; ImageIndex := 26; UpdateLanguage(); end; procedure TImageEnMViewPrintImageFitToPage.UpdateLanguage(); begin Caption := iemsg(IEMsg_PrintToPage); Hint := iemsg(IEMsg_PrintTheSelectedImageToFitThePage); end; procedure TImageEnMViewPrintImageFitToPage.ExecuteTarget(Target: TObject); begin CheckSelection; if HaveActiveImageEnMIO then begin Printer.BeginDoc; ActiveImageEnMIO.PrintImage(IEM_SELECTED_IMAGES, Printer.Canvas, 0, 0, 0, 0, ievpCenter, iehpCenter, iesFitToPage); Printer.EndDoc; end; end; {$ENDIF} { TImageEnMViewPrintSelectedThumbnails } {$IFDEF IEINCLUDEPRINTDIALOGS} constructor TImageEnMViewPrintSelectedThumbnails.Create(AOwner: TComponent); begin inherited; fColumnCount := 4; fRowCount := 6; ImageIndex := 63; UpdateLanguage(); end; procedure TImageEnMViewPrintSelectedThumbnails.UpdateLanguage(); begin Caption := iemsg(IEMsg_PrintThumbnails); Hint := iemsg(IEMsg_PrintTheSelectedImagesAsASheetOfThumbnails); end; procedure TImageEnMViewPrintSelectedThumbnails.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMIO then begin Printer.BeginDoc; ActiveImageEnMIO.PrintImages(fColumnCount, fRowCount, 0.5, 0.5, True); Printer.EndDoc; end; end; {$ENDIF} { TImageEnMViewPrintAllThumbnails } {$IFDEF IEINCLUDEPRINTDIALOGS} constructor TImageEnMViewPrintAllThumbnails.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; fColumnCount := 4; fRowCount := 6; ImageIndex := 64; UpdateLanguage(); end; procedure TImageEnMViewPrintAllThumbnails.UpdateLanguage(); begin Caption := iemsg(IEMsg_PrintAllThumbnails); Hint := iemsg(IEMsg_PrintAllImagesOfTheGridAsASheetOfThumbnails); end; procedure TImageEnMViewPrintAllThumbnails.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMIO then begin Printer.BeginDoc; ActiveImageEnMIO.PrintImages(fColumnCount, fRowCount, 0.5, 0.5, True); Printer.EndDoc; end; end; {$ENDIF} { TImageEnMViewSelectAcquireSource } {$IFDEF IEINCLUDEIEXACQUIRE} constructor TImageEnMViewSelectAcquireSource.Create(AOwner: TComponent); begin inherited; fRequireImages := False; fApis := [ieaTwain, ieaWIA]; ImageIndex := 38; UpdateLanguage(); end; procedure TImageEnMViewSelectAcquireSource.UpdateLanguage(); begin Caption := iemsg(IEMsg_SelectAcquisitionSource) + Menu_Ellipses; Hint := iemsg(IEMsg_SelectTheCameraOrScannerToAcquireImagesFrom); end; procedure TImageEnMViewSelectAcquireSource.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMIO then ActiveImageEnMIO.SelectAcquireSource(fApis); end; {$ENDIF} { TImageEnMViewAcquire } {$IFDEF IEINCLUDEIEXACQUIRE} constructor TImageEnMViewAcquire.Create(AOwner: TComponent); begin inherited; fRequireImages := False; ImageIndex := 39; UpdateLanguage(); end; procedure TImageEnMViewAcquire.UpdateLanguage(); begin Caption := iemsg(IEMsg_Acquire) + Menu_Ellipses; Hint := iemsg(IEMsg_RetrieveImagesFromACameraOrScanner); end; procedure TImageEnMViewAcquire.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMIO then ActiveImageEnMIO.Acquire; end; {$ENDIF} { TImageEnMViewSeekFirst } constructor TImageEnMViewSeekFirst.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; ImageIndex := 18; UpdateLanguage(); end; procedure TImageEnMViewSeekFirst.UpdateLanguage(); begin Caption := iemsg(IEMsg_FirstFrame); Hint := iemsg(IEMsg_SelectTheFirstFrame); end; procedure TImageEnMViewSeekFirst.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then begin if ActiveImageEnMView.DisplayMode = mdSingle then ActiveImageEnMView.Seek(ieioSeekFirst) else ActiveImageEnMView.SelectSeek(iskFirst); end; end; procedure TImageEnMViewSeekFirst.UpdateTarget(Target: TObject); var bEnabled: boolean; begin bEnabled := BaseEnabled; if bEnabled then bEnabled := (ActiveImageEnMView.ImageCount > 1) and (CurrentImageIndex > 0); Enabled := bEnabled; end; { TImageEnMViewSeekPrior } constructor TImageEnMViewSeekPrior.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; ImageIndex := 19; UpdateLanguage(); end; procedure TImageEnMViewSeekPrior.UpdateLanguage(); begin Caption := iemsg(IEMsg_PreviousFrame); Hint := iemsg(IEMsg_SelectThePreviousFrame); end; procedure TImageEnMViewSeekPrior.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then begin if ActiveImageEnMView.DisplayMode = mdSingle then ActiveImageEnMView.Seek(ieioSeekPrior) else ActiveImageEnMView.SelectSeek(iskPrior); end; end; procedure TImageEnMViewSeekPrior.UpdateTarget(Target: TObject); var bEnabled: boolean; begin bEnabled := BaseEnabled; if bEnabled then bEnabled := (ActiveImageEnMView.ImageCount > 1) and (CurrentImageIndex > 0); Enabled := bEnabled; end; { TImageEnMViewSeekNext } constructor TImageEnMViewSeekNext.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; ImageIndex := 20; UpdateLanguage(); end; procedure TImageEnMViewSeekNext.UpdateLanguage(); begin Caption := iemsg(IEMsg_NextFrame); Hint := iemsg(IEMsg_SelectTheNextFrame); end; procedure TImageEnMViewSeekNext.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then if ActiveImageEnMView.DisplayMode = mdSingle then ActiveImageEnMView.Seek(ieioSeekNext) else ActiveImageEnMView.SelectSeek(iskNext); end; procedure TImageEnMViewSeekNext.UpdateTarget(Target: TObject); var bEnabled: boolean; begin bEnabled := BaseEnabled; if bEnabled then bEnabled := (ActiveImageEnMView.ImageCount > 1) and (CurrentImageIndex < ActiveImageEnMView.ImageCount - 1); Enabled := bEnabled; end; { TImageEnMViewSeekLast } constructor TImageEnMViewSeekLast.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; ImageIndex := 21; UpdateLanguage(); end; procedure TImageEnMViewSeekLast.UpdateLanguage(); begin Caption := iemsg(IEMsg_LastFrame); Hint := iemsg(IEMsg_SelectTheLastFrame); end; procedure TImageEnMViewSeekLast.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then begin if ActiveImageEnMView.DisplayMode = mdSingle then ActiveImageEnMView.Seek(ieioSeekLast) else ActiveImageEnMView.SelectSeek(iskLast); end; end; procedure TImageEnMViewSeekLast.UpdateTarget(Target: TObject); var bEnabled: boolean; begin bEnabled := BaseEnabled; if bEnabled then bEnabled := (ActiveImageEnMView.ImageCount > 1) and (CurrentImageIndex < ActiveImageEnMView.ImageCount - 1); Enabled := bEnabled; end; { TImageEnMViewStyleShowThumbs } constructor TImageEnMViewStyleShowThumbs.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; fTopText := iedtNone; fInfoText := iedtNone; fBottomText := iedtFileName; fFixGaps := True; ImageIndex := 112; UpdateLanguage(); end; procedure TImageEnMViewStyleShowThumbs.UpdateLanguage(); begin Caption := iemsg(IEMsg_ThumbnailView); Hint := iemsg(IEMsg_DisplayThumbnails); end; procedure TImageEnMViewStyleShowThumbs.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then begin ActiveImageEnMView.LockUpdate; try ActiveImageEnMView.DisplayMode := mdGrid; ActiveImageEnMView.GridWidth := -1; ActiveImageEnMView.SetStyleEx( iemsFlat, fTopText, fInfoText, fBottomText, 100, fFixGaps, True, False ); ActiveImageEnMView.TopTextFont.Style := ActiveImageEnMView.TopTextFont.Style - [ fsBold ]; ActiveImageEnMView.ThumbnailOptionsEx := ActiveImageEnMView.ThumbnailOptionsEx - [ ietxOnlyShowIcons ]; finally ActiveImageEnMView.UnlockUpdate; end; end; end; procedure TImageEnMViewStyleShowThumbs.UpdateTarget(Target: TObject); begin Enabled := BaseEnabled; if HaveActiveImageEnMView then Checked := ( ActiveImageEnMView.Style = iemsFlat ) and ( ActiveImageEnMView.Zoom = 100 ); end; { TImageEnMViewStyleShowLargeThumbs } constructor TImageEnMViewStyleShowLargeThumbs.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; fTopText := iedtNone; fInfoText := iedtNone; fBottomText := iedtFileName; fFixGaps := True; fThumbnailZoom := 200; ImageIndex := 130; UpdateLanguage(); end; procedure TImageEnMViewStyleShowLargeThumbs.UpdateLanguage(); begin Caption := iemsg( IEMsg_LargeThumbnailView ); Hint := iemsg( IEMsg_DisplayLargeThumbnails ); end; procedure TImageEnMViewStyleShowLargeThumbs.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then begin ActiveImageEnMView.LockUpdate; try ActiveImageEnMView.DisplayMode := mdGrid; ActiveImageEnMView.GridWidth := -1; ActiveImageEnMView.SetStyleEx( iemsFlat, fTopText, fInfoText, fBottomText, fThumbnailZoom, fFixGaps, True, False ); ActiveImageEnMView.TopTextFont.Style := ActiveImageEnMView.TopTextFont.Style - [ fsBold ]; ActiveImageEnMView.ThumbnailOptionsEx := ActiveImageEnMView.ThumbnailOptionsEx - [ ietxOnlyShowIcons ]; finally ActiveImageEnMView.UnlockUpdate; end; end; end; procedure TImageEnMViewStyleShowLargeThumbs.UpdateTarget(Target: TObject); begin Enabled := BaseEnabled; if HaveActiveImageEnMView then Checked := ( ActiveImageEnMView.Style = iemsFlat ) and ( ActiveImageEnMView.Zoom > 100 ); end; { TImageEnMViewStyleShowDetails } constructor TImageEnMViewStyleShowDetails.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; fTopText := iedtFileName; fInfoText := iedtFileType; fBottomText := iedtImageDimAndSize; fFixGaps := True; fThumbnailZoom := 50; fBoldFilename := True; ImageIndex := 113; UpdateLanguage(); end; procedure TImageEnMViewStyleShowDetails.UpdateLanguage(); begin Caption := iemsg(IEMsg_DetailView ); Hint := iemsg(IEMsg_DisplayFileDetails); end; procedure TImageEnMViewStyleShowDetails.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then begin ActiveImageEnMView.LockUpdate; try ActiveImageEnMView.DisplayMode := mdGrid; ActiveImageEnMView.GridWidth := -1; ActiveImageEnMView.SetStyleEx( iemsFlatAndWide, fTopText, fInfoText, fBottomText, fThumbnailZoom, fFixGaps, True, False ); if fBoldFilename then ActiveImageEnMView.TopTextFont.Style := ActiveImageEnMView.TopTextFont.Style + [ fsBold ]; ActiveImageEnMView.ThumbnailOptionsEx := ActiveImageEnMView.ThumbnailOptionsEx - [ ietxOnlyShowIcons ]; finally ActiveImageEnMView.UnlockUpdate; end; end; end; procedure TImageEnMViewStyleShowDetails.UpdateTarget(Target: TObject); begin Enabled := BaseEnabled; if HaveActiveImageEnMView then Checked := ( ActiveImageEnMView.Style = iemsFlatAndWide ) and ( ActiveImageEnMView.GridWidth <> 1 ); end; { TImageEnMViewStyleShowColumns } constructor TImageEnMViewStyleShowColumns.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; fTopText := iedtFileName; fInfoText := iedtFileType; fBottomText := iedtImageDimAndSize; fFixGaps := True; fThumbnailSize := 24; ImageIndex := 128; fShowIconsOnly := True; UpdateLanguage(); end; procedure TImageEnMViewStyleShowColumns.UpdateLanguage(); begin Caption := iemsg(IEMsg_ColumnView ); Hint := iemsg(IEMsg_DisplayFileColumns); end; procedure TImageEnMViewStyleShowColumns.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then begin ActiveImageEnMView.LockUpdate; try ActiveImageEnMView.DisplayMode := mdGrid; ActiveImageEnMView.GridWidth := -1; ActiveImageEnMView.SetStyleEx( iemsColumns, fTopText, fInfoText, fBottomText, -1 * fThumbnailSize, fFixGaps, True, False ); ActiveImageEnMView.TopTextFont.Style := ActiveImageEnMView.TopTextFont.Style - [ fsBold ]; if fShowIconsOnly then ActiveImageEnMView.ThumbnailOptionsEx := ActiveImageEnMView.ThumbnailOptionsEx + [ ietxOnlyShowIcons ]; finally ActiveImageEnMView.UnlockUpdate; end; end; end; procedure TImageEnMViewStyleShowColumns.UpdateTarget(Target: TObject); begin Enabled := BaseEnabled; if HaveActiveImageEnMView then Checked := ActiveImageEnMView.Style = iemsColumns; end; { TImageEnMViewStyleShowFileList } constructor TImageEnMViewStyleShowFileList.Create(AOwner: TComponent); begin inherited; fRequireSelection := False; fBottomText := iedtFileName; fFixGaps := True; fThumbnailSize := 24; ImageIndex := 129; fShowIconsOnly := True; UpdateLanguage(); end; procedure TImageEnMViewStyleShowFileList.UpdateLanguage(); begin Caption := iemsg( IEMsg_FileListView ); Hint := iemsg( IEMsg_DisplayFileList ); end; procedure TImageEnMViewStyleShowFileList.ExecuteTarget(Target: TObject); begin if HaveActiveImageEnMView then begin ActiveImageEnMView.LockUpdate; try ActiveImageEnMView.DisplayMode := mdGrid; ActiveImageEnMView.GridWidth := 1; ActiveImageEnMView.SetStyleEx( iemsFlatAndWide, iedtNone, iedtNone, fBottomText, -1 * fThumbnailSize, fFixGaps, True, False ); ActiveImageEnMView.TopTextFont.Style := ActiveImageEnMView.TopTextFont.Style - [ fsBold ]; if fShowIconsOnly then ActiveImageEnMView.ThumbnailOptionsEx := ActiveImageEnMView.ThumbnailOptionsEx + [ ietxOnlyShowIcons ]; finally ActiveImageEnMView.UnlockUpdate; end; end; end; procedure TImageEnMViewStyleShowFileList.UpdateTarget(Target: TObject); begin Enabled := BaseEnabled; if HaveActiveImageEnMView then Checked := ( ActiveImageEnMView.Style = iemsFlatAndWide ) and ( ActiveImageEnMView.GridWidth = 1 ) and ( ActiveImageEnMView.DefaultTopText = iedtNone ) and ( ActiveImageEnMView.DefaultInfoText = iedtNone ); end; { TImageEnMViewSortAction } const IEM_SORT_ASCENDING = TIEImageEnMViewSortBy( -8 ); IEM_SORT_DESCENDING = TIEImageEnMViewSortBy( -9 ); procedure TImageEnMViewSortAction.ExecuteTarget(Target: TObject); var aIEFolderView : TImageEnFolderMView; aOrderBy: TIEImageEnMViewSortBy; bAscending: boolean; bCaseSensitive: boolean; begin if HaveActiveImageEnMView = False then exit; if ActiveImageEnMView is TImageEnFolderMView then begin aIEFolderView := TImageEnFolderMView( ActiveImageEnMView ); if fSortBy = IEM_SORT_ASCENDING then aIEFolderView.SortAscending := True else if fSortBy = IEM_SORT_DESCENDING then aIEFolderView.SortAscending := False else aIEFolderView.SortOrder := fSortBy; end else begin ActiveImageEnMView.ProbeLastSort( aOrderBy, bAscending, bCaseSensitive ); if fSortBy = IEM_SORT_ASCENDING then bAscending := True else if fSortBy = IEM_SORT_DESCENDING then bAscending := False else aOrderBy := fSortBy; ActiveImageEnMView.Sort( aOrderBy, bAscending, bCaseSensitive); end; end; procedure TImageEnMViewSortAction.UpdateTarget(Target: TObject); var aIEFolderView : TImageEnFolderMView; aOrderBy: TIEImageEnMViewSortBy; bAscending: boolean; bCaseSensitive: boolean; begin Enabled := BaseEnabled; if HaveActiveImageEnMView = False then exit; if ActiveImageEnMView is TImageEnFolderMView then begin aIEFolderView := TImageEnFolderMView( ActiveImageEnMView ); if fSortBy = IEM_SORT_ASCENDING then Checked := aIEFolderView.SortAscending else if fSortBy = IEM_SORT_DESCENDING then Checked := not aIEFolderView.SortAscending else Checked := fSortBy = aIEFolderView.SortOrder; end else begin ActiveImageEnMView.ProbeLastSort( aOrderBy, bAscending, bCaseSensitive ); if fSortBy = IEM_SORT_ASCENDING then Checked := bAscending else if fSortBy = IEM_SORT_DESCENDING then Checked := not bAscending else Checked := fSortBy = aOrderBy; end; end; constructor TImageEnMViewSortByFilename.Create(AOwner: TComponent); begin inherited; fSortBy := iesbFilename; ImageIndex := 114; UpdateLanguage(); end; procedure TImageEnMViewSortByFilename.UpdateLanguage(); var s: string; begin s := iemsg( IEMsg_Filename ); Caption := s; Hint := format( iemsg( IEMsg_SortByX ), [ s ] ); end; constructor TImageEnMViewSortByFileType.Create(AOwner: TComponent); begin inherited; fSortBy := iesbFileType; ImageIndex := 115; UpdateLanguage(); end; procedure TImageEnMViewSortByFileType.UpdateLanguage(); var s: string; begin s := iemsg( IEMsg_FileType ); Caption := s; Hint := format( iemsg( IEMsg_SortByX ), [ s ] ); end; constructor TImageEnMViewSortByFileSize.Create(AOwner: TComponent); begin inherited; fSortBy := iesbFileSize; ImageIndex := 116; UpdateLanguage(); end; procedure TImageEnMViewSortByFileSize.UpdateLanguage(); var s: string; begin s := iemsg( IEMsg_FileSize ); Caption := s; Hint := format( iemsg( IEMsg_SortByX ), [ s ] ); end; constructor TImageEnMViewSortByCreateDate.Create(AOwner: TComponent); begin inherited; fSortBy := iesbCreateDate; ImageIndex := 117; UpdateLanguage(); end; procedure TImageEnMViewSortByCreateDate.UpdateLanguage(); var s: string; begin s := iemsg( IEMsg_CreateDate ); Caption := s; Hint := format( iemsg( IEMsg_SortByX ), [ s ] ); end; constructor TImageEnMViewSortByEditDate.Create(AOwner: TComponent); begin inherited; fSortBy := iesbEditDate; ImageIndex := 118; UpdateLanguage(); end; procedure TImageEnMViewSortByEditDate.UpdateLanguage(); var s: string; begin s := iemsg( IEMsg_EditDate ); Caption := s; Hint := format( iemsg( IEMsg_SortByX ), [ s ] ); end; constructor TImageEnMViewSortByImageSize.Create(AOwner: TComponent); begin inherited; fSortBy := iesbImageSize; ImageIndex := 119; UpdateLanguage(); end; procedure TImageEnMViewSortByImageSize.UpdateLanguage(); var s: string; begin s := iemsg( IEMsg_ImageSize ); Caption := s; Hint := format( iemsg( IEMsg_SortByX ), [ s ] ); end; constructor TImageEnMViewSortByOther.Create(AOwner: TComponent); begin inherited; fSortBy := iesbBottomText; ImageIndex := 120; UpdateLanguage(); end; procedure TImageEnMViewSortByOther.UpdateLanguage(); var s: string; begin s := iemsg( IEMsg_Other ); Caption := s; Hint := format( iemsg( IEMsg_SortByX ), [ s ] ); end; constructor TImageEnMViewSortAscending.Create(AOwner: TComponent); begin inherited; fSortBy := IEM_SORT_ASCENDING; ImageIndex := 121; UpdateLanguage(); end; procedure TImageEnMViewSortAscending.UpdateLanguage(); var s: string; begin s := iemsg( IEMsg_Ascending ); Caption := s; Hint := format( iemsg( IEMsg_SortX ), [ s ] ); end; constructor TImageEnMViewSortDescending.Create(AOwner: TComponent); begin inherited; fSortBy := IEM_SORT_DESCENDING; ImageIndex := 122; UpdateLanguage(); end; procedure TImageEnMViewSortDescending.UpdateLanguage(); var s: string; begin s := iemsg( IEMsg_Descending ); Caption := s; Hint := format( iemsg( IEMsg_SortX ), [ s ] ); end; { TImageEnMViewShowColumn } constructor TImageEnMViewShowColumn.Create(AOwner: TComponent); begin inherited; fColumn := iedtFilename; ImageIndex := 131; UpdateLanguage(); end; procedure TImageEnMViewShowColumn.SetColumn(v: TIEImageEnMViewDefaultText); begin if fColumn <> v then begin fColumn := v; UpdateLanguage(); end; end; procedure TImageEnMViewShowColumn.UpdateLanguage(); var s: string; begin s := IEMDefaultTextToStr( fColumn ); Caption := s; Hint := format( iemsg( IEMsg_ShowColumnX ), [ s ] ); end; procedure TImageEnMViewShowColumn.ExecuteTarget(Target: TObject); var Cols : array[ 0 .. 2 ] of TIEImageEnMViewDefaultText; i, iCurr: Integer; bFound: Boolean; procedure _Check(ACol: TIEImageEnMViewDefaultText); begin if ACol = iedtNone then exit; if ACol = fColumn then bFound := True // Column already exists so hide it else begin Cols[ iCurr ] := ACol; inc( iCurr ); end; end; begin if ( HaveActiveImageEnMView = False ) or ( ActiveImageEnMView.Style <> iemsColumns ) then exit; ActiveImageEnMView.LockUpdate; try for i := Low( Cols ) to High( Cols ) do Cols[ i ] := iedtNone; iCurr := 0; bFound := False; _Check( ActiveImageEnMView.DefaultTopText ); _Check( ActiveImageEnMView.DefaultInfoText ); _Check( ActiveImageEnMView.DefaultBottomText ); // Column not found? Add it if bFound = False then begin // Columns full? Replace last if iCurr > 2 then iCurr := 2; Cols[ iCurr ] := fColumn; end; ActiveImageEnMView.DefaultTopText := Cols[ 0 ]; ActiveImageEnMView.DefaultInfoText := Cols[ 1 ]; ActiveImageEnMView.DefaultBottomText := Cols[ 2 ]; finally ActiveImageEnMView.UnlockUpdate; end; end; procedure TImageEnMViewShowColumn.UpdateTarget(Target: TObject); begin Enabled := BaseEnabled and ( ActiveImageEnMView.Style = iemsColumns ); if HaveActiveImageEnMView then Checked := ( fColumn <> iedtNone ) and (( ActiveImageEnMView.DefaultTopText = fColumn ) or ( ActiveImageEnMView.DefaultInfoText = fColumn ) or ( ActiveImageEnMView.DefaultBottomText = fColumn )); end; {$ELSE} // {$IFDEF INCLUDE_MULTIVIEWACTIONS} interface implementation {$ENDIF} {!! TImageEnMView Actions ImageEn includes a large set of actions for ImageEnMView, ImageEnView and ImageEnVect components to allow you to rapidly develop your UI. To use actions: 1. Add a TActionList component to your form 2. Double-click your TActionList to open it 3. Select "New Standard Action" 4. Scroll down to the ImageEnMView actions, select the ones you require and click OK 5. Select your actions and set the ImageEnMView property to your component 6. Assign the actions to menu items and buttons Demo Demos\Other\Actions_MView\MViewActions.dpr Notes: - You must set the ImageEnMView property of the actions - You can set to localize the actions - See the list of the default ImageIndexes if you are planning to add graphics to your actions General Actions Action Name Description Associated Method Extra Properties TImageEnMViewClear Clear Clear all images - TImageEnMViewSelectAll Select All Select all images in the grid - TImageEnMViewDeselect Deselect Clear your selection - TImageEnMViewPlaying Animate Playback these frames in sequence - TImageEnMViewPlayLoop Loop Playback Restart playback after it completes - TImageEnMViewDisplayModeSingle Single Frame Only Display only the active frame - TImageEnMViewEnableAdjustOrientation Auto-Rotate Display Automatically display images with the correct orientation - TImageEnMViewStyleShowThumbs Thumbnail View Display thumbnails TopText, InfoText, BottomText, FixGaps TImageEnMViewStyleShowDetails Detail View Display file details TopText, InfoText, BottomText, FixGaps, ThumbnailZoom, BoldFilename TImageEnMViewStyleShowColumns Column View Display file columns TopText, InfoText, BottomText, FixGaps, ThumbnailSize, ShowIconsOnly TImageEnMViewStyleShowLargeThumbs Large Thumb View Display large thumbnails TopText, InfoText, BottomText, FixGaps, ThumbnailZoom, BoldFilename TImageEnMViewStyleShowFileList File List View Display file list Text, FixGaps, ThumbnailSize, ShowIconsOnly TImageEnMViewShowColumn Show Column Show or hide columns when is iemsColumns Column
Sort Actions TImageEnMViewSortByFilename Sort by Filename Sort by Filename - TImageEnMViewSortByFileType Sort by FileType Sort by FileType - TImageEnMViewSortByFileSize Sort by FileSize Sort by FileSize - TImageEnMViewSortByCreateDate Sort by CreateDate Sort by CreateDate - TImageEnMViewSortByEditDate Sort by EditDate Sort by EditDate - TImageEnMViewSortByImageSize Sort by ImageSize Sort by ImageSize - TImageEnMViewSortByOther Sort by Other Sort by Other SortBy TImageEnMViewSortAscending Sort Ascending Sort Ascending - TImageEnMViewSortDescending Sort Descending Sort Descending -
Proc Actions Action Name Description Associated Method Extra Properties TImageEnMViewDoPreviews Do Effects Display the Effects dialog for editing and enhancing the image (all or a specific effect) Effects, AutoSaveChanges, OverrideJpegQuality, AutoSaveError TImageEnMViewDoAdjustPreviews Adjust Colors Peform color enhancement functions on the selected image () AutoSaveChanges, OverrideJpegQuality, AutoSaveError TImageEnMViewDoEffectPreviews Image Effects Perform effects on the selected image () AutoSaveChanges, OverrideJpegQuality, AutoSaveError TImageEnMViewDoEditPreviews Edit Image Perform editing functions on the image: rotate, resize, crop, etc. () AutoSaveChanges, OverrideJpegQuality, AutoSaveError TImageEnMViewPromptToResize Prompt to Resize Display the previews dialog to allow the user to resample (resize) the image ResampleFilter, AutoSaveChanges, OverrideJpegQuality, AutoSaveError TImageEnMViewPromptToRotate Prompt to Rotate Display the previews dialog to allow the user to rotate the image to a custom angle AntiAliasMode, AutoSaveChanges, OverrideJpegQuality, AutoSaveError TImageEnMViewFlipHorizontal Flip Horizontal Flip the selected image from top to bottom AutoSaveChanges, AutoSaveError TImageEnMViewFlipVertical Flip Vertical Flip the selected image from left to right AutoSaveChanges, AutoSaveError TImageEnMViewRotateRight Rotate Right Rotate the selected image 90° clockwise AutoSaveChanges, AutoSaveError TImageEnMViewRotate180 Rotate 180° Rotate the selected image 180° clockwise AutoSaveChanges, AutoSaveError TImageEnMViewRotateLeft Rotate Left Rotate the selected image 90° counter-clockwise AutoSaveChanges, AutoSaveError TImageEnMViewCutToClipboard Cut Copy the current image to the clipboard and remove it - TImageEnMViewCopyToClipboard Copy Copy the current image to the clipboard - TImageEnMViewPasteFromClipboard Paste Paste an image from the clipboard -
Note: if AutoSaveChanges is true then any editing actions applied to the thumbnail will be saved to the underlying file (without prompting). For rotation and flipping of JPEGs lossless functions will be used where possible, otherwise JPEG's will be saved with the JPEG_Quality specified in the item's or can be overriden with OverrideJpegQuality. If an error is encountered an AutoSaveError event will occur. IO Actions Action Name Description Associated Method Extra Properties TImageEnMViewPromptToOpen Open Load an image from file , MultiSelect, DialogTitle, DefaultFilter, LimitToFileType TImageEnMViewPromptToAdd Add from File Add an image to the grid from file , - TImageEnMViewSave Save Save changes to this image to file - TImageEnMViewPromptToSave Save as Save this image to a new filename , DialogTitle, DefaultFilter, LimitToFileType TImageEnMViewDoIOPreviews Save Properties Specify advanced properties for all images PreviewParams TImageEnMViewDoIOPreviewsSelected Image Save Properties Specify advanced properties for the selected image PreviewParams TImageEnMViewDoPrintPreviewDialog Print Preview Display a preview of your printing - TImageEnMViewPrintImageNormal Print Print the selected image at its original size - TImageEnMViewPrintImageFitToPage Print to Page Print the selected image to fit the page - TImageEnMViewPrintSelectedThumbnails Print Thumbnails Print the selected images as a sheet of thumbnails ColumnCount, RowCount TImageEnMViewPrintAllThumbnails Print All Thumbnails Print all images of the grid as a sheet of thumbnails ColumnCount, RowCount TImageEnMViewSelectAcquireSource Select Acquisition Source Select the camera or scanner to acquire images from Apis TImageEnMViewAcquire Acquire Retrieve images from a camera or scanner - TImageEnMViewSeekFirst First Frame Select the first frame , - TImageEnMViewSeekPrior Previous Frame Select the previous frame , - TImageEnMViewSeekNext Next Frame Select the next frame , - TImageEnMViewSeekLast Last Frame Select the last frame , -
!!} end.