Q&A

  • 마우스로 그린 사각형 영역에만 색상을 채울려면..
왜..있잖습니까.
바탕화면에 마우스로 사각형을 그리면 사각형 테두리가 생기잖아여
마우스를 띄면 없어지고요..

마우스를 누르고 사각형을 그린 영역을 파랑색으로 칠하는걸 해보고 싶은데..
이거 어떻게 합니까??

조언부탁드립니다.

4  COMMENTS
  • Profile
    홍성락 2002.10.15 22:48
    폼에서의 예제입니다.
    반투명으로 사각을 그리는거구요.
    커멘트로한건 하나씩 그릴때 습니다.

      private
        { Private declarations }
        Origin, MovePt : TPoint;
        Drawing:Boolean;

      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
         Canvas.MoveTo(X,Y);
         Origin  := Point(X,Y);
         MovePt  := Origin;
         Drawing := True;
    end;

    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
        if Drawing then begin
            canvas.pen.Color := clBlue;
            canvas.pen.mode := pmnotXor ; //또는 pmMerge
            canvas.Brush.Color := clBlue;
                    
            //canvas.MoveTo(Origin.x, Origin.y);
            //canvas.LineTo(MovePt.x, Origin.y);
            //canvas.LineTo(MovePt.x, MovePt.y);
            //canvas.LineTo(Origin.x, MovePt.y);
            //canvas.LineTo(Origin.x, Origin.y);
            canvas.Rectangle(Rect(Origin.x, Origin.y, MovePt.x, MovePt.y));

            //canvas.MoveTo(Origin.x, Origin.y);
            //canvas.LineTo(x, Origin.y);
            //canvas.LineTo(x, y);
            //canvas.LineTo(Origin.x, y);
            //canvas.LineTo(Origin.x, origin.y);
            canvas.Rectangle(Rect(Origin.x, Origin.y,x, y));

            //Form1.Refresh;
            //canvas.FillRect(Rect(Origin.x, Origin.y,x, y));

            movept := Point(x,y);

         end;
    end;

    procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
         {canvas.pen.Color := clBlue;
         canvas.pen.mode := pmnotXor ;
         canvas.MoveTo(Origin.x, origin.y);
         canvas.LineTo(x, origin.y);
         canvas.LineTo(x, y);
         canvas.LineTo(Origin.x,y);
         canvas.LineTo(Origin.x, origin.y);}

         Form1.Refresh;
         //canvas.FillRect(Rect(Origin.x, Origin.y,x, y));
         drawing := False;
    end;
    hsr///////////////////////////////////////////////////////////////////
  • Profile
    델퐁 2002.10.15 23:59
    조언 감사드립니다. 잘 이해가 됩니다.
    근데..반투명이 아닌 오버라이팅(Overwriting) 시킬라면 어떻게 합니까..?



  • Profile
    홍성락 2002.10.16 00:13
    canvas.pen.mode := pmnotXor ; //또는 pmMerge
    를 지우세요.
    아니면 canvas.pen.mode := pmCopy ;하세요
  • Profile
    델퐁 2002.10.16 01:07