unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
  TForm1 = class(TForm)
    procedure FormClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  FirstClick :Boolean = True;
  X1,Y1 :Integer;
  X2,Y2 :Integer;
var Po1,Po2 :TPoint;
implementation{$R *.DFM}procedure TForm1.FormClick(Sender: TObject);
begin
  if FirstClick then
  begin
    GetCursorPos(Po1);
    X1 := Po1.x;
    Y1 := Po1.Y;
    FirstClick := False;
  end
  else
  begin
    GetCursorPos(Po2);
    X2 := Po2.x;
    Y2 := Po2.Y;
//      Canvas.FillRect(ClientRect);    Canvas.MoveTo(X1,Y1);
    Canvas.LineTo(X2,Y2);
    X1 := Po2.x;
    Y1 := Po2.Y;
  end;
end;end.

解决方案 »

  1.   

    以下是画矩形框的,画直线比这更简单一些,希望对你有帮助!
    var  
      bIsDrawing : boolean;
      iOldX, iOldY : integer;
      iStartX,iStartY : integer;
    procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      bIsDrawing := True;
      iStartX := x;
      iStartY := y;
      iOldX := x;
      iOldY := y;
    end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if bIsDrawing then
      begin
      with Image1.Canvas do
      begin    Pen.Mode := pmXor;
        brush.Color := clred;    Rectangle (Rect(iStartX,iStartY,iOldX,iOldY));
        Rectangle (Rect(iStartX,iStartY,x,y));
        iOldX := x;
        iOldY := y;
      end;
      end;
    end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      bIsdrawing := false;
    end;
      

  2.   

    刚才那个是画矩形框的(并没有完成,其实只想做一个思路上的参考)
    下面这是完整的,希望对你有所帮助!
    var
      bIsDrawing : boolean;
      iOldX, iOldY : integer;
      iStartX,iStartY : integer;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      bIsDrawing := True;
      iStartX := x;
      iStartY := y;
      iOldX := x;
      iOldY := y;
    end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if bIsDrawing then
      begin
        with Image1.Canvas do
        begin       Pen.Mode := pmXor;
           Pen.Color := clWhite;       //Rectangle (Rect(iStartX,iStartY,iOldX,iOldY));
           //Rectangle (Rect(iStartX,iStartY,x,y));
           MoveTo(iStartX,iStartY);
           LineTo(iOldX,iOldY);
           MoveTo(iStartX,iStartY);
           LineTo(X,Y);
           iOldX := x;
           iOldY := y;
        end;
      end;
    end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      bIsdrawing := false;
    end;
      

  3.   

    上面方法不行,没有理解我的意思,你那只是简单的画直线,并没有动态的让直线跟着鼠标
    并且可以看到但不画出来,当点击的时候才画出来的,你的方法是鼠标按住拖放时候才画直线。我并不要这个效果,你去试一下photoshop那种效果你就知道我说的是什么意思了?(:)也可能是我没表达清楚吧),谢谢
      

  4.   

    Typhone(Typhone) 
      很聪明!