C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[57699] Re:장성호님 이것좀 봐주세요
장성호 [nasilso] 1154 읽음    2009-07-22 14:01
질문을 잘 이해 못하겠네요
한번 사각형을 그리고 ... (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 할때 기존 내용 지우고 지금것으로 업데이트 하고 싶습니다.
: : :
: : : 마우스로 그림은 그려지는데 기존것을 어떻게 지워야 하는지 모르겠습니다.

+ -

관련 글 리스트
57694 이미지 Canvs 위에 사각형을 다시 그릴때 지우고 다시 그릴려면 왕초보 917 2009/07/22
57695     Re:이미지 Canvs 위에 사각형을 다시 그릴때 지우고 다시 그릴려면 장성호 1163 2009/07/22
57698         장성호님 이것좀 봐주세요 왕초보 1080 2009/07/22
57699             Re:장성호님 이것좀 봐주세요 장성호 1154 2009/07/22
57711                 고맙습니다. 왕초보 1036 2009/07/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.