xieyuan0553 发表于 2016-1-28 21:03:20

画矩形

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
private
    { Private declarations }
public
    { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
var
    cx,cy:Integer;
    md:Boolean;
procedure TForm1.FormCreate(Sender: TObject);
begin
    Form1.DoubleBuffered:=True;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
    md:=True;
    cx:=x;
    cy:=y;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
    md:=False;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
    if md then
    begin
      Form1.Canvas.Rectangle(cx,cy,X,Y);
    end;
end;

end.

画矩形的代码是这样的,但当你把矩形拉大的时候再缩小,原来矩形就会留下痕迹。如何消除之前的矩形,不发生重叠?

aminghanhua 发表于 2016-2-2 09:34:30

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if md then
    begin
    form1.Canvas.FillRect(Form1.ClientRect);//清除残影
    Form1.Canvas.Rectangle(cx,cy,X,Y);
    end;
end;
页: [1]
查看完整版本: 画矩形