질문을 잘 이해 못하겠네요
한번 사각형을 그리고 ... (MouseUp까지 한후에)
다시 사각형을 그렸을때 (mouse down->move->up ) 이전에 사각형을 지우고 싶다..
뭐 그런것인가요?
방법1
님께서 사각형을 그릴때 맨 마지막은(MouseUp에서) Pen->Mode가 pmCopy 입니다.
copy모드에서는 아랫쪽에 이미지 정보가 완전히 없어집니다.
MouseUp때도 Pen->Mode를 pmNotXor 로 해서 그렸다가
위치 저장해두고
다시 그렸을때 다시 pmNotXor로 한번 더그리면 사라지겠죠
방법2
또 다른 방법은 ..
윈본 이미지를 따로 저장해 두는 것입니다.
PenMode가 pmCopy로 해서 아무리 그리더라도 원본 이미지를 따로 저장해두었으니
복구하는것은 문제가 없죠
일반적으로 두번째 방법을 많이 씁니다.
아시겠지만 Xor나 NotXOr로 사각형을 그렸을때는 설정한 Pen-Color 그대로 나타는것이 아니기 때문이죠
그럼..
왕초보 님이 쓰신 글 :
: 폼 > panel > 이미지 위에 아래 배경은 보인 상태에서 사각 라인만을 그립니다.
: 이미지 중 일부분을 사각형으로 취하는 프로그램을 만들려고 합니다.
: 잘못 선택한 부분은 다시 마우스로 선택하여 이미지 사각형을 다시 만들려고 합니다.
:
: 1. 마우스로 라인을 그려서 사각형을 그립니다.
:
: 2. 다시 마우스로 라인을 그리면 기존 사각형은 사라지고
: 현재 다시 그린 사각형만 이미지 위에 존재 합니다.
:
:
:
: 헤더
: //1.마우스 드래그 rectangle
: TPoint FirstPoint; //초기점
: TPoint LastPoint; //현재위치
: bool Dragging;
:
: 이미지 마우스 다운
: void __fastcall TForm3::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y)
: {
: if (Shift.Contains(ssLeft)) //좌측마우스가 눌렸을 경
: {
: FirstPoint.x = X;
: FirstPoint.y = Y;
: LastPoint.x = X;
: LastPoint.y = Y;
: Image1->Canvas->MoveTo(X, Y);
: Dragging = true;
: }
: }
:
: void __fastcall TForm3::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
: {
: if (Dragging && Shift.Contains(ssLeft)) {
: Image1->Canvas->Pen->Mode = pmNotXor;
: Image1->Canvas->Brush->Style = bsClear;
: Image1->Canvas->Rectangle(FirstPoint.x,FirstPoint.y,LastPoint.x,LastPoint.y);
:
: Image1->Canvas->Rectangle(FirstPoint.x,FirstPoint.y,X,Y);
:
: LastPoint.x = X;
: LastPoint.y = Y;
: }
: }
:
: void __fastcall TForm3::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
: int X, int Y)
: {
:
: Image1->Canvas->Pen->Color = clBlue;
: Image1->Canvas->Pen->Width = 4;
:
: if (Dragging)
: {
: Image1->Canvas->Pen->Mode = pmCopy;
: Image1->Canvas->Rectangle(FirstPoint.x,FirstPoint.y,X,Y);
: }
: Dragging = false;
: }
:
:
:
:
:
: 위의 소스에서 장성호님이 알려주신 대로 하면 각이벤트에 넣어 봤지만 지워지지 않습니다.
:
:
:
:
: 장성호 님이 쓰신 글 :
: : 기존 그림을 전체 삭제 하려면?
: :
: : 삭제한다기 보다
: : 흰색으로 전체에 사각형을 그리면 되죠
: :
: :
: : Image1->Canvas->Brush->Color=clWhite;
: : Image1->Canvas->Brush->Style=bsSolid;
: : Image1->Canvas->Pen->Color=clWhite;
: : Image1->Canvas->Pen->Style=psSolid;
: : Image1->Canvas->Rectangle(0,0,Image1->Width,Image1->Height);
: :
: : //Bursh나 Pen의 Color나 Style을 원하는 대로 바꿔서...
: : Image1->Canvas->Rectangle(sqrPoint[0].x, sqrPoint[0].y, sqrPoint[1].x,sqrPoint[1].y);
: :
: :
: :
: :
: :
: : 그럼..
: :
: :
: :
: :
: :
: : 왕초보 님이 쓰신 글 :
: : : 폼에 이미지를 올려놓고
: : :
: : : 이미지 위에 사각형 그림을 그릴려고 합니다.
: : : Image1->Canvas->Rectangle(sqrPoint[0].x, sqrPoint[0].y, sqrPoint[1].x,sqrPoint[1].y);
: : :
: : : 문제는
: : : 먼저 있는 그림은 지우고
: : : 다시 그리려고 하는데
: : :
: : : 마우스 드래그가 끝난후 up 할때 기존 내용 지우고 지금것으로 업데이트 하고 싶습니다.
: : :
: : : 마우스로 그림은 그려지는데 기존것을 어떻게 지워야 하는지 모르겠습니다.