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;
 老板来了,没做完,但也差不多了,你的把Rectangle()换成Polyline或者自己写个画巨型的寒数!
 记着将pen的模式设回去!

解决方案 »

  1.   

    看一下
    http://www.truevcl.com
      

  2.   

    按pathe(睡斛)的做法,基本可行,可还有些问题:
    1、画图的位置与鼠标的位置不对应,我用ClientToScreen了还不行
    2、画出的矩形框会把原来的图像掩盖了,不知是否Canvas.Mode设置出了问题?
      

  3.   

    你不能用Rectangle(),我不是说了吗?那是老板来了,
    用来凑数的,你应该自己写个用线画巨型的函数,
    因为rectangle()是会用brush填充巨型的!
    不行了,对不住了,不能多说了!