interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Buttons, StdCtrls;type
TdrawingTool=(dtline,dtrectangle,dtellipse,dtroundrect);
TForm1 = class(TForm)
Image1: TImage;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
Button1: TButton;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
drawingtool:tdrawingtool;
Origin,movept: TPoint;
drawflag:boolean;
procedure drawshape(topleft,bottomright:Tpoint;AMode: TPenMode);
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.drawshape(topleft,bottomright:Tpoint;AMode: TPenMode);
begin
with image1.Canvas do
begin
case drawingTool of
dtline:begin
moveto(topleft.x,topleft.y);
lineto(bottomright.x,bottomright.y);
end;
dtrectangle:rectangle(topleft.x,topleft.y,bottomright.x,bottomright.y);
dtellipse: ellipse(topleft.x,topleft.y,bottomright.x,bottomright.y);
dtroundrect:roundrect(topleft.x,topleft.y,bottomright.x,bottomright.y,
(topleft.x-bottomright.x) div 2,
(topleft.y-bottomright.y) div 2);
end;
end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
drawflag:=true;
image1.Canvas.MoveTo(x,y);
origin:=point(x,y);
movept:=origin;
end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if drawflag then drawshape(origin,point(x,y),pmcopy);
drawflag:=false;
end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if drawflag then
begin
drawshape(origin,movept,pmNotXor);
movept:=point(x,y);
drawshape(origin,movept,pmNotXor);
end;end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
drawingtool:=dtline;
end;procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
drawingtool:=dtellipse;
end;procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
drawingtool:=dtrectangle;
end;procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
drawingtool:=dtroundrect;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Canvas.Brush.Color:=clWhite;
image1.Canvas.FillRect(ClientRect);
end;procedure TForm1.FormShow(Sender: TObject);
begin
image1.Canvas.Brush.Color:=clWhite;
end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Buttons, StdCtrls;type
TdrawingTool=(dtline,dtrectangle,dtellipse,dtroundrect);
TForm1 = class(TForm)
Image1: TImage;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
Button1: TButton;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
drawingtool:tdrawingtool;
Origin,movept: TPoint;
drawflag:boolean;
procedure drawshape(topleft,bottomright:Tpoint;AMode: TPenMode);
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.drawshape(topleft,bottomright:Tpoint;AMode: TPenMode);
begin
with image1.Canvas do
begin
case drawingTool of
dtline:begin
moveto(topleft.x,topleft.y);
lineto(bottomright.x,bottomright.y);
end;
dtrectangle:rectangle(topleft.x,topleft.y,bottomright.x,bottomright.y);
dtellipse: ellipse(topleft.x,topleft.y,bottomright.x,bottomright.y);
dtroundrect:roundrect(topleft.x,topleft.y,bottomright.x,bottomright.y,
(topleft.x-bottomright.x) div 2,
(topleft.y-bottomright.y) div 2);
end;
end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
drawflag:=true;
image1.Canvas.MoveTo(x,y);
origin:=point(x,y);
movept:=origin;
end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if drawflag then drawshape(origin,point(x,y),pmcopy);
drawflag:=false;
end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if drawflag then
begin
drawshape(origin,movept,pmNotXor);
movept:=point(x,y);
drawshape(origin,movept,pmNotXor);
end;end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
drawingtool:=dtline;
end;procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
drawingtool:=dtellipse;
end;procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
drawingtool:=dtrectangle;
end;procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
drawingtool:=dtroundrect;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
image1.Canvas.Brush.Color:=clWhite;
image1.Canvas.FillRect(ClientRect);
end;procedure TForm1.FormShow(Sender: TObject);
begin
image1.Canvas.Brush.Color:=clWhite;
end;end.
一次擦除上次的线条,一次画新线条!