unit Main; interface uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus, StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, ToolWin, ImgList, iexActions, ActnList, ieview, imageenview, StdActns, hyiedefs, iesettings, hyieutils, iexBitmaps, iexLayers, iexRulers, iemview; type TMainForm = class(TForm) MainMenu1: TMainMenu; StatusBar: TStatusBar; PopupMenu1: TPopupMenu; N3: TMenuItem; Cut1: TMenuItem; Copy1: TMenuItem; Paste1: TMenuItem; ActionList1: TActionList; ImageEnView1: TImageEnView; mnuView: TMenuItem; mnuEdit: TMenuItem; ZoomIn: TImageEnViewZoomIn; ZoomOut: TImageEnViewZoomOut; Fit: TImageEnViewFit; LayersMergeAll: TImageEnViewLayersMergeAll; LayersRemoveCurrent: TImageEnViewLayersRemoveCurrent; ZoomFullSize: TImageEnViewZoomFullSize; FitImage1: TMenuItem; N9: TMenuItem; ZoomIn2: TMenuItem; ZoomOut2: TMenuItem; ZoomtoFullSize1: TMenuItem; N13: TMenuItem; RemoveCurrentLayer1: TMenuItem; MergeAllLayers1: TMenuItem; N14: TMenuItem; MouseMoveLayers: TImageEnViewMouseMoveLayers; MouseResizeLayers: TImageEnViewMouseResizeLayers; MouseRotateLayers: TImageEnViewMouseRotateLayers; MouseScroll: TImageEnViewMouseScroll; MouseZoom: TImageEnViewMouseZoom; mnuMouse: TMenuItem; MoveLayers1: TMenuItem; Resizelayers1: TMenuItem; RotateLayers1: TMenuItem; ScrollImage1: TMenuItem; Action11: TMenuItem; N17: TMenuItem; CopyToClipboard: TImageEnViewCopyToClipboard; PasteFromClipboard: TImageEnViewPasteFromClipboard; Redo: TImageEnViewRedo; Undo: TImageEnViewUndo; Deselect1: TMenuItem; CopytoClipboard1: TMenuItem; PastefromClipboard1: TMenuItem; Redo1: TMenuItem; Undo2: TMenuItem; CutSelection1: TMenuItem; N20: TMenuItem; N24: TMenuItem; DoPrintPreviewDialog: TImageEnViewDoPrintPreviewDialog; PrintImageNormal: TImageEnViewPrintImageNormal; LayersSave: TImageEnViewLayersSave; LayersPromptToOpen: TImageEnViewLayersPromptToOpen; LayersPromptToSave: TImageEnViewLayersPromptToSave; mnuFile: TMenuItem; PrintPreview2: TMenuItem; Print2: TMenuItem; Save1: TMenuItem; Open1: TMenuItem; Saveas1: TMenuItem; N27: TMenuItem; N2: TMenuItem; ImageList1: TImageList; ExitApp: TFileExit; Exit2: TMenuItem; LayersMoveSendToBack: TImageEnViewLayersMoveSendToBack; LayersMoveSendBackward: TImageEnViewLayersMoveSendBackward; LayersMoveBringForward: TImageEnViewLayersMoveBringForward; LayersMoveBringToFront: TImageEnViewLayersMoveBringToFront; BringForward1: TMenuItem; BringtoFront1: TMenuItem; SendBackward1: TMenuItem; SendtoBack1: TMenuItem; LayersFixBorders: TImageEnViewLayersFixBorders; CropTransparency1: TMenuItem; N6: TMenuItem; mnuLanguage: TMenuItem; SetZoom200: TImageEnViewSetZoom; SetZoom25: TImageEnViewSetZoom; SetZoom50: TImageEnViewSetZoom; SetZoom75: TImageEnViewSetZoom; SetZoom150: TImageEnViewSetZoom; N7: TMenuItem; Zoomto501: TMenuItem; Zoomto502: TMenuItem; Zoomto503: TMenuItem; Zoomto2001: TMenuItem; Zoomto751: TMenuItem; LayersDeselectAll: TImageEnViewLayersDeselectAll; LayersGroup: TImageEnViewLayersGroup; LayersSelectAll: TImageEnViewLayersSelectAll; LayersUngroup: TImageEnViewLayersUngroup; LayersMerge: TImageEnViewLayersMerge; MergeLayers1: TMenuItem; N1: TMenuItem; DeselectAllLayers1: TMenuItem; SelectAllLayers1: TMenuItem; GroupLayers1: TMenuItem; UngroupLayers1: TMenuItem; N10: TMenuItem; ShowRulers: TImageEnViewShowRulers; RulerUnitPixels: TImageEnViewRulerUnitPixels; RulerUnitInches: TImageEnViewRulerUnitInches; RulerUnitMillimeters: TImageEnViewRulerUnitMillimeters; RulerUnitCentimeters: TImageEnViewRulerUnitCentimeters; N11: TMenuItem; ShowRulers1: TMenuItem; RulerUnits1: TMenuItem; Pixels1: TMenuItem; Inches1: TMenuItem; Millimeters1: TMenuItem; Centimeters1: TMenuItem; CutToClipboard: TImageEnViewCutToClipboard; muAlign: TMenuItem; ImageLayerExecuteOpenDialog: TIEImageLayerExecuteOpenDialog; ImageLayerResetSize: TIEImageLayerRestoreSize; LayerAspectRatioLocked: TIELayerAspectRatioLocked; LayerLocked: TIELayerLocked; LayerRestoreAspectRatio: TIELayerRestoreAspectRatio; LayersAlignBottomEdges: TImageEnViewLayersAlignBottomEdges; LayersAlignHorzCenters: TImageEnViewLayersAlignHorizontalCenters; LayersAlignLeftEdges: TImageEnViewLayersAlignLeftEdges; LayersAlignRightEdges: TImageEnViewLayersAlignRightEdges; LayersAlignTopEdges: TImageEnViewLayersAlignTopEdges; LayersAlignVertCenters: TImageEnViewLayersAlignVerticalCenters; LayersCropBackground: TImageEnViewLayersCropBackground; LayersFastDrawing: TImageEnViewLayersFastDrawing; LayerSizeToFit: TIELayerSizeToFit; LayersMatchHeights: TImageEnViewLayersMatchHeight; LayersMatchWidths: TImageEnViewLayersMatchWidth; LayerSoftShadow: TIELayerSoftShadow; LayerVisible: TIELayerVisible; MouseCreateImageLayers: TImageEnViewMouseCreateImageLayers; MouseCreateLineLayers: TImageEnViewMouseCreateLineLayers; MouseCreatePolylineLayers: TImageEnViewMouseCreatePolylineLayers; MouseCreateShapeLayers: TImageEnViewMouseCreateShapeLayers; MouseCreateTextLayers: TImageEnViewMouseCreateTextLayers; PolylineLayerPolylineClosed: TIEPolylineLayerPolylineClosed; miImageLayerExecuteOpenDialog: TMenuItem; miImageLayerResetSize: TMenuItem; miLayerAspectRatioLocked: TMenuItem; miLayerLocked: TMenuItem; miLayerRestoreAspectRatio: TMenuItem; miLayersAlignBottomEdges: TMenuItem; miLayersAlignHorzCenters: TMenuItem; miLayersAlignLeftEdges: TMenuItem; miLayersAlignRightEdges: TMenuItem; miLayersAlignTopEdges: TMenuItem; miLayersAlignVertCenters: TMenuItem; miLayersCropBackground: TMenuItem; miLayersFastDrawing: TMenuItem; miLayerSizeToFit: TMenuItem; miLayersMatchHeights: TMenuItem; miLayersMatchWidths: TMenuItem; miLayerSoftShadow: TMenuItem; miLayerVisible: TMenuItem; miMouseCreateImageLayers: TMenuItem; miMouseCreateLineLayers: TMenuItem; miMouseCreatePolylineLayers: TMenuItem; miMouseCreateShapeLayers: TMenuItem; miMouseCreateTextLayers: TMenuItem; miPolylineLayerPolylineClosed: TMenuItem; N4: TMenuItem; Layer1: TMenuItem; N5: TMenuItem; N8: TMenuItem; N12: TMenuItem; N15: TMenuItem; N16: TMenuItem; N18: TMenuItem; pnlRight: TPanel; ImageEnMView1: TImageEnMView; ClearAll: TImageEnViewClearAll; ConvertToImageLayer: TIELayerConvertToImageLayer; RotateLeft: TIELayerRotateLeft; RotateRight: TIELayerRotateRight; ImageLayersAdd: TImageEnViewImageLayersAdd; ShapeLayersAdd: TImageEnViewShapeLayersAdd; LineLayersAdd: TImageEnViewLineLayersAdd; PolylineLayersAdd: TImageEnViewPolylineLayersAdd; TextLayersAdd: TImageEnViewTextLayersAdd; AddLayer1: TMenuItem; AddImageLayer1: TMenuItem; AddShapeLayer1: TMenuItem; AddLineLayer1: TMenuItem; AddPolylineLayer1: TMenuItem; AddTextLayer1: TMenuItem; RotateLeft1: TMenuItem; RotateRight1: TMenuItem; ConverttoImageLayer1: TMenuItem; N19: TMenuItem; LayerEditText: TIELayerEditText; LayerCropped: TIELayerCropped; LayerResetRotate: TIELayerResetRotate; LineLayerShowLabel: TIELineLayerShowLabel; CropLayertoBackground1: TMenuItem; ShowLabel1: TMenuItem; ResetRotation1: TMenuItem; EditLayerText1: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormShow(Sender: TObject); procedure ImageEnMView1ImageDeselect(Sender: TObject; idx: Integer); procedure ImageEnMView1ImageSelect(Sender: TObject; idx: Integer); procedure ImageEnView1FinishWork(Sender: TObject); procedure ImageEnView1LayerNotify(Sender: TObject; layer: Integer; event: TIELayerEvent); procedure ImageEnView1NewLayer(Sender: TObject; LayerIdx: Integer; LayerKind: TIELayerKind); procedure ImageEnView1Progress(Sender: TObject; per: Integer); procedure ImageEnView1ViewChange(Sender: TObject; Change: Integer); procedure LanguageClick(Sender: TObject); private { Private declarations } procedure CreateLanguageMenuItems(); procedure RefreshLayerViewer(); public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.DFM} {$R WindowsTheme.res} uses iexRegistryFunctions, imageenproc, iexCanvasUtils; const // Enable to store the settings Save_Settings_To_Registry = False; Demo_Registry_Path ='\Software\ImageEn\Actions_LayersDemo\'; procedure TMainForm.FormCreate(Sender: TObject); begin // Common settings for TImageEnView with ImageEnView1 do begin BorderStyle := bsNone; // Normally don't require a 3D border MouseInteract := [ miMoveLayers, miResizeLayers, miCreateShapeLayers ]; // What action should the mouse do? LegacyBitmap := False; // Support bigger files and multithreading Center := False; // Layers work best when not centered Proc.UndoLimit := 30; // Save 30 undo operations LayersResizeAspectRatio := iearLayerDefaultOnCornerGrip; // Respect the aspect ratio of relevant layers when using corner grip // Layer rotation quality LayersRotationFilter := ierBicubic; // Best quality rotations LayersRotationAntialias := True; // Preview quality LayersFastDrawing := iefDelayed; // Show best quality layer previews, but after a delay to improve performance ZoomFilter := rfLanczos3; // Use better quality drawing when the image is not 100%, Use rfFastLinear for best speed or rfLanczos3 for best quality DelayZoomFilter := True; // Delay use of this zoom filter LayersRotationUseFilterOnPreview := True; // Show best quality rotation preview LayersCaching := 30; // cache the views of 30 layers in memory to speed up display ClearAll(); end; ImageEnMView1.SetModernStyling; ImageEnMView1.StoreType := ietThumb; // Don't need full size images in layer viewer ImageEnMView1.ThumbnailOptionsEx := ImageEnMView1.ThumbnailOptionsEx + [ietxCenterThumbnailColumn]; // Center thumbnails ImageEnMView1.SelectedImageAlwaysVisible := True; if Save_Settings_To_Registry then ImageEnView1.LoadFromRegistry(Demo_Registry_Path); // Make clipboard actions focus on layers CutToClipboard .CutSource := iecpLayer; CopyToClipboard .CopySource := iecpLayer; PasteFromClipboard.PasteDest := iecpLayer; // Show type of action the undo/redo will perform Undo.ShowUndoAction := true; Redo.ShowRedoAction := true; CreateLanguageMenuItems; end; procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin if Save_Settings_To_Registry then ImageEnView1.SaveToRegistry(Demo_Registry_Path); end; procedure TMainForm.ImageEnView1FinishWork(Sender: TObject); begin Cursor := crDefault; StatusBar.Panels[1].Text := ''; end; procedure TMainForm.ImageEnView1Progress(Sender: TObject; per: Integer); begin StatusBar.Panels[1].Text := 'Processing: ' + IntToStr(per) + '%'; StatusBar.Update; Cursor := crHourglass; end; procedure TMainForm.CreateLanguageMenuItems(); var aLang : TMsgLanguage; NewItem: TMenuItem; begin mnuLanguage.Clear; for aLang := Low(TMsgLanguage) to High(TMsgLanguage) do begin NewItem := TMenuItem.Create(Self); NewItem.Caption := LanguageToStr(aLang); NewItem.Checked := IEGlobalSettings.MsgLanguage = aLang; NewItem.Tag := ord(aLang); NewItem.OnClick := LanguageClick; mnuLanguage.Add(NewItem) end; end; procedure TMainForm.FormShow(Sender: TObject); begin RefreshLayerViewer(); end; procedure TMainForm.ImageEnMView1ImageDeselect(Sender: TObject; idx: Integer); begin ImageEnView1.Layers[ idx ].Selected := False; end; procedure TMainForm.ImageEnMView1ImageSelect(Sender: TObject; idx: Integer); begin ImageEnView1.LayersCurrent := idx; end; procedure TMainForm.ImageEnView1LayerNotify(Sender: TObject; layer: Integer; event: TIELayerEvent); begin if event in [ ielSelected, ielDeselected, ielMoved, ielResized, ielRotated, ielCreated, ielAction, ielEdited ] then RefreshLayerViewer(); end; procedure TMainForm.ImageEnView1NewLayer(Sender: TObject; LayerIdx: Integer; LayerKind: TIELayerKind); function _GetRandomShape() : TIEShape; begin Result := iesEllipse; // unsupported shape While ( Result in Supported_Generate_Points_Shapes ) = False do Result := TIEShape( Random( Ord( High( TIEShape )))); end; function _GetRandomColor() : TColor; begin Result := RGB( 105 + Random( 150 ), 105 + Random( 150 ), 105 + Random( 150 )); end; begin // Assign default properties for new objects case LayerKind of ielkShape : begin TIEShapeLayer( ImageEnView1.CurrentLayer ).Shape := TIEShape( Random( Ord( High( TIEShape )))); TIEShapeLayer( ImageEnView1.CurrentLayer ).FillColor := _GetRandomColor(); end; ielkPolyline : begin TIEPolylineLayer( ImageEnView1.CurrentLayer ).SetPoints( _GetRandomShape(), True ); TIEPolylineLayer( ImageEnView1.CurrentLayer ).FillColor := _GetRandomColor(); end; end; end; procedure TMainForm.ImageEnView1ViewChange(Sender: TObject; Change: Integer); begin if ImageEnView1.IsEmpty2 then StatusBar.Panels[0].Text := '' else StatusBar.Panels[0].Text := ' Zoom: ' + IntToStr(Round(ImageEnView1.Zoom)) + '%'; end; procedure TMainForm.LanguageClick(Sender: TObject); var aLang : TMsgLanguage; I: Integer; begin MessageDlg('You can view translated actions on the drop down menus.' + #13#10 + #13#10 + 'Note: Translation of some languages is not yet complete. Email sales@xequte.com to assist.', mtInformation, [mbOK], 0); for I := 0 to mnuLanguage.Count - 1 do mnuLanguage.Items[I].Checked := False; aLang := TMsgLanguage(TMenuItem(Sender).Tag); IEGlobalSettings.MsgLanguage := aLang; TMenuItem(Sender).Checked := True; end; procedure TMainForm.RefreshLayerViewer(); begin // update ImageEnMView1 with the contents of ImageEnView1 ImageEnMView1.AssignLayers( ImageEnView1, True ); end; end.