Необходим графический редактор, который рисует примитивы и сохраняет в файл. На форме втыкнут на всю форму Image1, на котором и соверщается всё это действие. При построении эллипса он не стирается, а как бы заливается второстепенными эллипсами. Я пробовал помудрить со свойствами Pen, вставляя строчку image1.Canvas.Pen.Mode := pmNotcopy; но безрезультатно....
| Код | unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtDlgs, ExtCtrls;
type TForm1 = class(TForm) ComboBox1: TComboBox; Label1: TLabel; Edit1: TEdit; ColorDialog1: TColorDialog; Button1: TButton; Button2: TButton; Image1: TImage; SavePictureDialog1: TSavePictureDialog; procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } AnchorX, AnchorY, CurX, CurY: Integer; B: Boolean; public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin AnchorX := X; CurX := X; AnchorY := Y; CurY := Y; B := True; case combobox1.ItemIndex of 2: image1.Canvas.Pixels[CurX,CurY]:=colordialog1.color; 3: image1.canvas.moveTo(AnchorX,AnchorY); end; end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if B then begin image1.canvas.Pen.Color:=colordialog1.Color; image1.canvas.Brush.Color:=colordialog1.Color; image1.Canvas.Pen.Mode := pmNotxor; image1.Canvas.Pen.Width := strtoint(edit1.Text); image1.Canvas.Brush.Style := bsClear; case combobox1.ItemIndex of 0: Canvas.Rectangle(AnchorX, AnchorY, CurX, CurY); 1: Canvas.Ellipse(AnchorX, AnchorY, CurX, CurY); end; CurX := X; CurY := Y; case combobox1.ItemIndex of 0: image1.Canvas.Rectangle(AnchorX, AnchorY, CurX, CurY); 1: image1.Canvas.Ellipse(AnchorX, AnchorY, CurX, CurY); end; end; end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if B then begin B := False; case combobox1.ItemIndex of 3: image1.canvas.LineTo(CurX,CurY); end; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin colordialog1.Execute; end;
procedure TForm1.Button2Click(Sender: TObject); begin begin if SavePictureDialog1.Execute then begin Image1.Picture.SaveToFile(SavePictureDialog1.FileName+'.bmp'); end; end; end;
end.
|
|