明白你的意思了。写了段完整的程序,可以满足你的要求。用一个枚举型变量MouseStatus记录当前鼠标的状态,如果按下了左键并且鼠标状态为按下状态时才画线。把鼠标动作封装了一个类,如果有更复杂的要求就丰富这个类的过程来实现。
unit Unit1;
interface
uses
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 FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
end;
TMouseAction = Class(TObject) //111111111111111111111
private
Origin, MovePt: TPoint; //111111111111111111111
Canvas: TCanvas;
Public
constructor Create(ACanvas: TCanvas);
procedure MouseDown(x, y: Integer);
procedure MouseMove(x, y: Integer);
procedure DrawLine(BeginPt, EndPt: TPoint);
end;
TMouseStatus = (msUp, msDown); //111111111111111111111111
var
Form1: TForm1;
DMouse: TMouseAction;
MouseStatus: TMouseStatus; //11111111111111111
implementation
{$R *.dfm}
constructor TMouseAction.Create(ACanvas: TCanvas);
begin
Canvas:= Acanvas;
end;
procedure TMouseAction.DrawLine(BeginPt, EndPt: TPoint);
begin
With Canvas do
begin
MoveTo(BeginPt.X, BeginPt.Y);
LineTo(EndPt.X, EndPt.Y);
end;
end;
procedure TMouseAction.MouseDown(x, y: Integer);
begin
Origin.X:= X;
Origin.Y:= Y;
MovePt.X:= X;
MovePt.Y:= Y;
end;
procedure TMouseAction.MouseMove(x, y: Integer);
begin
Canvas.Pen.Mode:= pmNotXOR;
Canvas.Pen.Width:= 1;
DrawLine(Origin, MovePt); //1111111111111111
DrawLine(Origin, Point(x,y)); //1111111111111111
MovePt:= Point(x,y);
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if(Button<>mbLeft) then exit;
DMouse:= TMouseAction.Create(Form1.Canvas);
DMouse.MouseDown(X,Y);
MouseStatus:= msDown; //11111111111111111
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseStatus:= msUp; //1111111111111111111111
if (DMouse = nil) then exit;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (DMouse<>nil) and (MouseStatus= msDown)then DMouse.MouseMove(X,Y); //1111
end;
end.