type TFerramenta = (frLinha, frRetângulo, frElipse, frRetRedondo); TForm1 = class(TForm) public FlagDesenho: Boolean; Origem, MovePonto: TPoint; Ferramenta: TDrawingTool; end; procedure TForm1.spbLinhaClick(Sender: TObject); begin Ferramenta := frLinha; end; procedure TForm1.spbRetânguloClick(Sender: TObject); begin Ferramenta := frRetângulo; end; procedure TForm1.spbElipseClick(Sender: TObject); begin Ferramenta := frElipse; end; procedure TForm1.sobRetRedondoClick(Sender: TObject); begin Ferramenta := frRetRedondo; end; procedure TForm1.FormMouseUp(Sender: TObject); begin case Ferramenta of frLinha: begin Canvas.MoveTo(Origem.X, Origem.Y); Canvas.LineTo(X, Y) end; frRetângulo: Canvas.Rectangle(Origem.X, Origem.Y, X, Y); frElipse: Canvas.Ellipse(Origem.X, Origem.Y, X, Y); frRetRedondo: Canvas.RoundRect(Origem.X, Origem.Y, X, Y, . (Origem.X - X) div 2, (Origem.Y - Y) div 2); end; FlagDesenho := False; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: . Integer); begin if FlagDesenho then begin Canvas.Pen.Mode := pmNotXor; case Ferramenta of frLinha : begin Canvas.MoveTo(Origem.X, Origem.Y); Canvas.LineTo(MovePonto.X, MovePonto.Y); Canvas.MoveTo(Origem.X, Origem.Y); Canvas.LineTo(X, Y); end; frRetângulo : begin Canvas.Rectangle(Origem.X, Origem.Y, MovePonto.X, MovePonto.Y); Canvas.Rectangle(Origem.X, Origem.Y, X, Y); end; frElipse : begin Canvas.Ellipse(Origem.X, Origem.Y, X, Y); Canvas.Ellipse(Origem.X, Origem.Y, X, Y); end; frRetRedondo : begin Canvas.RoundRect(Origem.X, Origem.Y, X, Y,(Origem.X - X) div 2, (Origem.Y - Y) div 2); Canvas.RoundRect(Origem.X, Origem.Y, X, Y,(Origem.X - X) div 2, (Origem.Y - Y) div 2); end; end; MovePonto := Point(X, Y); end; Canvas.Pen.Mode := pmCopy; end;