unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus, jpeg, ShellApi, ComCtrls, math; type TRamka = record Top: integer; Left: integer; Width: integer; Height: integer; end; TForm2 = class(TForm) Edit1: TEdit; Edit2: TEdit; Image1: TImage; Shape1: TShape; Shape5: TShape; Shape2: TShape; Shape6: TShape; Shape3: TShape; Shape7: TShape; Shape4: TShape; Shape8: TShape; Button1: TButton; Button2: TButton; Label1: TLabel; Label2: TLabel; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; MainMenu1: TMainMenu; N1: TMenuItem; N2: TMenuItem; N3: TMenuItem; PrintDialog1: TPrintDialog; N4: TMenuItem; Edit3: TEdit; Edit4: TEdit; Label3: TLabel; Label4: TLabel; CheckBox1: TCheckBox; CheckBox2: TCheckBox; ColorDialog1: TColorDialog; Button3: TButton; Edit5: TEdit; UpDown1: TUpDown; Label5: TLabel; CheckBox3: TCheckBox; procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormActivate(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape7MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape7MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Shape7MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape8MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape8MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Shape8MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Shape3MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape5MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Shape5MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape4MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Shape4MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Shape2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Shape6MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Shape6MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure N3Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button3Click(Sender: TObject); procedure UpDown1Click(Sender: TObject; Button: TUDBtnType); private Procedure PaintFlagi; Procedure FlagVisible; Procedure FlagNoVisible; { Private declarations } public { Public declarations } end; var Form2: TForm2; Ramka: TRamka; X0, Y0: integer; implementation uses Unit1; {$R *.dfm} procedure TForm2.FormActivate(Sender: TObject); begin FlagNoVisible; Form2.Canvas.Pen.Mode := pmNotXor; Form2.Canvas.Brush.Style := bsClear; end; procedure Tform2.PaintFlagi; begin Shape1.Top := Image1.Top - 8; Shape1.Left := Image1.Width div 2 - 4 + Image1.Left; Shape2.Top := Image1.Top - 8; Shape2.Left := Image1.Left + Image1.Width; Shape3.Top := Image1.Top + Image1.Height div 2 - 4; Shape3.Left := Image1.Left + Image1.Width; Shape4.Top := Image1.Top + Image1.Height; Shape4.Left := Image1.Left + Image1.Width; Shape5.Top := Image1.Top + Image1.Height; Shape5.Left := Image1.Left + Image1.Width div 2 - 4; Shape6.Top := Image1.Top + Image1.Height ; Shape6.Left := Image1.Left - 8; Shape7.Top := Image1.Top + Image1.Height div 2 - 4; Shape7.Left := Image1.Left - 8; Shape8.Top := Image1.Top - 8; Shape8.Left := Image1.Left - 8; end; procedure Tform2.FlagNoVisible; begin Shape1.Visible := False; Shape2.Visible := False; Shape3.Visible := False; Shape4.Visible := False; Shape5.Visible := False; Shape6.Visible := False; Shape7.Visible := False; Shape8.Visible := False; end; procedure Tform2.FlagVisible; begin Shape1.Visible := True; Shape2.Visible := True; Shape3.Visible := True; Shape4.Visible := True; Shape5.Visible := True; Shape6.Visible := True; Shape7.Visible := True; Shape8.Visible := True; end; procedure TForm2.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var xn,yn:real; zn,width1,height1:integer; begin width1:=form2.image1.width; height1:=form2.image1.height; xn:=(x*(form1.xmax-form1.xmin)/width1+form1.xmin); yn:=((-y+height1)*(form1.ymax-form1.ymin)/height1+form1.ymin); zn:=-2; if checkbox3.Checked then zn:=0; edit1.Text:='x='+floattostr(RoundTo(xn,zn)); edit2.Text:='y='+floattostr(RoundTo(yn,zn)); // если нажата левая кнопка мыши IF ssLeft in Shift then begin // стираем рамку на старом месте Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); // вычисляем новые координаты рамки Ramka.Left := Ramka.Left + X - X0; Ramka.Top := Ramka.Top + Y - Y0; // запоминаем новые координаты мыши X0 := x; Y0 := y; // рисуем рамку на новом месте Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); end; IF ssLeft in Shift then begin Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); // рисуем рамку вместо того, что бы её стереть. Ramka.Left := Ramka.Left + X - X0; Ramka.Top := Ramka.Top + Y - Y0; X0 := x; Y0 := y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Shape3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin IF ssLeft in Shift then begin Canvas.Rectangle(Ramka.Left, Ramka.Top, Image1.Left + Ramka.Width, Ramka.Top + Ramka.Height); Ramka.Width := Ramka.Width + X - X0; X0 := x; Canvas.Rectangle(Ramka.Left, Ramka.Top, Image1.Left + Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Shape3MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button = mbLeft then begin Image1.Width := Ramka.Width; Canvas.Rectangle(Ramka.Left, Ramka.Top, Image1.Left + Ramka.Width, Ramka.Top + Ramka.Height); PaintFlagi; FlagVisible; end; end; procedure TForm2.Shape5MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IF button = mbLeft then begin FlagNoVisible; Ramka.Top := Image1.Top; Ramka.Left := Image1.Left; Ramka.Width := Image1.Width; Ramka.Height := Image1.Height; Y0 := Y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Shape5MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin IF ssLeft in Shift then begin Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); Ramka.Height := Ramka.Height + Y - Y0; Y0 := y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Shape5MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button = mbLeft then begin Image1.Height := Ramka.Height; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); PaintFlagi; FlagVisible; end; end; procedure TForm2.Shape4MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IF button = mbLeft then begin FlagNoVisible; Ramka.Top := Image1.Top; Ramka.Left := Image1.Left; Ramka.Width := Image1.Width; Ramka.Height := Image1.Height; X0 := X; Y0 := Y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Image1.Left + Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Shape4MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin IF ssLeft in Shift then begin Canvas.Rectangle(Ramka.Left, Ramka.Top, Image1.Left + Ramka.Width, Ramka.Top + Ramka.Height); Ramka.Width := Ramka.Width + X - X0; Ramka.Height := Ramka.Height + Y - Y0; X0 := x; Y0 := y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Image1.Left + Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Shape4MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button = mbLeft then begin Image1.Height := Ramka.Height; Image1.Width := Ramka.Width; Canvas.Rectangle(Ramka.Left, Ramka.Top, Image1.Left + Ramka.Width, Ramka.Top + Ramka.Height); PaintFlagi; FlagVisible; end; end; procedure TForm2.Shape2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IF button = mbLeft then begin FlagNoVisible; Ramka.Top := Image1.Top; Ramka.Left := Image1.Left; Ramka.Width := Image1.Width; Ramka.Height := Image1.Height + Ramka.Top; X0 := X; Y0 := Y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Height); end; end; procedure TForm2.Shape2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin IF ssLeft in Shift then begin Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Height); Ramka.Width := Ramka.Width + X - X0; Ramka.Top := Ramka.Top + Y - Y0; X0 := x; Y0 := y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Height); end; end; procedure TForm2.Shape2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button = mbLeft then begin Image1.Top := Ramka.Top; Image1.Height := Ramka.Height - Ramka.Top; Image1.Width := Ramka.Width; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Height); PaintFlagi; FlagVisible; end; end; procedure TForm2.Shape6MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IF button = mbLeft then begin FlagNoVisible; Ramka.Top := Image1.Top; Ramka.Left := Image1.Left; Ramka.Width := Image1.Width + Image1.Left; Ramka.Height := Image1.Height; X0 := X; Y0 := Y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Shape6MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin IF ssLeft in Shift then begin Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Top + Ramka.Height); Ramka.Left := Ramka.Left + X - X0; Ramka.Height := Ramka.Height + Y - Y0; X0 := x; Y0 := y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Shape6MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button = mbLeft then begin Image1.Left := Ramka.Left; Image1.Width := Ramka.Width - Ramka.Left; Image1.Height := Ramka.Height; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Top + Ramka.Height); PaintFlagi; FlagVisible; end; end; procedure TForm2.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // В начале мы проверяем, была ли нажата именно левая кнопка мыши IF button = mbLeft then begin // делаем невидимыми наши флажки FlagNoVisible; // передаём координаты и размеры картинки в элемент записи Ramka Ramka.Top := Image1.Top; Ramka.Left := Image1.Left; Ramka.Width := Image1.Width; Ramka.Height := Image1.Height; // запоминаем начальные координаты мыши X0 := X; Y0 := Y; // рисуем рамку Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); end; IF button = mbLeft then begin FlagNoVisible; Ramka.Top := Image1.Top; Ramka.Left := Image1.Left; Ramka.Width := Image1.Width; Ramka.Height := Image1.Height; X0 := X; Y0 := Y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // проверяем левую кнопку мыши if button = mbLeft then begin // определяем новые координаты Image Image1.Top := Ramka.Top; Image1.Left := Ramka.Left; // стираем рамку Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Top + Ramka.Height); // ставим флаги на новое место PaintFlagi; // делаем флаги видимыми FlagVisible; end; end; procedure TForm2.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IF button = mbLeft then begin FlagNoVisible; Ramka.Top := Image1.Top; Ramka.Left := Image1.Left; Ramka.Width := Image1.Width; Ramka.Height := Image1.Height + Ramka.Top; Y0 := Y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Height); end; end; procedure TForm2.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin IF ssLeft in Shift then begin Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Height); Ramka.Top := Ramka.Top + Y - Y0; Y0 := y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Height); end; end; procedure TForm2.Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button = mbLeft then begin Image1.Top := Ramka.Top; Image1.Height := Ramka.Height - Ramka.Top; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Left + Ramka.Width, Ramka.Height); PaintFlagi; FlagVisible; end; end; procedure TForm2.Shape7MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button = mbLeft then begin Image1.Left := Ramka.Left; Image1.Width := Ramka.Width - Ramka.Left; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Top + Ramka.Height); PaintFlagi; FlagVisible; end; end; procedure TForm2.Shape7MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin IF ssLeft in Shift then begin Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Top + Ramka.Height); Ramka.Left := Ramka.Left + X - X0; X0 := x; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Shape7MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IF button = mbLeft then begin FlagNoVisible; Ramka.Top := Image1.Top; Ramka.Left := Image1.Left; Ramka.Width := Image1.Width + Image1.Left; Ramka.Height := Image1.Height; X0 := X; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Shape8MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin begin IF button = mbLeft then begin FlagNoVisible; Ramka.Top := Image1.Top; Ramka.Left := Image1.Left; Ramka.Width := Image1.Width + Image1.Left; Ramka.Height := Image1.Height + Image1.Top; X0 := X; Y0 := Y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Height); end; end; end; procedure TForm2.Shape8MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin IF ssLeft in Shift then begin Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Height); Ramka.Left := Ramka.Left + X - X0; Ramka.Top := Ramka.Top + Y - Y0; X0 := x; Y0 := y; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Height); end; end; procedure TForm2.Shape8MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if button = mbLeft then begin Image1.Top := Ramka.Top; Image1.Left := Ramka.Left; Image1.Width := Ramka.Width - Ramka.Left; Image1.Height := Ramka.Height - Ramka.Top; Canvas.Rectangle(Ramka.Left, Ramka.Top, Ramka.Width, Ramka.Height); PaintFlagi; FlagVisible; end; end; procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin edit1.Clear; edit2.Clear; end; procedure TForm2.Shape3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin IF button = mbLeft then begin FlagNoVisible; Ramka.Top := Image1.Top; Ramka.Left := Image1.Left; Ramka.Width := Image1.Width; Ramka.Height := Image1.Height; X0 := X; Canvas.Rectangle(Ramka.Left, Ramka.Top, Image1.Left + Ramka.Width, Ramka.Top + Ramka.Height); end; end; procedure TForm2.Button1Click(Sender: TObject); begin image1.Canvas.Pen.Color:=clwhite; image1.Canvas.Brush.Style:=bssolid; image1.Canvas.Brush.Color:=clwhite; image1.Picture.Bitmap.Width:=image1.Width; image1.Picture.Bitmap.height:=image1.height; image1.Canvas.Rectangle(0,0,image1.Width,image1.Height); image1.Canvas.Pen.Color:=clblack; end; procedure TForm2.Button2Click(Sender: TObject); begin Form1.N8.Click; end; procedure TForm2.N2Click(Sender: TObject); var jp: TJPEGImage; begin savedialog1.FilterIndex:=1; if savedialog1.FilterIndex=1 then begin savedialog1.Execute; image1.Picture.SaveToFile(savedialog1.FileName+'.bmp'); end; if savedialog1.FilterIndex=2 then begin jp := TJPEGImage.Create; try with jp do begin Assign(Image1.Picture.Bitmap); SaveToFile(savedialog1.FileName+'.jpg') end; finally jp.Free; end; end; end; procedure TForm2.N3Click(Sender: TObject); var jp: TJPEGImage; begin opendialog1.FilterIndex:=1; if opendialog1.FilterIndex=1 then begin opendialog1.Execute; image1.Picture.loadfromFile(opendialog1.FileName); end; if opendialog1.FilterIndex=2 then begin image1.Picture.LoadFromFile(opendialog1.FileName) end; end; procedure TForm2.N4Click(Sender: TObject); begin printdialog1.Execute; Image1.Picture.SaveToFile('tempgraf.bmp'); ShellExecute (Handle, 'print', 'tempgraf.bmp',nil,nil,sw_show); end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin form1.button3.click; end; procedure TForm2.Button3Click(Sender: TObject); begin if colordialog1.Execute then form1.ColorL:=form2.ColorDialog1.Color; end; procedure TForm2.UpDown1Click(Sender: TObject; Button: TUDBtnType); begin form1.widthL:=strtoint(edit5.text); end; end.