我想用CANVAS随着鼠标的移动,在窗体上画出一个从起点到终点的矩形框.我在MOUSEDOWN里记录起点,然后在MOUSEMOVE里从起点到鼠标所在位置画矩形,但是发现画了好多层的矩形,我现在只想从起点到鼠标所在位置画一个矩形,并且随着鼠标的移动而变化,该怎么做呢?如何擦除多余的矩形呢?
解决方案 »
- [高分请教]想写一个打字练习的东西,汉字要求是生僻字,如何调用字库呢?
- intraweb中如何使delphi取得自定义javascript函数的返回值??????
- 请教用Delphi来开发.net程序的优势
- 还是一个关于求学生名次的问题?路过的各位高手请帮忙看一看吧!数据库是access2000的
- 如何获得另一个delphi程序中image的图像
- XLSReadWriteII控件sheet间拷贝格式不对的问题。
- 请frend进来拿分!
- 除了dephi自带的image edit外还有什么工具可以编辑res文件。
- Com对象的远端调用问题?
- 怎样在98下实现windows关机消息的hook???
- 有没有什么控件,既可以在上面用键盘输入文字,而且也可以用鼠标在上面画图?在线等哈!!
- 求助!如何在动态改变大小的Image上画图!
在OnTimer里执行画图操作,画矩形前清屏
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
FOpt,
FCpt: TPoint;
procedure DrawRectangle(AOpt, ACpt: TPoint);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DrawRectangle(AOpt, ACpt: TPoint);
begin
With Canvas do
begin
//左垂
MoveTo(AOpt.X, AOpt.Y);
LineTo(AOpt.X, ACpt.Y); //右垂
MoveTo(ACpt.X, AOpt.Y);
LineTo(ACpt.X, ACpt.Y); //上水
MoveTo(AOpt.X, AOpt.Y);
LineTo(ACpt.X, AOpt.Y); MoveTo(AOpt.X, ACpt.Y);
LineTo(ACpt.X, ACpt.Y);
end;
end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
With Canvas do
begin
if Shift = [ssleft] then
begin
Canvas.Pen.Mode := pmNot;
Canvas.Pen.Color := clRed;
FOpt := Point(X, Y);
FCpt := Point(X, Y);
MoveTo(X, Y);
LineTo(X, Y)
end;
end;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
With Canvas do
begin
if Shift = [ssleft] then
begin
DrawRectangle(FOpt, FCpt);
FCpt := Point(X, Y);
DrawRectangle(FOpt, FCpt);
exit; MoveTo(FOpt.X, FOpt.Y);
LineTo(FCpt.X, FCpt.Y);
FCpt := Point(X, Y);
MoveTo(FOpt.X, FOpt.Y);
LineTo(FCpt.X, FCpt.Y)
end;
end;
end;end.
http://www.codeidea.com/cn/