BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/Other/ImageEnViewRulers/umain.pas

192 lines
5.4 KiB
Plaintext

unit umain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ieview, imageenview, ComCtrls, ExtCtrls, StdCtrls, hyieutils,
iexBitmaps, hyiedefs, iesettings, iexRulers, iexLayers;
type
TForm1 = class(TForm)
ImageEnView1: TImageEnView;
MainMenu1: TMainMenu;
FileMenu: TMenuItem;
miOpen: TMenuItem;
N1: TMenuItem;
miExit: TMenuItem;
StatusBar1: TStatusBar;
ViewMenu: TMenuItem;
miCenter: TMenuItem;
miAlignRuler: TMenuItem;
UnitsMenu: TMenuItem;
miPixels: TMenuItem;
miInches: TMenuItem;
miCentimeters: TMenuItem;
N2: TMenuItem;
miLockGrips: TMenuItem;
miMillimeters: TMenuItem;
ToolsMenu: TMenuItem;
miAddGrips: TMenuItem;
miNextKind: TMenuItem;
N3: TMenuItem;
miInverted: TMenuItem;
procedure Exit1Click(Sender: TObject);
procedure miOpenClick(Sender: TObject);
procedure ImageEnView1ViewChange(Sender: TObject; Change: Integer);
procedure Center1Click(Sender: TObject);
procedure OnSelectUnits(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure miAddGripsClick(Sender: TObject);
procedure miAlignRulerClick(Sender: TObject);
procedure miInvertedClick(Sender: TObject);
procedure miLockGripsClick(Sender: TObject);
procedure miNextKindClick(Sender: TObject);
procedure ViewMenuClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{$R WindowsTheme.res}
procedure TForm1.FormCreate(Sender: TObject);
begin
ImageEnView1.RulerParams.Units := ieruPixels;
ImageEnView1.ShowRulers := [ rdHorizontal, rdVertical ];
ImageEnView1.RulerParams.ConstrainGrips := True; // Allow grips outside the area of the image?
end;
// File | Exit
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
// File | Open
procedure TForm1.miOpenClick(Sender: TObject);
begin
with ImageEnView1.IO do
LoadFromFile( ExecuteOpenDialog('','',false,1,'') );
end;
// scroll or zoom
procedure TForm1.ImageEnView1ViewChange(Sender: TObject; Change: Integer);
begin
StatusBar1.Panels[0].Text := ' Zoom: ' + IntToStr( Trunc( ImageEnView1.Zoom )) + '%';
end;
// View -> Center
procedure TForm1.Center1Click(Sender: TObject);
begin
ImageEnView1.Center := miCenter.Checked;
end;
procedure TForm1.miAddGripsClick(Sender: TObject);
begin
// Add three grips at 25%, 50% and 75% of the image width
ImageEnView1.RulerParams.HorzGripsCount := 3;
ImageEnView1.RulerParams.GripsPosBase := ierbBitmap; // Units are relative to the bitmap
ImageEnView1.RulerParams.HorzGripsPos[ 0 ] := MulDiv( ImageEnView1.IEBitmap.Width, 1, 4 );
ImageEnView1.RulerParams.HorzGripsPos[ 1 ] := MulDiv( ImageEnView1.IEBitmap.Width, 2, 4 );
ImageEnView1.RulerParams.HorzGripsPos[ 2 ] := MulDiv( ImageEnView1.IEBitmap.Width, 3, 4 );
// Add three grips at 25%, 50% and 75% of the image height
ImageEnView1.RulerParams.VertGripsCount := 3;
ImageEnView1.RulerParams.GripsPosBase := ierbBitmap; // Units are relative to the bitmap
ImageEnView1.RulerParams.VertGripsPos[ 0 ] := MulDiv( ImageEnView1.IEBitmap.Height, 1, 4 );
ImageEnView1.RulerParams.VertGripsPos[ 1 ] := MulDiv( ImageEnView1.IEBitmap.Height, 2, 4 );
ImageEnView1.RulerParams.VertGripsPos[ 2 ] := MulDiv( ImageEnView1.IEBitmap.Height, 3, 4 );
end;
procedure TForm1.miAlignRulerClick(Sender: TObject);
begin
ImageEnView1.RulerParams.AlignToImage := miAlignRuler.Checked;
end;
procedure TForm1.miInvertedClick(Sender: TObject);
begin
ImageEnView1.LockUpdate();
if miInverted.Checked then
begin
// Move rulers
ImageEnView1.RulerParams.HorzPos := gdDown;
ImageEnView1.RulerParams.VertPos := gdRight;
// Reverse direction of measurements
ImageEnView1.RulerParams.HorzInverted := True;
ImageEnView1.RulerParams.VertInverted := True;
end
else
begin
// Move rulers
ImageEnView1.RulerParams.HorzPos := gdUp;
ImageEnView1.RulerParams.VertPos := gdLeft;
// Reverse direction of measurements
ImageEnView1.RulerParams.HorzInverted := False;
ImageEnView1.RulerParams.VertInverted := False;
end;
ImageEnView1.UnlockUpdate();
end;
procedure TForm1.miLockGripsClick(Sender: TObject);
const
Lock_Grips_To_Label = True; // snap to integer values, or closest label tick?
begin
if miLockGrips.Checked = False then
ImageEnView1.RulerParams.SnapGrips := iesnNone
else
if Lock_Grips_To_Label then
ImageEnView1.RulerParams.SnapGrips := iesnSnapToLabel
else
ImageEnView1.RulerParams.SnapGrips := iesnSnapToWholeNumber;
end;
procedure TForm1.miNextKindClick(Sender: TObject);
var
nextKind: TGripKind;
begin
nextKind := TGripKind( Ord( ImageEnView1.RulerParams.GripKindDefault ) + 1 );
if nextKind = gkNone then
nextKind := gkTriangle;
ImageEnView1.RulerParams.GripKindDefault := nextKind;
end;
procedure TForm1.OnSelectUnits(Sender: TObject);
begin
if Sender = miPixels then
ImageEnView1.RulerParams.Units := ieruPixels
else
if Sender = miInches then
ImageEnView1.RulerParams.Units := ieruInches
else
if Sender = miMillimeters then
ImageEnView1.RulerParams.Units := ieruMillimeters
else
if Sender = miCentimeters then
ImageEnView1.RulerParams.Units := ieruCentimeters;
end;
procedure TForm1.ViewMenuClick(Sender: TObject);
begin
miNextKind.Enabled := ImageEnView1.RulerParams.HorzGripsCount > 0;
end;
end.