我在画布上绘图,
现在要求只绘制区域Rect(10,10,500,500)中的内容,该如何做好?
有橡皮筋的效果.
鼠标可能移到区域外

解决方案 »

  1.   

    是这样的:做一个绘图工具,绘图区域只占整个窗体的一部分(在窗体的canvas上绘图)
    用户可以在窗体上用鼠标绘图,鼠标可以在整个窗体上移动,
    但是只显示在绘图区域部分的内容.
      

  2.   

    TCavas.ClipRect
    照这个方向去考虑应该可以解决
      

  3.   

    呵呵,写了个例子
    var
      Form1: TForm1;
      ptStart: TPoint;
      b_mousedown: Boolean = false;
      PreRect: TRect;
      rgn: HRGN;
    implementation{$R *.dfm}procedure TForm1.FormPaint(Sender: TObject);
    begin
      Canvas.Brush.Color := clWhite;
      Canvas.Rectangle(100,100,300,300);
    end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      b_mousedown := true;
      ptStart.X := X;
      ptStart.Y := Y;
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if b_mousedown then
      begin
        SelectClipRgn(Canvas.Handle, rgn);
        Canvas.Pen.Color := clWhite;
        Canvas.Ellipse(PreRect);
        Canvas.Pen.Color := clBlue;
        Canvas.Pen.Style := psDot;
        Canvas.Ellipse(ptStart.X, ptStart.Y, X, Y);
        PreRect.TopLeft := ptStart;
        PreRect.BottomRight.X := X;
        PreRect.BottomRight.Y := Y;
      end;
    end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      b_mousedown := false;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      rgn := CreateRectRgn(100,100,300,300);
    end;end.
      

  4.   

    谢谢大家,谢谢killlaoli(菜鸟)
    就是这个方法可以解决.