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
[57711] 고맙습니다.
왕초보 [] 1036 읽음    2009-07-22 19:09
장성호 님이 쓰신 글 :
: 질문을 잘 이해 못하겠네요
: 한번 사각형을 그리고 ... (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 위에 사각형을 다시 그릴때 지우고 다시 그릴려면 왕초보 918 2009/07/22
57695     Re:이미지 Canvs 위에 사각형을 다시 그릴때 지우고 다시 그릴려면 장성호 1164 2009/07/22
57698         장성호님 이것좀 봐주세요 왕초보 1080 2009/07/22
57699             Re:장성호님 이것좀 봐주세요 장성호 1155 2009/07/22
57711                 고맙습니다. 왕초보 1036 2009/07/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.