Hi,
you should set DotPerUnit to the DPI value, for inches, DPI/2.54 for centimeters and so on.
z := ImageEnView1.Zoom / 100;
  if pixels? then
    m_dpi := 1
  else if inchies? then
    m_dpi := ImageEnView1.IO.Params.Dpi
  else if centimeters? then
    m_dpi := ImageEnView1.IO.Params.Dpi / 2.54
   ...etc...
  HorizRuler.ViewPos := ImageEnView1.ViewX / z / m_dpi;
  VertRuler.ViewPos  := ImageEnView1.ViewY / z / m_dpi;
  HorizRuler.DotPerUnit := z * m_dpi;
  VertRuler.DotPerUnit  := z * m_dpi;
Here is the Others/RulerBox example modified (Pixels1, Inches1 and Centimeters1 are menu items to select the measure unit):
unit umain;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, ieview, imageenview, rulerbox, ComCtrls, ExtCtrls;
type
  TForm1 = class(TForm)
    VertRuler: TRulerBox;
    ImageEnView1: TImageEnView;
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Open1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    HorizRuler: TRulerBox;
    Panel2: TPanel;
    View1: TMenuItem;
    Center1: TMenuItem;
    Units1: TMenuItem;
    Pixels1: TMenuItem;
    Inches1: TMenuItem;
    Centimeters1: TMenuItem;
    procedure Exit1Click(Sender: TObject);
    procedure Open1Click(Sender: TObject);
    procedure ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ImageEnView1ViewChange(Sender: TObject; Change: Integer);
    procedure Center1Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure OnSelectUnits(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    m_dpi: double;
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
{$R WindowsXP.RES}
procedure TForm1.FormCreate(Sender: TObject);
begin
  m_dpi := 1; // pixels
end;
// File | Exit
procedure TForm1.Exit1Click(Sender: TObject);
begin
  Close;
end;
// File | Open
procedure TForm1.Open1Click(Sender: TObject);
begin
  with ImageEnView1.IO do
    LoadFromFile( ExecuteOpenDialog('','',false,1,'') );
  FormResize(self);
end;
// mouse move
procedure TForm1.ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  HorizRuler.GripsPos[0] := ImageEnView1.XScr2Bmp( X );
  VertRuler.GripsPos[0]  := ImageEnView1.YScr2Bmp( Y );
end;
// scroll or zoom
procedure TForm1.ImageEnView1ViewChange(Sender: TObject; Change: Integer);
var
  z: double;
begin
  z := ImageEnView1.Zoom / 100;
  HorizRuler.ViewPos := ImageEnView1.ViewX / z / m_dpi;
  VertRuler.ViewPos  := ImageEnView1.ViewY / z / m_dpi;
  HorizRuler.DotPerUnit := z * m_dpi;
  VertRuler.DotPerUnit  := z * m_dpi;
  HorizRuler.Frequency := 10 / HorizRuler.DotPerUnit;
  VertRuler.Frequency  := 10 / VertRuler.DotPerUnit;
  HorizRuler.LabelFreq := 100 / HorizRuler.DotPerUnit;
  VertRuler.LabelFreq  := 100 / VertRuler.DotPerUnit;
  StatusBar1.SimpleText := 'Zoom ' + FloatToStr( ImageEnView1.Zoom ) + '%';
  if Change = 1 then
    FormResize(self);
end;
// View -> Center
procedure TForm1.Center1Click(Sender: TObject);
begin
  ImageEnView1.Center := Center1.Checked;
  FormResize(self);
end;
// Form resize, adjust rulers offsets
procedure TForm1.FormResize(Sender: TObject);
begin
  HorizRuler.OffsetX := ImageEnView1.OffsetX;
  VertRuler.OffsetY  := ImageEnView1.OffsetY;
end;
procedure TForm1.OnSelectUnits(Sender: TObject);
begin
  if Sender = Pixels1 then
    m_dpi := 1
  else if Sender = Inches1 then
    m_dpi := ImageEnView1.IO.Params.Dpi
  else if Sender = Centimeters1 then
    m_dpi := ImageEnView1.IO.Params.Dpi / 2.54;
  ImageEnView1ViewChange(self, 1);
end;
end.