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.