BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/ImageEditing/CropTool/uMain.pas

224 lines
5.8 KiB
Plaintext

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.