BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/Other/Actions_Layers/MAIN.PAS

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.