420 lines
14 KiB
Plaintext
420 lines
14 KiB
Plaintext
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.
|