unit Main; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ToolWin, ComCtrls, ImageEnView, IEVect, ExtCtrls, ImageEnProc, ImageEnIO, Buttons, StdCtrls, ieview, IEOpenSaveDlg, hyiedefs, hyieutils, iexBitmaps, iesettings, iexLayers, iexRulers; type TMainForm = class(TForm) MainMenu1: TMainMenu; File1: TMenuItem; Exit1: TMenuItem; ImageEnVect1: TImageEnVect; N1: TMenuItem; New: TMenuItem; Panel2: TPanel; StatusBar1: TStatusBar; GroupBox1: TGroupBox; SpeedButton1: TSpeedButton; SpeedButton4: TSpeedButton; GroupBox2: TGroupBox; SpeedButton7: TSpeedButton; SpeedButton11: TSpeedButton; SpeedButton12: TSpeedButton; SpeedButton8: TSpeedButton; GroupBox3: TGroupBox; SpeedButton2: TSpeedButton; SpeedButton3: TSpeedButton; GroupBox4: TGroupBox; SpeedButton5: TSpeedButton; SpeedButton6: TSpeedButton; SpeedButton9: TSpeedButton; SpeedButton10: TSpeedButton; SpeedButton13: TSpeedButton; ColorDialog1: TColorDialog; Open1: TMenuItem; SaveDialog1: TSaveDialog; Saveas1: TMenuItem; Import1: TMenuItem; DXF1: TMenuItem; Label13: TLabel; Tools1: TMenuItem; Openbackgroundimage1: TMenuItem; Adjustcolor1: TMenuItem; Effects1: TMenuItem; Grayforce1: TMenuItem; Edit5: TMenuItem; Undo1: TMenuItem; N2: TMenuItem; Copy1: TMenuItem; Cut1: TMenuItem; Paste1: TMenuItem; Pasteinrect1: TMenuItem; Deleteobject1: TMenuItem; SpeedButton14: TSpeedButton; FontDialog1: TFontDialog; OpenDialog1: TOpenDialog; ScrollBox1: TScrollBox; GroupBox5: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label9: TLabel; Label7: TLabel; Panel3: TShape; Panel4: TShape; cmbPen: TComboBox; Edit2: TEdit; UpDown2: TUpDown; cmbBrush: TComboBox; PageControl1: TPageControl; TabSheet1: TTabSheet; Label10: TLabel; Label11: TLabel; cmbLineStart: TComboBox; cmbLineEnd: TComboBox; TabSheet2: TTabSheet; Button1: TButton; Button2: TButton; Panel5: TPanel; ImageEnView1: TImageEnView; TabSheet3: TTabSheet; Label17: TLabel; Label18: TLabel; Button3: TButton; Edit6: TEdit; UpDown4: TUpDown; cmbTextAlign: TComboBox; Button4: TButton; GroupBox6: TGroupBox; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label8: TLabel; Label12: TLabel; ComboBox2: TComboBox; Edit1: TEdit; Edit3: TEdit; UpDown1: TUpDown; Edit4: TEdit; UpDown3: TUpDown; GroupBox7: TGroupBox; Label15: TLabel; Label16: TLabel; ComboBox1: TComboBox; Label14: TLabel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; SpeedButton15: TSpeedButton; SpeedButton16: TSpeedButton; Copyobjectstobackground1: TMenuItem; Objectscount1: TMenuItem; Editobjects1: TMenuItem; N3: TMenuItem; Fitbitmaptoobjects1: TMenuItem; N4: TMenuItem; Selectall1: TMenuItem; SpeedButton17: TSpeedButton; dlgOpenImage: TOpenImageEnDialog; Copy2: TMenuItem; Cut2: TMenuItem; Paste2: TMenuItem; SpeedButton18: TSpeedButton; SpeedButton19: TSpeedButton; CheckBox5: TCheckBox; Label19: TLabel; Edit7: TEdit; UpDown5: TUpDown; SpeedButton20: TSpeedButton; N5: TMenuItem; Undo2: TMenuItem; CheckBox6: TCheckBox; CheckBox7: TCheckBox; SpeedButton21: TSpeedButton; spdForceAltKey: TSpeedButton; procedure Exit1Click(Sender: TObject); procedure NewClick(Sender: TObject); procedure CommandButtonClick(Sender: TObject); procedure FormActivate(Sender: TObject); procedure StyleControlChange(Sender: TObject); procedure ImageEnVect1SelectObject(Sender: TObject); procedure ComboBox2Change(Sender: TObject); procedure Open1Click(Sender: TObject); procedure Saveas1Click(Sender: TObject); procedure DXF1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure ImageEnVect1ViewChange(Sender: TObject; Change: Integer); procedure Openbackgroundimage1Click(Sender: TObject); procedure Adjustcolor1Click(Sender: TObject); procedure Effects1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Grayforce1Click(Sender: TObject); procedure Undo1Click(Sender: TObject); procedure Copy1Click(Sender: TObject); procedure Cut1Click(Sender: TObject); procedure Paste1Click(Sender: TObject); procedure Pasteinrect1Click(Sender: TObject); procedure Deleteobject1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure ImageEnVect1MeasureHint(Sender: TObject; var Text: string; Value: Double); procedure SpeedButton16Click(Sender: TObject); procedure Copyobjectstobackground1Click(Sender: TObject); procedure Objectscount1Click(Sender: TObject); procedure Fitbitmaptoobjects1Click(Sender: TObject); procedure Selectall1Click(Sender: TObject); procedure Copy2Click(Sender: TObject); procedure Cut2Click(Sender: TObject); procedure Paste2Click(Sender: TObject); procedure Undo2Click(Sender: TObject); procedure CheckBox7Click(Sender: TObject); procedure ImageEnVect1TextKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Panel3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Panel4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure spdForceAltKeyClick(Sender: TObject); private { Private declarations } ctrlch: boolean; public { Public declarations } end; var MainForm: TMainForm; implementation uses giflzw, tiflzw, UGrayForce; {$R *.DFM} {$R WindowsTheme.res} // File > Exit procedure TMainForm.Exit1Click(Sender: TObject); begin Close; end; // File > New procedure TMainForm.NewClick(Sender: TObject); begin ImageEnVect1.Proc.Clear; ImageEnVect1.RemoveAllObjects; ImageEnVect1.Proc.ImageResize(ImageEnVect1.ClientWidth, ImageEnVect1.ClientHeight, iehLeft, ievTop); ImageEnVect1.Proc.Fill(clWhite); end; // Speedbuttons click (Zoom,Selection,Measures,Objects) procedure TMainForm.CommandButtonClick(Sender: TObject); var bMeasureSelected: Boolean; bSelectorSelected: Boolean; begin with ImageEnVect1 do begin // If using a measure, ensure that they have a suitable selector bMeasureSelected := SpeedButton2.down or SpeedButton3.down; bSelectorSelected := SpeedButton7.down or SpeedButton11.down or SpeedButton12.down; if bMeasureSelected and (bSelectorSelected = False) then MouseInteract := MouseInteract + [miSelect]; // SET MouseInteract and MouseInteractVt // Zoom if (Sender = SpeedButton1) and SpeedButton1.Down then MouseInteract := MouseInteract + [miZoom]; if (Sender = SpeedButton4) and SpeedButton4.Down then MouseInteract := MouseInteract + [miSelectZoom]; if (Sender = SpeedButton8) and SpeedButton8.Down then MouseInteract := MouseInteract + [miScroll]; // Selection if (Sender = SpeedButton13) and SpeedButton13.Down then MouseInteractVt := MouseInteractVt + [miObjectSelect]; if (Sender = SpeedButton7) and SpeedButton7.Down then MouseInteract := MouseInteract + [miSelect]; if (Sender = SpeedButton11) and SpeedButton11.Down then MouseInteract := MouseInteract + [miSelectPolygon]; if (Sender = SpeedButton12) and SpeedButton12.Down then MouseInteract := MouseInteract + [miSelectCircle]; // Measures if (Sender = SpeedButton2) and SpeedButton2.Down then MouseInteractVt := MouseInteractVt + [miArea]; if (Sender = SpeedButton3) and SpeedButton3.Down then MouseInteractVt := MouseInteractVt + [miLineLen]; if (Sender = SpeedButton15) and SpeedButton15.Down then MouseInteractVt := MouseInteractVt + [miDragLen]; // Insert objects if (Sender = SpeedButton5) and SpeedButton5.Down then MouseInteractVt := MouseInteractVt + [miPutLine]; if (Sender = SpeedButton6) and SpeedButton6.Down then MouseInteractVt := MouseInteractVt + [miPutBox]; if (Sender = SpeedButton9) and SpeedButton9.Down then MouseInteractVt := MouseInteractVt + [miPutEllipse]; if (Sender = SpeedButton10) and SpeedButton10.Down then MouseInteractVt := MouseInteractVt + [miPutBitmap]; if (Sender = SpeedButton14) and (SpeedButton14.Down) then MouseInteractVt := MouseInteractVt + [miPutText]; if (Sender = SpeedButton17) and (SpeedButton17.Down) then MouseInteractVt := MouseInteractVt + [miPutRuler]; if (Sender = SpeedButton18) and (SpeedButton18.Down) then MouseInteractVt := MouseInteractVt + [miPutPolyline]; if (Sender = SpeedButton19) and (SpeedButton19.Down) then MouseInteractVt := MouseInteractVt + [miPutAngle]; if (Sender = SpeedButton20) and (SpeedButton20.Down) then MouseInteractVt := MouseInteractVt + [miPutMemo]; if (Sender = SpeedButton21) and (SpeedButton21.Down) then MouseInteractVt := MouseInteractVt + [miEditPolyline]; // SET Buttons (feedback) SpeedButton1.Down := miZoom in MouseInteract; SpeedButton4.Down := miSelectZoom in MouseInteract; SpeedButton8.Down := miScroll in MouseInteract; SpeedButton13.Down := miObjectSelect in MouseInteractVt; SpeedButton7.Down := miSelect in MouseInteract; SpeedButton11.Down := miSelectPolygon in MouseInteract; SpeedButton12.Down := miSelectCircle in MouseInteract; SpeedButton2.Down := miArea in MouseInteractVt; SpeedButton3.Down := miLineLen in MouseInteractVt; SpeedButton5.Down := miPutLine in MouseInteractVt; SpeedButton6.Down := miPutBox in MouseInteractVt; SpeedButton9.Down := miPutEllipse in MouseInteractVt; SpeedButton10.Down := miPutBitmap in MouseInteractVt; SpeedButton14.Down := miPutText in MouseInteractVt; SpeedButton15.Down := miDragLen in MouseInteractVt; SpeedButton17.Down := miPutRuler in MouseInteractVt; SpeedButton18.Down := miPutPolyline in MouseInteractVt; SpeedButton19.Down := miPutAngle in MouseInteractVt; SpeedButton20.Down := miPutMemo in MouseInteractVt; SpeedButton21.Down := miEditPolyline in MouseInteractVt; // Cancel selection if not (miSelect in MouseInteract) and not (miSelectPolygon in Mouseinteract) and not (miSelectCircle in MouseInteract) then Deselect; end; end; procedure TMainForm.FormActivate(Sender: TObject); begin ctrlch := false; cmbBrush.ItemIndex := ord(bsClear); cmbPen.ItemIndex := ord(psSolid); cmbLineStart.ItemIndex := ord(iesNone); cmbLineEnd.ItemIndex := ord(iesNone); cmbTextAlign.ItemIndex := ord(iejLeft); StyleControlChange(self); ComboBox2.ItemIndex := 4; ComboBox2Change(self); checkbox1.checked := true; checkbox2.checked := true; checkbox3.checked := true; checkbox4.checked := true; ImageEnVect1.SelColor1 := clWhite; ImageEnVect1.SelColor2 := clRed; ImageEnVect1.MeasureTrack := true; ImageEnVect1.UseCentralGrip := false; ImageEnVect1.ObjAutoUndo := true; ImageEnVect1.Proc.ImageResize(ImageEnVect1.ClientWidth, ImageEnVect1.ClientHeight, iehLeft, ievTop); ImageEnVect1.Proc.Fill(clWhite); ImageEnView1.IEBitmap.Assign(ImageEnVect1.ObjBitmap[IEV_NEXT_INSERTED_OBJECT]); ImageEnView1.Update; ImageEnView1.Fit; end; // Object properties (controls change) procedure TMainForm.StyleControlChange(Sender: TObject); var q, obj: integer; xstyle: TIEVStyle; begin if ctrlch then exit; obj := IEV_NEXT_INSERTED_OBJECT; // (= -1 which refers to the next object that is inserted) with ImageEnvect1 do for q := -1 to SelObjectsCount - 1 do begin if q >= 0 then obj := SelObjects[q]; ObjMemoCharsBrushStyle[obj] := bsClear; SetObjFont(obj, FontDialog1.Font); ObjPenColor[obj] := panel3.Brush.color; ObjBrushColor[obj] := panel4.Brush.color; ObjBrushStyle[obj] := TBrushStyle(cmbBrush.itemindex); ObjPenStyle[obj] := TPenStyle(cmbPen.itemindex); ObjPenWidth[obj] := strtointdef(edit2.text, 1); ObjBeginShape[obj] := TIEVArrowShape(cmbLineStart.itemindex); ObjEndShape[obj] := TIEVArrowShape(cmbLineEnd.itemindex); ObjFontAngle[obj] := updown4.position; ObjTextAlign[obj] := TIEAlignment(cmbTextAlign.itemindex); xstyle := []; if checkbox1.checked then xstyle := xstyle + [ievsVisible]; if checkbox4.checked then xstyle := xstyle + [ievsSelectable]; if checkbox2.checked then xstyle := xstyle + [ievsMoveable]; if checkbox3.checked then xstyle := xstyle + [ievsSizeable]; ObjStyle[obj] := xstyle; ObjTextAutoSize[obj] := true; // shadow ObjSoftShadow[obj].Enabled := checkbox5.checked; // transparency ObjTransparency[obj] := strtointdef(Edit7.Text, 255); // memo multifont ObjFontLocked[obj] := not checkbox6.checked; end; end; // Object (or multi-object) selection procedure TMainForm.ImageEnVect1SelectObject(Sender: TObject); var q, obj: integer; begin // load properties to "Object properties" ctrlch := true; obj := IEV_NEXT_INSERTED_OBJECT; // (= -1 which refers to the next object that is inserted) with ImageEnVect1 do for q := -1 to SelObjectsCount - 1 do begin if q >= 0 then obj := SelObjects[q]; panel3.Brush.color := ObjPenColor[obj]; panel4.Brush.color := ObjBrushColor[obj]; edit2.text := inttostr(ObjPenWidth[obj]); cmbBrush.itemindex := ord(ObjBrushStyle[obj]); cmbPen.itemindex := ord(ObjPenStyle[obj]); cmbLineStart.itemindex := ord(ObjBeginShape[obj]); cmbLineEnd.itemindex := ord(ObjEndShape[obj]); with FontDialog1 do begin Font.Name := ObjFontName[obj]; Font.Height := ObjFontHeight[obj]; Font.Style := ObjFontStyles[obj]; end; updown4.position := trunc(ObjFontAngle[obj]); cmbTextAlign.itemindex := ord(ObjTextAlign[obj]); checkbox1.checked := ievsVisible in ObjStyle[obj]; checkbox4.checked := ievsSelectable in ObjStyle[obj]; checkbox2.checked := ievsMoveable in ObjStyle[obj]; checkbox3.checked := ievsSizeable in ObjStyle[obj]; checkbox5.checked := ObjSoftShadow[obj].Enabled; Edit7.text := inttostr(ObjTransparency[obj]); checkbox6.checked := not ObjFontLocked[obj]; end; ctrlch := false; end; // Measures unit / Scale / Digits / Precision procedure TMainForm.ComboBox2Change(Sender: TObject); begin with ImageEnVect1 do begin MUnit := TIEUnits(ComboBox2.ItemIndex); try ScaleFactor := StrToFloat(Edit1.text); except end; FloatDigits := StrToIntDef(Edit3.text, 2); FloatPrecision := StrToIntDef(Edit4.text, 15); end; end; // File > Open procedure TMainForm.Open1Click(Sender: TObject); begin OpenDialog1.Filter := 'ImageEn Objects|*.IEV'; OpenDialog1.DefaultExt := 'IEV'; if OpenDialog1.Execute then ImageEnVect1.LoadFromFileIEV(OpenDialog1.FileName); end; // File > Save As procedure TMainForm.Saveas1Click(Sender: TObject); begin if SaveDialog1.Execute then ImageEnVect1.SaveToFileIEV(SaveDialog1.FileName); end; // File > Import > DXF procedure TMainForm.DXF1Click(Sender: TObject); begin OpenDialog1.Filter := 'AutoCAD DXF|*.DXF'; OpenDialog1.DefaultExt := 'DXF'; if OpenDialog1.Execute then ImageEnVect1.ImportDXF(OpenDialog1.FileName); end; // Properties > zoom procedure TMainForm.ComboBox1Change(Sender: TObject); begin if ComboBox1.Text = 'Fit' then ImageEnVect1.Fit else ImageEnVect1.Zoom := StrToIntDef(ComboBox1.Text, 100); end; procedure TMainForm.ImageEnVect1ViewChange(Sender: TObject; Change: Integer); begin if Change = 0 then ComboBox1.Text := IntToStr(trunc(ImageEnVect1.Zoom)); end; // Tools > OpenBackgroundImage procedure TMainForm.Openbackgroundimage1Click(Sender: TObject); begin if dlgOpenImage.Execute then ImageEnVect1.IO.LoadFromFile(dlgOpenImage.FileName); end; // Tools > AdjustColor procedure TMainForm.Adjustcolor1Click(Sender: TObject); begin ImageEnVect1.Proc.DoPreviews(ppeColorAdjustments); end; // Tools > Effects procedure TMainForm.Effects1Click(Sender: TObject); begin ImageEnVect1.Proc.DoPreviews(ppeSpecialEffects); end; // Set image procedure TMainForm.Button1Click(Sender: TObject); begin if dlgOpenImage.Execute then begin ImageEnVect1.SetObjBitmapFromFile(IEV_NEXT_INSERTED_OBJECT, dlgOpenImage.FileName); ImageEnView1.IEBitmap.Assign(ImageEnVect1.ObjBitmap[IEV_NEXT_INSERTED_OBJECT]); ImageenView1.Update; ImageEnView1.Fit; end; end; // Adjust image procedure TMainForm.Button2Click(Sender: TObject); var q: integer; tempProc:TImageEnProc; begin // find first iekBITMAP object with ImageEnVect1 do for q := 0 to SelObjectsCount - 1 do if ObjKind[SelObjects[q]] = iekBITMAP then begin tempProc:=TImageEnProc.Create(nil); tempProc.AttachedIEBitmap := ObjBitmap[SelObjects[q]]; tempProc.DoPreviews([peAll]); tempProc.Free; Update; exit; end; end; // Tools > Gray force procedure TMainForm.Grayforce1Click(Sender: TObject); begin with GrayForce do if ShowModal = mrOK then ImageEnVect1.Proc.CastColorRange(IEGradientBar1.RGB, IEGradientBar2.RGB, TColor2TRGB(HSVBox1.Color)); end; // Edit > Undo procedure TMainForm.Undo1Click(Sender: TObject); begin ImageEnVect1.Proc.Undo; end; // Edit > Copy procedure TMainForm.Copy1Click(Sender: TObject); begin ImageEnVect1.Proc.SelCopyToClip; end; // Edit > Cut procedure TMainForm.Cut1Click(Sender: TObject); begin ImageEnVect1.Proc.SelCutToClip; end; // Edit > Paste procedure TMainForm.Paste1Click(Sender: TObject); begin ImageEnVect1.Proc.PasteFromClipboard; end; // Edit > PasteInRect procedure TMainForm.Pasteinrect1Click(Sender: TObject); begin ImageEnVect1.Proc.SelPasteFromClip( True, False, True ); end; // Delete object procedure TMainForm.Deleteobject1Click(Sender: TObject); begin while imageenvect1.SelObjectsCount > 0 do imageenvect1.RemoveObject(imageenvect1.selobjects[0]); end; // Set Font procedure TMainForm.Button3Click(Sender: TObject); begin if FontDialog1.Execute then StyleControlChange(self); end; // Stretch procedure TMainForm.Button4Click(Sender: TObject); begin FontDialog1.Font.Height := 0; StyleControlChange(self); end; procedure TMainForm.ImageEnVect1MeasureHint(Sender: TObject; var Text: string; Value: Double); begin statusbar1.SimpleText := Text; end; // hide objects procedure TMainForm.SpeedButton16Click(Sender: TObject); begin ImageEnVect1.AllObjectsHidden := SpeedButton16.Down; end; // Copy objects to background procedure TMainForm.Copyobjectstobackground1Click(Sender: TObject); begin ImageEnVect1.CopyObjectsToBack(true); end; // Objects count procedure TMainForm.Objectscount1Click(Sender: TObject); begin ShowMessage('Objects count = ' + IntTostr(ImageEnVect1.ObjectsCount)); end; // Fit bitmap to objects procedure TMainForm.Fitbitmaptoobjects1Click(Sender: TObject); var rc: TRect; begin rc := ImageEnVect1.ObjectsExtents; ImageEnVect1.IEBitmap.Width := rc.Right; ImageEnVect1.IEBitmap.Height := rc.Bottom; ImageEnVect1.Update; end; // Select all objects procedure TMainForm.Selectall1Click(Sender: TObject); begin ImageEnVect1.SelAllObjects; end; procedure TMainForm.Copy2Click(Sender: TObject); begin ImageEnVect1.ObjCopyToClipboard; end; procedure TMainForm.Cut2Click(Sender: TObject); begin ImageEnVect1.ObjCutToClipboard; end; procedure TMainForm.Paste2Click(Sender: TObject); begin ImageEnVect1.ObjPasteFromClipboard(5, 5); end; // Edit Objects > Undo procedure TMainForm.Undo2Click(Sender: TObject); begin ImageEnVect1.ObjUndo; ImageEnVect1.ObjClearUndo; end; // Antialiasing checkbox procedure TMainForm.CheckBox7Click(Sender: TObject); begin ImageEnVect1.ObjAntialias := CheckBox7.Checked; end; procedure TMainForm.ImageEnVect1TextKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin // Make the Enter key cancel text input if Key = VK_Return then begin Key := 0; ImageEnVect1.CancelInteracts; end; end; // Pen color procedure TMainForm.Panel3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ColorDialog1.Color := Panel3.Brush.Color; if ColorDialog1.Execute then Panel3.Brush.Color := ColorDialog1.Color; StyleControlChange(self); end; // Brush color procedure TMainForm.Panel4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ColorDialog1.Color := Panel4.Brush.Color; if ColorDialog1.Execute then Panel4.Brush.Color := ColorDialog1.Color; StyleControlChange(self); end; procedure TMainForm.spdForceAltKeyClick(Sender: TObject); begin ImageEnVect1.ForceAltKey := spdForceAltKey.Down; end; end.