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.