unit uMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ieview, imageenview, ExtCtrls, StdCtrls, ComCtrls, hyiedefs, hyieutils, iexBitmaps, iesettings, Buttons, iexLayers, iexRulers, iexActions; type TForm1 = class(TForm) Panel1: TPanel; ImageEnView1: TImageEnView; GroupBox1: TGroupBox; chkDrawGuides: TCheckBox; Label3: TLabel; trkGripSize: TTrackBar; btnOpen: TButton; lblCropInfo: TLabel; btnApplyCrop: TButton; lblApplyCrop: TLabel; btnCancelCrop: TButton; lblCancelCrop: TLabel; btnSave: TButton; btnUndo: TButton; btnCropImage: TSpeedButton; chkPerspective: TCheckBox; grpSelection: TGroupBox; rdbNoLocking: TRadioButton; rdbLockSize: TRadioButton; rdbLockAR: TRadioButton; chkMoving: TCheckBox; chkResize: TCheckBox; chkRotate: TCheckBox; Label1: TLabel; procedure btnApplyCropClick(Sender: TObject); procedure btnCancelCropClick(Sender: TObject); procedure btnCropImageClick(Sender: TObject); procedure chkDrawGuidesClick(Sender: TObject); procedure trkGripSizeChange(Sender: TObject); procedure btnOpenClick(Sender: TObject); procedure btnSaveClick(Sender: TObject); procedure btnUndoClick(Sender: TObject); procedure chkMovingClick(Sender: TObject); procedure LockControlClick(Sender: TObject); procedure chkPerspectiveClick(Sender: TObject); procedure chkResizeClick(Sender: TObject); procedure chkRotateClick(Sender: TObject); procedure FormShow(Sender: TObject); procedure ImageEnView1ImageChange(Sender: TObject); private { Private declarations } procedure StartCropping(v: Boolean); public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} {$R WindowsTheme.res} procedure TForm1.btnApplyCropClick(Sender: TObject); begin ImageEnView1.CropToolInteraction.Crop(); end; procedure TForm1.btnCancelCropClick(Sender: TObject); begin ImageEnView1.CropToolInteraction.Cancel(); end; procedure TForm1.btnCropImageClick(Sender: TObject); begin StartCropping( btnCropImage.Down ); end; procedure TForm1.chkDrawGuidesClick(Sender: TObject); begin ImageEnView1.CropToolInteraction.DrawGuides := chkDrawGuides.Checked; ImageEnView1.Invalidate(); end; procedure TForm1.trkGripSizeChange(Sender: TObject); begin ImageEnView1.CropToolInteraction.GripSize := trkGripSize.Position; ImageEnView1.Invalidate(); end; procedure TForm1.btnOpenClick(Sender: TObject); var sFilename: string; begin sFilename := ImageEnView1.IO.ExecuteOpenDialog(); if sFilename <> '' then begin ImageEnView1.IO.LoadFromFile( sFilename ); ImageEnView1.Fit( False ); StartCropping( False ); end; end; procedure TForm1.btnSaveClick(Sender: TObject); var sFilename: string; begin sFilename := ImageEnView1.IO.ExecuteSaveDialog(); if sFilename <> '' then ImageEnView1.IO.SaveToFile( sFilename ); end; procedure TForm1.btnUndoClick(Sender: TObject); begin ImageEnView1.Deselect(); ImageEnView1.Proc.Undo( True ); end; procedure TForm1.chkMovingClick(Sender: TObject); begin if chkMoving.checked then ImageEnView1.CropToolInteraction.Options := ImageEnView1.CropToolInteraction.Options + [ iecoAllowMoving ] else ImageEnView1.CropToolInteraction.Options := ImageEnView1.CropToolInteraction.Options - [ iecoAllowMoving ] end; procedure TForm1.LockControlClick(Sender: TObject); begin if rdbLockAR.checked then ImageEnView1.CropToolInteraction.LockAspectRatio := 4 / 3 { 4:3 ratio } else if rdbLockSize.checked then begin ImageEnView1.CropToolInteraction.LockAspectRatio := 0; ImageEnView1.CropToolInteraction.LockWidth := ImageEnView1.IEBitmap.Width div 2; ImageEnView1.CropToolInteraction.LockHeight := 0; end else ImageEnView1.CropToolInteraction.LockAspectRatio := -1; end; procedure TForm1.chkPerspectiveClick(Sender: TObject); begin if chkPerspective.checked then ImageEnView1.CropToolInteraction.Mode := iectmPERSPECTIVE else ImageEnView1.CropToolInteraction.Mode := iectmRECTANGLE; ImageEnView1.Invalidate(); end; procedure TForm1.chkResizeClick(Sender: TObject); begin if chkResize.checked then ImageEnView1.CropToolInteraction.Options := ImageEnView1.CropToolInteraction.Options + [ iecoAllowResizing ] else ImageEnView1.CropToolInteraction.Options := ImageEnView1.CropToolInteraction.Options - [ iecoAllowResizing ] end; procedure TForm1.chkRotateClick(Sender: TObject); begin if chkRotate.checked then ImageEnView1.CropToolInteraction.Options := ImageEnView1.CropToolInteraction.Options + [ iecoAllowRotating ] else ImageEnView1.CropToolInteraction.Options := ImageEnView1.CropToolInteraction.Options - [ iecoAllowRotating ] end; procedure TForm1.FormShow(Sender: TObject); begin ImageEnView1.Proc.UndoLimit := 20; StartCropping( False ); end; procedure TForm1.ImageEnView1ImageChange(Sender: TObject); begin btnUndo.Enabled := ImageEnView1.Proc.CanUndo; btnSave.Enabled := not ImageEnView1.IsEmpty2; end; procedure TForm1.StartCropping(v: Boolean); begin if v then begin ImageEnView1.MouseInteract := [ miCropTool ]; ImageEnView1.Cursor := crIECrossSight; lblCropInfo.Caption := 'Click image and drag to select' + #13#10 + 'Resize by dragging the grips' + #13#10 + 'Rotate by dragging outside the grips'; end else begin ImageEnView1.MouseInteract := [ miZoom ]; ImageEnView1.Cursor := crIEZoomIn; lblCropInfo.Caption := 'Click to Zoom In' + #13#10 + 'Right-click to Zoom Out'; end; // General Controls btnCropImage .Enabled := not ImageEnView1.IsEmpty2; btnCropImage .Down := v; // Cropping controls btnApplyCrop .Enabled := v; lblApplyCrop .Enabled := v; btnCancelCrop .Enabled := v; lblCancelCrop .Enabled := v; end; end.