ImageEn for Delphi and C++ Builder ImageEn for Delphi and C++ Builder

 

ImageEn Forum
Profile    Join    Active Topics    Forum FAQ    Search this forumSearch
Forum membership is Free!  Click Join to sign-up
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 ImageEn Library for Delphi, C++ and .Net
 ImageEn and IEvolution Support Forum
 The unit of measurement in the ruler box
 New Topic  Reply to Topic
Author Previous Topic Topic Next Topic  

Boban

Yugoslavia
41 Posts

Posted - Dec 01 2012 :  04:23:19  Show Profile  Reply
Hi

How do I set the ComboBox in Munite (cm, mm, pixel, dpi) units so that when inserting images in Layer ImageEnVector automatically move to the margins RulerBox if possible? I need to create covers to DVD and CD discs. If you can not be an ekample or any other solution.



fab

1310 Posts

Posted - Dec 14 2012 :  03:56:47  Show Profile  Reply
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.

Go to Top of Page

Boban

Yugoslavia
41 Posts

Posted - Dec 15 2012 :  20:21:58  Show Profile  Reply
Hi Fabrizio

Thank you.

I did this with ComboBox onchange. I tried in two dimensions field enter the Edit templates or pictures but we did not work when I enter the number in the Edit field with a comma, then we report a mistake in the'' comma''.
How to enter in the edit field size dimensions change templates and pictures as well as change from the ComboBox and change the unit of measurement is to be made on RulerBox but to be in operation and commas?

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
if combobox2.Text ='Pixels' then
m_dpi := 1;
ImageEnView1ViewChange(self, 1);
if combobox2.Text ='Inches' then
m_dpi := ImageEnView1.IO.Params.Dpi;
ImageEnView1ViewChange(self, 1);
if combobox2.Text ='Centimeters' then
m_dpi := ImageEnView1.IO.Params.Dpi / 2.54;
ImageEnView1ViewChange(self, 1);
end;

//Error entry point to edit

procedure TForm1.Edit1Change(Sender: TObject);
begin
ImageEnView1.Proc.ImageResize(StrToInt(Edit1.Text), StrToInt(Edit2.Text), iehLeft, ievTop);
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
ImageEnView1.Proc.ImageResize(StrToInt(Edit1.Text), StrToInt(Edit2.Text), iehLeft, ievTop);
end;
Go to Top of Page
  Previous Topic Topic Next Topic  
 New Topic  Reply to Topic
Jump To: